package Ġorg . demo th . icast le . ecs Ċ Ċ import Ġcom . badlogic . ash ley . core . Engine Ċ import Ġcom . badlogic . ash ley . core . Entity Ċ import Ġcom . badlogic . gdx . graphics . g 2 d . Animation Ċ import Ġcom . badlogic . gdx . maps . objects . Rectangle Map Object Ċ import Ġcom . badlogic . gdx . maps . t iled . T iled Map Ċ import Ġcom . badlogic . gdx . math . Rectangle Ċ import Ġcom . badlogic . gdx . math . Vector 2 Ċ import Ġcom . badlogic . gdx . physics . box 2 d . Body Ċ import Ġcom . badlogic . gdx . physics . box 2 d . Body Def Ċ import Ġcom . badlogic . gdx . physics . box 2 d . World Ċ import Ġcom . badlogic . gdx . utils . Array Ċ import Ġk tx . ash ley . entity Ċ import Ġk tx . ash ley . get Ċ import Ġk tx . box 2 d . body Ċ import Ġorg . demo th . icast le .* Ċ import Ġorg . demo th . icast le . ui . screens . PP M Ċ import Ġorg . demo th . icast le . ui . screens . SPEED _ DE CEL Ċ import Ġjava . util .* Ċ Ċ class ĠEntity Factory ( private Ġval Ġengine : ĠEngine , Ġprivate Ġval Ġworld : ĠWorld ) Ġ{ ĊĊĠĠĠ Ġfun Ġcreate Player Entity ( location : ĠVector 2 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġengine . entity (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Character Animation ( Sprite Sheet s . PLAYER )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Player ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Named (" player ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Has Health ( 9 0 0 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Movement ( Vector 2 . Zero , ĠMovement Type . FORCE , Ġ- 1 f , Ġ 1 0 0 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Physical ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġworld . body Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserData Ġ= Ġthis @ apply ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition . x Ġ= Ġlocation . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition . y Ġ= Ġlocation . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠBody Def . Body Type . Dynamic Body ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlinear D amping Ġ= ĠSPE ED _ DE CEL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfixed Rotation Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircle ( 0 . 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol lide Ġ= Ġ{ Ġself , Ġother Ġ-> Ġdamage Health ( self , Ġother ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollision Class Ġ= ĠRE CE IVE _ DA MAGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol lide sWith Ġ= ĠDEAL _ DA MAGE Ġor ĠTR IG GER )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln (" spawn ed Ġplayer Ġat Ġ(${ location . x }, Ġ${ location . y }) ") ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Eye Monster ( x : ĠFloat , Ġy : ĠFloat , Ġhealth : ĠInt Ġ= Ġ 1 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" Sp aw ning Ġeye Ġmonster Ġat : Ġ($ x , Ġ$ y )") ĊĠĠĠĠĠĠĠ Ġengine . entity (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Named (" ey el ander ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Monster F iring ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Monster Walk ing ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Movement ( Vector 2 . Zero , ĠMovement Type . FORCE , Ġ 2 f , Ġ 1 5 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Has Health ( health )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Text ured ( Sprites . EY E _ BOT )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Physical ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġworld . body Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserData Ġ= Ġthis @ apply ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition . x Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition . y Ġ= Ġy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠBody Def . Body Type . Dynamic Body ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlinear D amping Ġ= ĠSPE ED _ DE CEL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfixed Rotation Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircle ( 0 . 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol lide Ġ= Ġ{ Ġself , Ġother Ġ-> Ġdamage Health ( self , Ġother ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollision Class Ġ= ĠRE CE IVE _ DA MAGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol lide sWith Ġ= ĠDEAL _ DA MAGE )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Dummy Monster ( x : ĠFloat , Ġy : ĠFloat , Ġhe ath : ĠInt Ġ= Ġ 1 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" Sp aw ning Ġdummy Ġat : Ġ($ x , Ġ$ y )") ĊĠĠĠĠĠĠĠ Ġengine . entity (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Named (" dummy ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Has Health ( he ath )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Monster Walk ing ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Movement ( Vector 2 . Zero , ĠMovement Type . FORCE , Ġ 2 f , Ġ 1 5 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Character Animation ( Sprite Sheet s . S KE LE TON )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Physical ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġworld . body Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserData Ġ= Ġthis @ apply ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition . x Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition . y Ġ= Ġy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠBody Def . Body Type . Dynamic Body ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlinear D amping Ġ= ĠSPE ED _ DE CEL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfixed Rotation Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircle ( 0 . 7 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol lide Ġ= Ġ{ Ġself , Ġother Ġ-> Ġdamage Health ( self , Ġother ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollision Class Ġ= ĠRE CE IVE _ DA MAGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol lide sWith Ġ= ĠDEAL _ DA MAGE )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Map ( map : ĠT iled Map , Ġprevious Map Name : ĠString ?, Ġtransition : Ġ( String ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" Clean ing Ġup Ġall Ġentities ") ĊĠĠĠĠĠĠĠ Ġengine . removeAll Entities () ĊĠĠĠĠĠĠĠ Ġval Ġall B odies Ġ= ĠArray < Body >() ĊĠĠĠĠĠĠĠ Ġworld . getB odies ( all B odies ) ĊĠĠĠĠĠĠĠ Ġdebug (" Clean ing Ġup Ġall Ġbox 2 d Ġbodies : Ġ${ all B odies . size }") ĊĠĠĠĠĠĠĠ Ġall B odies . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġworld . destroy Body ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdebug (" Creating Ġentities ") ĊĠĠĠĠĠĠĠ Ġval ĠstartPosition Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( previous Map Name Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug (" No Ġprevious Ġmap , Ġlooking Ġfor Ġ' start ' Ġobject ...") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . layers [" entities "]. objects [" start "] Ġas ĠRectangle Map Object ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug (" Changing Ġmap Ġfrom Ġ$ previous Map Name , Ġlooking Ġfor Ġcorresponding Ġ' entr ance _ from '") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . layers [" entities "]. objects ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . name Ġ== Ġ" entr ance _ from " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġas ĠRectangle Map Object Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Ġ{ Ġit . properties [" from "] Ġ== Ġprevious Map Name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdebug (" Player Ġstart Ġposition Ġis Ġ${ start Position ?. rectangle ?. getC ent ral Point () }") ĊĠĠĠĠĠĠĠ Ġif Ġ( start Position Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Could Ġnot Ġfind Ġentr ance Ġfrom Ġ$ previous Map Name ! dd ") ĊĠĠĠĠĠĠĠ Ġmap . layers . forEach Ġ{ Ġlayer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayer . objects . getBy Type ( Rectangle Map Object :: class . java ). forEach Ġ{ Ġobj Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( obj . name Ġ== Ġ" spawn _ ey el ander ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhealth Ġ= Ġobj . properties [" health "] Ġas ĠInt ? Ġ?: Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Eye Monster ( obj . rectangle . x Ġ/ ĠP PM , Ġobj . rectangle . y Ġ/ ĠP PM , Ġhealth ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( obj . name Ġ== Ġ" dummy ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Dummy Monster ( obj . rectangle . x Ġ/ ĠP PM , Ġobj . rectangle . y Ġ/ ĠP PM ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( obj . name Ġ== Ġ" exit _ to ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Map Ġ= Ġobj . properties [" to "] Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Transition (" exit Ġto Ġ$ next Map ", Ġnext Map , Ġobj . rectangle , Ġtransition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( layer . name . startsWith (" solid _ ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Wall ( world , Ġobj . rectangle , Ġobj . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġadd Ġplayer ĊĠĠĠĠĠĠĠ Ġcreate Player Entity ( start Position . rectangle . getC ent ral Point ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Wall ( world : ĠWorld , Ġrect : ĠRectangle , Ġname : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġengine . entity (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Physical ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġworld . body Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserData Ġ= Ġthis @ apply ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠBody Def . Body Type . Static Body ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition . set ( rect . getC ent ral Point ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbox ( width Ġ= Ġrect . width Ġ/ ĠP PM , Ġheight Ġ= Ġrect . height Ġ/ ĠP PM ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġcollision Class Ġ= Ġif Ġ( name . isNull Or Blank ()) ĠSOL ID _ IN VISIBLE Ġelse ĠSOL ID )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! name . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Named ( name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Fire Ball ( velocity : ĠVector 2 , Ġorigin : ĠVector 2 , Ġowner : ĠEntity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġengine . entity (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Named (" fire ball ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Text ured ( Sprites . FIRE B ALL )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Physical ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġworld . body Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserData Ġ= Ġthis @ apply ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠBody Def . Body Type . Dynamic Body ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . linear Velocity . set ( velocity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . position . set ( origin ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircle ( 0 . 5 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Sensor Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol lide Ġ= Ġ:: destroy Fire ball With Explo sion , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollision Class Ġ= ĠDEAL _ DA MAGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol lide sWith Ġ= ĠRE CE IVE _ DA MAGE Ġor ĠSOL ID )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Has Damage ( 3 0 7 0 , Ġowner )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Has Sound ( Sounds . FIRE B ALL )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( TTL ( 2 f )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Rot ating Fire Ball ( velocity : ĠVector 2 , Ġorigin : ĠVector 2 , Ġowner : ĠEntity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġengine . entity (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Named (" fire - sp rir als ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Simple Animation ( Sprite Sheet s . FIRE _ SPI R ALS , Ġ 0 . 1 f , ĠAnimation . Play Mode . LOOP )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Physical ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġworld . body Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserData Ġ= Ġthis @ apply ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠBody Def . Body Type . Dynamic Body ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlinear Velocity . set ( velocity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition . set ( origin ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircle ( 0 . 5 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Sensor Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol lide Ġ= Ġ:: destroy Fire ball , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollision Class Ġ= ĠDEAL _ DA MAGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol lide sWith Ġ= ĠRE CE IVE _ DA MAGE Ġor ĠSOL ID )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Has Damage ( 1 0 0 0 , Ġowner )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( TTL ( 2 f )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Floating Label ( text : ĠString , Ġlocation : ĠVector 2 , Ġttl : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġengine . entity (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Named ( text )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Floating Up Label ( Vector 2 ( 0 f , Ġ 0 . 0 1 f ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( TTL ( ttl )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Position ed ( location )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Sound ( sound : ĠSounds ) Ġ{ ĊĠĠĠĠĠĠĠ Ġengine . entity (). add ( Has Sound ( sound )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Transition ( name : ĠString , Ġnext Map : ĠString , Ġrect : ĠRectangle , Ġaction : Ġ( String ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdebug (" Creating Ġtransition Ġto Ġ$ next Map ") ĊĠĠĠĠĠĠĠ Ġengine . entity (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Named ( name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Physical ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġworld . body Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserData Ġ= Ġthis @ apply ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠBody Def . Body Type . Static Body ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition . set ( rect . getC ent ral Point ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbox ( width Ġ= Ġrect . width Ġ/ ĠP PM , Ġheight Ġ= Ġrect . height Ġ/ ĠP PM ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Sensor Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol lide Ġ= Ġ{ Ġ_, Ġother Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplayer Ġ= Ġother . get < Player >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( player Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction . invoke ( next Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollision Class Ġ= ĠTR IG GER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol lide sWith Ġ= ĠRE CE IVE _ DA MAGE )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdamage Health ( self : ĠEntity , Ġother : ĠEntity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhealth Ġ= Ġself . get < Has Health >() ĊĠĠĠĠĠĠĠ Ġval Ġdamage Ġ= Ġother . get < Has Damage >() ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġself . get < Physical >() ?. body ?. position ĊĠĠĠĠĠĠĠ Ġif Ġ( damage Ġ!= Ġnull Ġ&& Ġdamage . owner Ġ!== Ġself Ġ&& Ġhealth Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhealth . value Ġ-= Ġdamage . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Floating Label ( damage . value . toString (), Ġposition . cpy (), Ġ 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġengine . entity (). add ( Has Sound ( H UR T [ Random (). nextInt ( H UR T . size )])) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdestroy Fire ball ( self : ĠEntity , Ġother : ĠEntity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdamage Ġ= Ġself . get < Has Damage >() ĊĠĠĠĠĠĠĠ Ġval Ġphysical Ġ= Ġself . get < Physical >() ĊĠĠĠĠĠĠĠ Ġif Ġ( physical Ġ!= Ġnull Ġ&& Ġdamage Ġ!= Ġnull Ġ&& Ġother Ġ!== Ġdamage . owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphysical . toBe Removed Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdestroy Fire ball With Explo sion ( self : ĠEntity , Ġother : ĠEntity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdamage Ġ= Ġself . get < Has Damage >() ĊĠĠĠĠĠĠĠ Ġval Ġphysical Ġ= Ġself . get < Physical >() ĊĠĠĠĠĠĠĠ Ġif Ġ( physical Ġ!= Ġnull Ġ&& Ġdamage Ġ!= Ġnull Ġ&& Ġother Ġ!== Ġdamage . owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphysical . toBe Removed Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Explo sion ( physical . body . position . cpy ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Explo sion ( position : ĠVector 2 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġengine . entity (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Position ed ( position )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Simple Animation ( Sprite Sheet s . FIRE _ EXP LO SION , Ġ 0 . 1 f , ĠAnimation . Play Mode . NORMAL )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Has Sound ( Sounds . EXP LO SION )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }