package Ġcom . ly ee ed ar . Scene Timeline Ċ Ċ import Ġcom . badlogic . ash ley . core . Entity Ċ import Ġcom . badlogic . gdx . utils . Array Ċ import Ġcom . badlogic . gdx . utils . Xml Reader Ċ import Ġcom . ly ee ed ar . AI . Tasks . Task Interrupt Ċ import Ġcom . ly ee ed ar . Components .* Ċ import Ġcom . ly ee ed ar . ElementType Ċ import Ġcom . ly ee ed ar . Global Ċ import Ġcom . ly ee ed ar . Space Slot Ċ import Ġcom . ly ee ed ar . Util . Random Ċ import Ġkotlinx . coroutines . experimental . Common Pool Ċ import Ġkotlinx . coroutines . experimental . Job Ċ import Ġkotlinx . coroutines . experimental . launch Ċ import Ġkotlinx . coroutines . experimental . run Blocking Ċ Ċ class ĠDamage Action () Ġ: ĠAbstract Timeline Action () Ċ { Ċ ĉ var Ġamount : ĠInt Ġ= Ġ 1 Ċ ĉ late init Ġvar Ġelement : ĠElementType Ċ ĉ var Ġelement al Conversion : ĠFloat Ġ= Ġ 0 . 0 f Ċ ĉ var Ġblock able Ġ= Ġtrue ĊĊ ĉ var Ġattack Power Ġ= Ġ 1 0 0 ĊĊ ĉ override Ġfun Ġenter () Ċ ĉ { Ċĉ ĉ for Ġ( tile Ġin Ġparent . destination Tiles ) Ċĉ ĉ { Ċĉĉ ĉ for Ġ( entity Ġin Ġtile . contents ) Ċĉĉ ĉ { Ċĉĉĉ ĉ val Ġstats Ġ= Ġentity . stats () Ġ?: Ġcontinue Ċĉĉĉ ĉ stats . deal Damage (( amount Ġ* Ġattack Power ) Ġ/ Ġ 1 0 0 . 0 f , Ġelement , Ġelement al Conversion , Ġblock able ) Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ override Ġfun Ġexit () Ċ ĉ { ĊĊ ĉ } ĊĊ ĉ override Ġfun Ġcopy ( parent : ĠScene Timeline ): ĠAbstract Timeline Action Ċ ĉ { Ċĉ ĉ val Ġaction Ġ= ĠDamage Action () Ċĉ ĉ action . parent Ġ= Ġparent ĊĊĉ ĉ action . startTime Ġ= ĠstartTime Ċĉ ĉ action . duration Ġ= Ġduration ĊĊĉ ĉ action . amount Ġ= Ġamount Ċĉ ĉ action . element Ġ= Ġelement Ċĉ ĉ action . element al Conversion Ġ= Ġelement al Conversion Ċĉ ĉ action . attack Power Ġ= Ġattack Power Ċĉ ĉ action . block able Ġ= Ġblock able ĊĊĉ ĉ return Ġaction Ċ ĉ } ĊĊ ĉ override Ġfun Ġparse ( xml : ĠXml Reader . Element ) Ċ ĉ { Ċĉ ĉ amount Ġ= Ġxml . getInt (" Amount ", Ġ 1 ) Ċĉ ĉ element Ġ= ĠElementType . valueOf ( xml . get (" Element ", Ġ" None "). toUpperCase ()) Ċĉ ĉ element al Conversion Ġ= Ġxml . get Float (" Element al Conversion ", Ġ 0 . 0 f ) Ċĉ ĉ block able Ġ= Ġxml . getBoolean (" Block able ", Ġtrue ) Ċ ĉ } Ċ } Ċ Ċ class ĠSpawn Action () Ġ: ĠAbstract Timeline Action () Ċ { Ċ ĉ late init Ġvar Ġentity Xml : ĠXml Reader . Element Ċ ĉ late init Ġvar Ġentity Slot : ĠSpace Slot Ċ ĉ var Ġdelete On Exit Ġ= Ġfalse Ċ ĉ var Ġignore Wall Ġ= Ġfalse ĊĊ ĉ val Ġspawn ed Entities Ġ= ĠArray < Entity >() ĊĊ ĉ override Ġfun Ġenter () Ċ ĉ { Ċĉ ĉ run Blocking Ġ{ Ċĉĉ ĉ val Ġjobs Ġ= ĠArray < Job >( parent . destination Tiles . size ) ĊĊĉĉ ĉ for Ġ( tile Ġin Ġparent . destination Tiles ) Ċĉĉ ĉ { Ċĉĉĉ ĉ if Ġ( tile Ġ== Ġnull ) Ġcontinue ĊĊĉĉĉ ĉ val Ġjob Ġ= Ġlaunch ( Common Pool ) Ċĉĉĉ ĉ { Ċĉĉĉĉ ĉ if Ġ(! tile . contents . containsKey ( entity Slot ) Ġ&& Ġ( ignore Wall Ġ|| Ġ! tile . contents . containsKey ( Space Slot . WALL ))) Ċĉĉĉĉ ĉ { Ċĉĉĉĉĉ ĉ val Ġentity Ġ= ĠEntity Loader . load ( entity Xml ) ĊĊĉĉĉĉĉ ĉ entity . pos (). tile Ġ= Ġtile Ċĉĉĉĉĉ ĉ tile . contents [ entity . pos (). slot ] Ġ= Ġentity ĊĊĉĉĉĉĉ ĉ synchronized ( Global . engine ) Ċĉĉĉĉĉ ĉ { Ċĉĉĉĉĉĉ ĉ Global . engine . add Entity ( entity ) ĊĊĉĉĉĉĉĉ ĉ spawn ed Entities . add ( entity ) Ċĉĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ else Ġif Ġ(! Global . release ) Ċĉĉĉĉ ĉ { Ċĉĉĉĉĉ ĉ System . err . println (" Tri ed Ġto Ġspawn Ġentity Ġin Ġnon - empty Ġtile Ġat Ġslot Ġ'$ entity Slot ' !") Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ } Ċĉĉĉ ĉ jobs . add ( job ) Ċĉĉ ĉ } ĊĊĉĉ ĉ for Ġ( job Ġin Ġjobs ) Ġjob . join () Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ override Ġfun Ġexit () Ċ ĉ { Ċĉ ĉ if Ġ( delete On Exit ) Ċĉ ĉ { Ċĉĉ ĉ for Ġ( entity Ġin Ġspawn ed Entities ) Ċĉĉ ĉ { Ċĉĉĉ ĉ entity . add ( Marked For Deletion Component ()) Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ override Ġfun Ġcopy ( parent : ĠScene Timeline ): ĠAbstract Timeline Action Ċ ĉ { Ċĉ ĉ val Ġout Ġ= ĠSpawn Action () Ċĉ ĉ out . parent Ġ= Ġparent Ċĉ ĉ out . entity Xml Ġ= Ġentity Xml Ċĉ ĉ out . entity Slot Ġ= Ġentity Slot Ċĉ ĉ out . delete On Exit Ġ= Ġdelete On Exit Ċĉ ĉ out . ignore Wall Ġ= Ġignore Wall ĊĊĉ ĉ return Ġout Ċ ĉ } ĊĊ ĉ override Ġfun Ġparse ( xml : ĠXml Reader . Element ) Ċ ĉ { Ċĉ ĉ entity Xml Ġ= Ġxml . getChild ByName (" Entity ") Ċĉ ĉ delete On Exit Ġ= Ġxml . getBoolean (" Delete On Exit ", Ġfalse ) Ċĉ ĉ ignore Wall Ġ= Ġxml . getBoolean (" Ignore Wall ", Ġfalse ) ĊĊĉ ĉ entity Slot Ġ= ĠEntity Loader . get Slot ( entity Xml ) Ċ ĉ } Ċ Ċ } Ċ Ċ class ĠSt un Action () Ġ: Ġ ĠAbstract Timeline Action () Ċ { Ċ ĉ var Ġchance Ġ= Ġ 1 f ĊĊ ĉ override Ġfun Ġenter () Ċ ĉ { Ċĉ ĉ for Ġ( tile Ġin Ġparent . destination Tiles ) Ċĉ ĉ { Ċĉĉ ĉ for Ġ( entity Ġin Ġtile . contents ) Ċĉĉ ĉ { Ċĉĉĉ ĉ val Ġtask Ġ= Ġentity . task () Ġ?: Ġcontinue ĊĊĉĉĉ ĉ if Ġ( Random . random () Ġ<= Ġchance ) Ċĉĉĉ ĉ { Ċĉĉĉĉ ĉ task . tasks . clear () Ċĉĉĉĉ ĉ task . tasks . add ( Task Interrupt ()) Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ override Ġfun Ġexit () Ċ ĉ { ĊĊ ĉ } ĊĊ ĉ override Ġfun Ġcopy ( parent : ĠScene Timeline ): ĠAbstract Timeline Action Ċ ĉ { Ċĉ ĉ val Ġaction Ġ= ĠSt un Action () Ċĉ ĉ action . parent Ġ= Ġparent Ċĉ ĉ action . startTime Ġ= ĠstartTime Ċĉ ĉ action . duration Ġ= Ġduration ĊĊĉ ĉ action . chance Ġ= Ġchance ĊĊĉ ĉ return Ġaction Ċ ĉ } ĊĊ ĉ override Ġfun Ġparse ( xml : ĠXml Reader . Element ) Ċ ĉ { Ċĉ ĉ chance Ġ= Ġxml . get Float (" Chance ", Ġ 1 f ) Ċ ĉ } Ċ Ċ }