/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 ĠAnd rei ĠHe ide lb acher Ġ< and rei . he ide lb acher @ gmail . com > Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . andre ih h . alg ost orm . systems . physics 2 d Ċ Ċ import Ġcom . andre ih h . alg ost orm . core . ecs . Entity Group Ċ import Ġcom . andre ih h . alg ost orm . core . ecs . Entity Ref Ċ import Ġcom . andre ih h . alg ost orm . systems . physics 2 d . Body . K INE MAT IC Ċ import Ġcom . andre ih h . alg ost orm . systems . physics 2 d . Body . STATIC Ċ import Ġcom . andre ih h . alg ost orm . systems . physics 2 d . Body . TRIGGER Ċ Ċ /** ĠThe Ġ` Position ` Ġcomponent Ġof Ġthis Ġentity . Ġ*/ Ċ val ĠEntity Ref . position : ĠPosition ? ĊĠĠĠ Ġget () Ġ= Ġget ( Position :: class ) Ċ Ċ /** ĠReturns Ġwhether Ġthis Ġentity Ġis Ġa Ġ[ Body ]. Ġ*/ Ċ val ĠEntity Ref . is Body : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġcontains ( Body :: class ) Ċ Ċ /** ĠReturns Ġwhether Ġthis Ġentity Ġis Ġ[ K INE MAT IC ]. Ġ*/ Ċ val ĠEntity Ref . is Kin ematic : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġget ( Body :: class ) Ġ== ĠK INE MAT IC Ċ Ċ /** ĠReturns Ġwhether Ġthis Ġentity Ġis Ġa Ġcoll ider Ġ([ K INE MAT IC ] Ġor Ġ[ STATIC ]). Ġ*/ Ċ val ĠEntity Ref . is Collider : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġwhen Ġ( get ( Body :: class )) Ġ{ ĊĠĠĠĠĠĠĠ ĠK INE MAT IC , ĠSTATIC Ġ-> Ġtrue ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠ Ġ} Ċ Ċ /** ĠReturns Ġwhether Ġthis Ġentity Ġis Ġ[ STATIC ]. Ġ*/ Ċ val ĠEntity Ref . is Static : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġwhen Ġ( get ( Body :: class )) Ġ{ ĊĠĠĠĠĠĠĠ ĠSTATIC , ĠTR IG GER Ġ-> Ġtrue ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠ Ġ} Ċ Ċ /** ĠReturns Ġwhether Ġthis Ġentity Ġis Ġ[ TRIGGER ]. Ġ*/ Ċ val ĠEntity Ref . is Trigger : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġwhen Ġ( get ( Body :: class )) Ġ{ ĊĠĠĠĠĠĠĠ ĠTR IG GER Ġ-> Ġtrue ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠ Ġ} Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġtransformed Ġversion Ġof Ġthis Ġposition Ġby Ġthe Ġindicated Ġamount . Ċ Ġ* Ċ Ġ* Ġ@ param Ġdx Ġthe Ġhorizontal Ġtranslation Ġamount Ġin Ġtiles Ċ Ġ* Ġ@ param Ġdy Ġthe Ġvertical Ġtranslation Ġamount Ġin Ġtiles Ġ( positive Ġis Ġdown ) Ċ Ġ* Ġ@ return Ġthe Ġnew Ġposition Ċ Ġ*/ Ċ fun ĠPosition . transformed ( dx : ĠInt , Ġdy : ĠInt ): ĠPosition Ġ= ĊĠĠĠĠĠĠĠ Ġcopy ( x Ġ= Ġx Ġ+ Ġdx , Ġy Ġ= Ġy Ġ+ Ġdy ) Ċ Ċ fun ĠEntity Ref . overlap s ( other : ĠEntity Ref ): ĠBoolean Ġ= Ġposition . let Ġ{ Ġp Ġ-> ĊĠĠĠ Ġp Ġ!= Ġnull Ġ&& Ġp Ġ== Ġother . position Ċ } Ċ Ċ fun ĠEntity Group . get Entities At ( x : ĠInt , Ġy : ĠInt ): ĠList < Entity Ref > Ġ= ĊĠĠĠ ĠPosition ( x , Ġy ). let Ġ{ Ġposition Ġ-> ĊĠĠĠĠĠĠĠ Ġfilter To ( array ListOf ()) Ġ{ Ġentity Ġ-> Ġentity . position Ġ== Ġposition Ġ} ĊĠĠĠ Ġ} Ċ