package Ġworld . greg s . void ps . engine . map . collision Ċ Ċ import Ġworld . greg s . void ps . engine . entity . Direction Ċ import Ġworld . greg s . void ps . engine . entity . obj . GameObject Ċ Ċ class ĠGameObject Collision ( val Ġcollisions : ĠColl isions ) Ġ{ ĊĊĠĠĠ Ġfun Ġmodify Collision ( gameObject : ĠGameObject , Ġchange Type : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( gameObject . def . solid Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠBo ar der Ġgu ards ĊĠĠĠĠĠĠĠ Ġif Ġ( gameObject . id Ġ== Ġ 3 5 5 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( gameObject . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 0 .. 3 Ġ-> Ġmodify Wall ( gameObject , Ġchange Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 9 .. 2 1 Ġ-> Ġmodify Object ( gameObject , Ġchange Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( gameObject . def . solid Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodify Mask ( gameObject . tile . x , ĠgameObject . tile . y , ĠgameObject . tile . plane , ĠCollision Flag . FLO OR _ DE CO , Ġchange Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmodify Object ( gameObject : ĠGameObject , Ġchange Type : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmask Ġ= ĠCollision Flag . LAND ĊĊĠĠĠĠĠĠĠ Ġif Ġ( gameObject . def . blocks Sky ) Ġ{// solid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmask Ġ= Ġmask Ġor ĠCollision Flag . SK Y ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! gameObject . def . ignore On Route ) Ġ{// not Ġalt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmask Ġ= Ġmask Ġor ĠCollision Flag . IG NO RED ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= ĠgameObject . size . width ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= ĠgameObject . size . height ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( offset X Ġin Ġ 0 Ġuntil Ġwidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( offset Y Ġin Ġ 0 Ġuntil Ġheight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodify Mask ( gameObject . tile . x Ġ+ Ġoffset X , ĠgameObject . tile . y Ġ+ Ġoffset Y , ĠgameObject . tile . plane , Ġmask , Ġchange Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġmodify Wall ( gameObject : ĠGameObject , Ġchange Type : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmodify Wall ( gameObject , Ġ 0 , Ġchange Type ) ĊĠĠĠĠĠĠĠ Ġif Ġ( gameObject . def . blocks Sky ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodify Wall ( gameObject , Ġ 1 , Ġchange Type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! gameObject . def . ignore On Route ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodify Wall ( gameObject , Ġ 2 , Ġchange Type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWall Ġtypes : ĊĠĠĠĠ Ġ* Ġ 0 Ġ- Ġâķĳ ĠExternal Ġwall Ġ( vertical Ġor Ġhorizontal ) ĊĠĠĠĠ Ġ* Ġ 1 Ġ- Ġâķ Ķ ĠExternal Ġcorner Ġ( flat / missing ) ĊĠĠĠĠ Ġ* Ġ 2 Ġ- Ġâķ Ŀ ĠInternal Ġcorner ĊĠĠĠĠ Ġ* Ġ 3 Ġ- Ġâķ Ķ ĠExternal Ġcorner Ġ( regular ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmodify Wall ( gameObject : ĠGameObject , Ġmotion : ĠInt , Ġchange Type : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrotation Ġ= ĠgameObject . rotation ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠgameObject . type ĊĠĠĠĠĠĠĠ Ġvar Ġtile Ġ= ĠgameObject . tile ĊĊĠĠĠĠĠĠĠ Ġ// ĠInternal Ġcorners ĊĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMask Ġboth Ġcard inal Ġdirections ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġor Ġ= Ġwhen Ġ( Direction . ordinal [ rotation Ġand Ġ 0 x 3 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . NORTH _ WEST Ġ-> ĠCollision Flag . NORTH _ OR _ WEST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . NORTH _ EAST Ġ-> ĠCollision Flag . NORTH _ OR _ EAST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . SO UTH _ EAST Ġ-> ĠCollision Flag . SO UTH _ OR _ EAST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . SO UTH _ WEST Ġ-> ĠCollision Flag . SO UTH _ OR _ WEST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodify Mask ( gameObject . tile . x , ĠgameObject . tile . y , ĠgameObject . tile . plane , Ġapply Motion ( or , Ġmotion ), Ġchange Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtile Ġ= Ġtile . add ( Direction . card inal [( rotation Ġ+ Ġ 3 ) Ġand Ġ 0 x 3 ]. delta ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠMask Ġone Ġwall Ġside ĊĠĠĠĠĠĠĠ Ġvar Ġdirection Ġ= Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠDirection . card inal [( rotation Ġ+ Ġ 3 ) Ġand Ġ 0 x 3 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> ĠDirection . card inal [( rotation Ġ+ Ġ 1 ) Ġand Ġ 0 x 3 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠDirection . ordinal [ rotation Ġand Ġ 0 x 3 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmodify Mask ( tile . x , Ġtile . y , Ġtile . plane , Ġdirection . flag ( motion ), Ġchange Type ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠMask Ġother Ġwall Ġside ĊĠĠĠĠĠĠĠ Ġtile Ġ= Ġif Ġ( type Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgameObject . tile . add ( Direction . card inal [ rotation Ġand Ġ 0 x 3 ]. delta ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgameObject . tile . add ( direction . delta ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdirection Ġ= Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> ĠDirection . card inal [( rotation Ġ+ Ġ 2 ) Ġand Ġ 0 x 3 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdirection . inverse () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmodify Mask ( tile . x , Ġtile . y , Ġtile . plane , Ġdirection . flag ( motion ), Ġchange Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmodify Mask ( x : ĠInt , Ġy : ĠInt , Ġplane : ĠInt , Ġmask : ĠInt , Ġchange Type : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( change Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠADD _ MASK Ġ-> Ġcollisions . add ( x , Ġy , Ġplane , Ġmask ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠREMOVE _ MASK Ġ-> Ġcollisions . remove ( x , Ġy , Ġplane , Ġmask ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSET _ MASK Ġ-> Ġcollisions [ x , Ġy , Ġplane ] Ġ= Ġmask ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġapply Motion ( mask : ĠInt , Ġmotion : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( motion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġmask Ġshl Ġ 9 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġmask Ġshl Ġ 2 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġmask ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠDirection . flag ( motion : ĠInt ) Ġ= Ġapply Motion ( flag (), Ġmotion ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠADD _ MASK Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREMOVE _ MASK Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSET _ MASK Ġ= Ġ 2 ĊĠĠĠ Ġ} Ċ }