package Ġcom . ly ee ed ar . Board . Completion Condition Ċ Ċ import Ġcom . badlogic . gdx . math . Vector 2 Ċ import Ġcom . badlogic . gdx . scenes . scene 2 d . ui . Label Ċ import Ġcom . badlogic . gdx . scenes . scene 2 d . ui . Stack Ċ import Ġcom . badlogic . gdx . scenes . scene 2 d . ui . Table Ċ import Ġcom . ly ee ed ar . Board . Grid Ċ import Ġcom . ly ee ed ar . Board . spawn M ote Ċ import Ġcom . ly ee ed ar . Components . he al able Ċ import Ġcom . ly ee ed ar . Components . pos Ċ import Ġcom . ly ee ed ar . Components . sprite Ċ import Ġcom . ly ee ed ar . Components . tile Ċ import Ġcom . ly ee ed ar . Game . Global Ċ import Ġcom . ly ee ed ar . Render ables . Animation . Expand Animation Ċ import Ġcom . ly ee ed ar . Scre ens . Grid Screen Ċ import Ġcom . ly ee ed ar . Statistic Ċ import Ġcom . ly ee ed ar . UI . Grid Widget Ċ import Ġcom . ly ee ed ar . UI . Particle Effect Actor Ċ import Ġcom . ly ee ed ar . UI . Sprite Widget Ċ import Ġcom . ly ee ed ar . UI . Tutorial Ċ import Ġcom . ly ee ed ar . Util .* Ċ import Ġk tx . math . minus Ċ Ċ @ Data Class ( name Ġ= Ġ" Die ") Ċ class ĠCompletion Condition Die Data Ġ: ĠAbstract Completion Condition Data () Ċ { Ċ ĉ override Ġval Ġclass ID : ĠString Ġ= Ġ" Die " ĊĊ ĉ override Ġfun Ġload ( xml Data : ĠXml Data ) Ċ ĉ { Ċ ĉ /* ĠAutogenerated Ġmethod Ġcontents . ĠDo Ġnot Ġmodify . Ġ*/ Ċĉ ĉ super . load ( xml Data ) Ċ ĉ } Ċ } Ċ Ċ class ĠCompletion Condition Die ( data : ĠCompletion Condition Die Data ) Ġ: ĠAbstract Completion Condition < Completion Condition Die Data >( data ) Ċ { Ċ ĉ late init Ġvar Ġhp Label : ĠLabel Ċ ĉ var Ġmax HP : ĠInt Ġ= Ġ 1 Ċ ĉ var Ġhp Ġ= Ġ 1 Ċ ĉ var Ġfraction al Hp Ġ= Ġ 0 f ĊĊ ĉ val Ġblink Table Ġ= ĠTable () ĊĊ ĉ late init Ġvar Ġtable : ĠTable ĊĊ ĉ override Ġfun Ġattach Handlers ( grid : ĠGrid ) Ċ ĉ { Ċĉ ĉ max HP Ġ= Ġgrid . level . player . get Stat ( Statistic . HE ALTH ). toInt () Ċĉ ĉ hp Ġ= Ġmax HP ĊĊĉ ĉ grid . on Attack ed Ġ+= Ġfun ( entity ): ĠHandler Action Ġ{ ĊĊĉĉ ĉ val Ġsprite Ġ= Ġentity . sprite ()?. copy () Ġ?: Ġreturn ĠHandler Action . Keep Attached Ċĉĉ ĉ val Ġpos Ġ= Ġentity . pos () Ġ?: Ġreturn ĠHandler Action . Keep Attached Ċĉĉ ĉ val Ġdst Ġ= Ġtable . local To Stage Coordinates ( Vector 2 ( Random . random () Ġ* Ġtable . width , ĠRandom . random () Ġ* Ġtable . height )) Ċĉĉ ĉ val Ġm ote Dst Ġ= Ġdst . cpy () Ġ- ĠVector 2 ( Grid Widget . instance . tile Size Ġ/ Ġ 2 f , ĠGrid Widget . instance . tile Size Ġ/ Ġ 2 f ) Ċĉĉ ĉ val Ġsrc Ġ= ĠGrid Widget . instance . point To Screen space ( pos . position ) ĊĊĉĉ ĉ // Ġattack Ġall Ġfriend lies Ċĉĉ ĉ for Ġ( tile Ġin Ġgrid . friendly Tiles ) Ċĉĉ ĉ { Ċĉĉĉ ĉ val Ġfriendly Ġ= Ġtile . contents ?. he al able () Ġ?: Ġcontinue Ċĉĉĉ ĉ val Ġnew sprite Ġ= Ġsprite . copy () Ċĉĉĉ ĉ val Ġdst Ġ= ĠGrid Widget . instance . point To Screen space ( tile ) ĊĊĉĉĉ ĉ val Ġduration Ġ= Ġ 0 . 3 5 f Ċĉĉĉ ĉ spawn M ote ( src , Ġdst , Ġnew sprite , ĠGrid Widget . instance . tile Size , Ġ{}, Ġanim Speed Ġ= Ġduration , Ġle ap Ġ= Ġtrue ) ĊĊĉĉĉ ĉ tile . add Delayed Action ( Ċĉĉĉĉ ĉ { Ġtile Ġ-> Ċĉĉĉĉĉ ĉ val Ġfriendly Ġ= Ġtile . contents ?. he al able () Ċĉĉĉĉĉ ĉ if Ġ( friendly Ġ!= Ġnull ) Ċĉĉĉĉĉ ĉ { Ċĉĉĉĉĉĉ ĉ friendly . hp -- Ċĉĉĉĉĉ ĉ } Ċĉĉĉĉĉ ĉ val Ġhit Ġ= Ġgrid . hit Effect . copy () Ċĉĉĉĉĉ ĉ tile . effects . add ( hit ) Ċĉĉĉĉ ĉ }, Ġduration ) Ċĉĉ ĉ } ĊĊĉĉ ĉ // Ġcalculate Ġblock Ġand Ġcounter Ċĉĉ ĉ fun Ġtry Block ( chance : ĠFloat ): ĠBoolean Ċĉĉ ĉ { Ċĉĉĉ ĉ val Ġblock Chance Ġ= Ġ 0 . 2 f ĊĊĉĉĉ ĉ var Ġremaining Ġ= Ġchance Ċĉĉĉ ĉ while Ġ( remaining Ġ> Ġ 0 ) Ċĉĉĉ ĉ { Ċĉĉĉĉ ĉ if Ġ( remaining Ġ< Ġ 1 f ) Ċĉĉĉĉ ĉ { Ċĉĉĉĉĉ ĉ if Ġ( grid . ran . next Float () Ġ< Ġblock Chance Ġ* Ġremaining ) Ċĉĉĉĉĉ ĉ { Ċĉĉĉĉĉĉ ĉ return Ġtrue Ċĉĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ else Ċĉĉĉĉ ĉ { Ċĉĉĉĉĉ ĉ if Ġ( grid . ran . next Float () Ġ< Ġblock Chance ) Ċĉĉĉĉĉ ĉ { Ċĉĉĉĉĉĉ ĉ return Ġtrue Ċĉĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ } ĊĊĉĉĉĉ ĉ remaining Ġ-= Ġ 1 f Ċĉĉĉ ĉ } ĊĊĉĉĉ ĉ return Ġfalse Ċĉĉ ĉ } ĊĊĉĉ ĉ var Ġblocked Ġ= Ġfalse Ċĉĉ ĉ var Ġcounter ed Ġ= Ġfalse Ċĉĉ ĉ if Ġ( try Block ( Global . player . get Stat ( Statistic . REF LECT ))) Ċĉĉ ĉ { Ċĉĉĉ ĉ blocked Ġ= Ġtrue Ċĉĉĉ ĉ counter ed Ġ= Ġtrue Ċĉĉ ĉ } Ċĉĉ ĉ else Ġif Ġ( try Block ( Global . player . get Stat ( Statistic . AE GIS ))) Ċĉĉ ĉ { Ċĉĉĉ ĉ blocked Ġ= Ġtrue Ċĉĉ ĉ } Ċĉĉ ĉ else Ġif Ġ( try Block ( Global . player . get Stat ( Statistic . COUNTER ))) Ċĉĉ ĉ { Ċĉĉĉ ĉ counter ed Ġ= Ġtrue Ċĉĉ ĉ } ĊĊĉĉ ĉ if Ġ( Global . god Mode ) Ċĉĉ ĉ { Ċĉĉĉ ĉ blocked Ġ= Ġtrue Ċĉĉ ĉ } ĊĊĉĉ ĉ // Ġanimate Ġplayer Ġattack Ċĉĉ ĉ val Ġanim Speed Ġ= Ġ 0 . 3 5 f Ċĉĉ ĉ spawn M ote ( src , Ġm ote Dst , Ġsprite , ĠGrid Widget . instance . tile Size , Ġ{}, Ġanim Speed Ġ= Ġanim Speed , Ġle ap Ġ= Ġtrue ) ĊĊĉĉ ĉ pos . tile ?. add Delayed Action ( Ċĉĉĉ ĉ { Ċĉĉĉĉ ĉ if Ġ( blocked ) Ċĉĉĉĉ ĉ { Ċĉĉĉĉĉ ĉ if Ġ(! Global . resolve Instant ly ) Ċĉĉĉĉĉ ĉ { Ċĉĉĉĉĉĉ ĉ val Ġpos Ġ= Ġdst ĊĊĉĉĉĉĉĉ ĉ val Ġsprite Ġ= ĠAsset Manager . load Particle Effect (" Block ") Ċĉĉĉĉĉĉ ĉ val Ġactor Ġ= ĠParticle Effect Actor ( sprite . get Particle Effect ()) Ċĉĉĉĉĉĉ ĉ actor . setSize ( 4 8 f , Ġ 4 8 f ) Ċĉĉĉĉĉĉ ĉ actor . setPosition ( pos . x , Ġpos . y ) Ċĉĉĉĉĉĉ ĉ Statics . stage . add Actor ( actor ) Ċĉĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ else Ċĉĉĉĉ ĉ { Ċĉĉĉĉĉ ĉ if Ġ( hp Ġ> Ġ 0 ) Ġhp -- ĊĊĉĉĉĉĉ ĉ if Ġ(! Global . resolve Instant ly ) Ċĉĉĉĉĉ ĉ { Ċĉĉĉĉĉĉ ĉ val Ġpos Ġ= Ġdst ĊĊĉĉĉĉĉĉ ĉ val Ġsprite Ġ= ĠAsset Manager . load Particle Effect (" Hit ") Ċĉĉĉĉĉĉ ĉ val Ġactor Ġ= ĠParticle Effect Actor ( sprite . get Particle Effect ()) Ċĉĉĉĉĉĉ ĉ actor . setSize ( 4 8 f , Ġ 4 8 f ) Ċĉĉĉĉĉĉ ĉ actor . setPosition ( pos . x , Ġpos . y ) Ċĉĉĉĉĉĉ ĉ Statics . stage . add Actor ( actor ) ĊĊĉĉĉĉĉĉ ĉ hp Label . setText ("$ hp /$ max HP ") Ċĉĉĉĉĉĉ ĉ update B link () Ċĉĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ } ĊĊĉĉĉĉ ĉ if Ġ( counter ed ) Ċĉĉĉĉ ĉ { Ċĉĉĉĉĉ ĉ val Ġsrc Ġ= Ġdst Ċĉĉĉĉĉ ĉ val Ġtarget Ġ= Ġgrid . monster Tiles . random () Ċĉĉĉĉĉ ĉ if Ġ( target Ġ!= Ġnull ) Ċĉĉĉĉĉ ĉ { Ċĉĉĉĉĉĉ ĉ val Ġdst Ġ= Ġif Ġ( Global . resolve Instant ly ) ĠVector 2 () Ġelse ĠGrid Screen . instance . grid !!. point To Screen space ( target ) Ċĉĉĉĉĉĉ ĉ spawn M ote ( src , Ġdst , Ġsprite , ĠGrid Widget . instance . tile Size , Ġ{}, Ġanim Speed Ġ= Ġ 0 . 3 5 f , Ġle ap Ġ= Ġtrue ) Ċĉĉĉĉĉĉ ĉ target . add Delayed Action ( Ċĉĉĉĉĉĉĉ ĉ { Ġtarget Ġ-> Ċĉĉĉĉĉĉĉĉ ĉ grid . pop ( target , Ġ 0 f , ĠGlobal . player , ĠGlobal . player . get Stat ( Statistic . MATCH DA MAGE ), ĠGlobal . player . get Stat ( Statistic . PI ER CE )) Ċĉĉĉĉĉĉĉ ĉ }, Ġ 0 . 3 5 f ) Ċĉĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ }, Ġanim Speed ) ĊĊĉĉ ĉ return ĠHandler Action . Keep Attached Ċĉ ĉ } ĊĊĉ ĉ grid . on Turn Ġ+= Ġ{ ĊĊĉĉ ĉ grid . level . player . isIn B ers erk Range Ġ= Ġhp Ġ<= Ġmax HP Ġ/ Ġ 2 ĊĊĉĉ ĉ fraction al Hp Ġ+= Ġgrid . level . player . get Stat ( Statistic . REG ENER ATION ) ĊĊĉĉ ĉ update Fraction al Hp () ĊĊĉĉ ĉ Handler Action . Keep Attached Ċĉ ĉ } ĊĊĉ ĉ if Ġ(! Global . resolve Instant ly ) Ċĉ ĉ { Ċĉĉ ĉ Future . call ( Ċĉĉĉ ĉ { Ċĉĉĉĉ ĉ val Ġtutorial Ġ= ĠTutorial (" Die ") Ċĉĉĉĉ ĉ tutorial . add Popup ( Local isation . getText (" completion condition . die . tutorial ", Ġ" UI "), Ġhp Label ) Ċĉĉĉĉ ĉ tutorial . show () Ċĉĉĉ ĉ }, Ġ 0 . 5 f ) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ fun Ġupdate B link () Ċ ĉ { Ċĉ ĉ if Ġ( Global . resolve Instant ly ) Ġreturn ĊĊĉ ĉ if Ġ( hp Ġ<= Ġmax HP Ġ* Ġ 0 . 2 5 f ) Ċĉ ĉ { Ċĉĉ ĉ if Ġ( blink Table . children . size Ġ== Ġ 0 ) Ċĉĉ ĉ { Ċĉĉĉ ĉ val Ġblink Sprite Ġ= ĠAsset Manager . load Sprite (" Particle / glow ") Ċĉĉĉ ĉ blink Sprite . colour Ġ= ĠColour . RED . copy (). a ( 0 . 5 f ) Ċĉĉĉ ĉ blink Sprite . animation Ġ= ĠExpand Animation . obtain (). set ( 1 f , Ġ 0 . 5 f , Ġ 2 f , Ġfalse , Ġtrue ) Ċĉĉĉ ĉ val Ġactor Ġ= ĠSprite Widget ( blink Sprite , Ġ 3 2 f , Ġ 3 2 f ) Ċĉĉĉ ĉ blink Table . add ( actor ). grow () Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ else Ċĉ ĉ { Ċĉĉ ĉ blink Table . clear () Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ fun Ġupdate Fraction al Hp () Ċ ĉ { Ċĉ ĉ // Ġdo Ġre gen Ċĉ ĉ while Ġ( fraction al Hp Ġ> Ġ 1 f ) Ċĉ ĉ { Ċĉĉ ĉ fraction al Hp Ġ-= Ġ 1 f Ċĉĉ ĉ hp Ġ+= Ġ 1 ĊĊĉĉ ĉ if Ġ(! Global . resolve Instant ly ) Ċĉĉ ĉ { Ċĉĉĉ ĉ val Ġpos Ġ= Ġhp Label . local To Stage Coordinates ( Vector 2 ( hp Label . width Ġ/ Ġ 2 f , Ġhp Label . height Ġ/ Ġ 2 f )) ĊĊĉĉĉ ĉ val Ġhe al Sprite Ġ= ĠAsset Manager . load Particle Effect (" He al ") Ċĉĉĉ ĉ he al Sprite . colour Ġ= ĠColour . GREEN Ċĉĉĉ ĉ val Ġactor Ġ= ĠParticle Effect Actor ( he al Sprite . get Particle Effect ()) Ċĉĉĉ ĉ actor . setSize ( 4 8 f , Ġ 4 8 f ) Ċĉĉĉ ĉ actor . setPosition ( pos . x , Ġpos . y ) Ċĉĉĉ ĉ Statics . stage . add Actor ( actor ) Ċĉĉ ĉ } ĊĊĉĉ ĉ if Ġ( hp Ġ> Ġmax HP ) Ċĉĉ ĉ { Ċĉĉĉ ĉ hp Ġ= Ġmax HP Ċĉĉ ĉ } ĊĊĉĉ ĉ hp Label . setText ("$ hp /$ max HP ") Ċĉĉ ĉ update B link () Ċĉ ĉ } ĊĊĉ ĉ // Ġdo Ġde gen Ċĉ ĉ if Ġ( Global . player . get Stat ( Statistic . REG ENER ATION ) Ġ< Ġ 0 f ) Ċĉ ĉ { Ċĉĉ ĉ if Ġ(! Global . resolve Instant ly ) Ċĉĉ ĉ { Ċĉĉĉ ĉ val Ġpos Ġ= Ġhp Label . local To Stage Coordinates ( Vector 2 ( hp Label . width Ġ/ Ġ 2 f , Ġhp Label . height Ġ/ Ġ 2 f )) ĊĊĉĉĉ ĉ val Ġhe al Sprite Ġ= ĠAsset Manager . load Particle Effect (" He al ") Ċĉĉĉ ĉ he al Sprite . colour Ġ= ĠColour . RED Ċĉĉĉ ĉ he al Sprite . flip Y Ġ= Ġtrue Ċĉĉĉ ĉ val Ġactor Ġ= ĠParticle Effect Actor ( he al Sprite . get Particle Effect ()) Ċĉĉĉ ĉ actor . setSize ( 4 8 f , Ġ 4 8 f ) Ċĉĉĉ ĉ actor . setPosition ( pos . x , Ġpos . y ) Ċĉĉĉ ĉ Statics . stage . add Actor ( actor ) Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ while Ġ( fraction al Hp Ġ< Ġ- 1 f ) Ċĉ ĉ { Ċĉĉ ĉ fraction al Hp Ġ+= Ġ 1 f Ċĉĉ ĉ hp Ġ-= Ġ 1 ĊĊĉĉ ĉ hp Label . setText ("$ hp Ġ/ Ġ$ max HP ") Ċĉĉ ĉ update B link () Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ override Ġfun Ġis Completed (): ĠBoolean Ġ= Ġhp Ġ<= Ġ 0 ĊĊ ĉ override Ġfun Ġcreate Table ( grid : ĠGrid ): ĠTable Ċ ĉ { Ċĉ ĉ hp Label Ġ= ĠLabel ("$ hp /$ max HP ", ĠStatic s . skin ) ĊĊĉ ĉ val Ġstack Ġ= ĠStack () Ċĉ ĉ stack . add ( blink Table ) Ċĉ ĉ stack . add ( hp Label ) ĊĊĉ ĉ table Ġ= ĠTable () Ċĉ ĉ table . defaults (). pad ( 1 0 f ) Ċĉ ĉ table . add ( stack ). grow () ĊĊĉ ĉ return Ġtable Ċ ĉ } ĊĊ ĉ override Ġfun ĠgetDescription ( grid : ĠGrid ): ĠTable Ċ ĉ { Ċĉ ĉ val Ġtable Ġ= ĠTable () ĊĊĉ ĉ table . add ( Label ( Local isation . getText (" completion condition . die . description ", Ġ" UI "), ĠStatic s . skin )) ĊĊĉ ĉ return Ġtable Ċ ĉ } Ċ }