package Ġcom . ly ee ed ar . Board Ċ Ċ import Ġcom . badlogic . gdx . utils . Array Ċ import Ġcom . badlogic . gdx . utils . Int Map Ċ import Ġcom . badlogic . gdx . utils . Object Map Ċ import Ġcom . ly ee ed ar . Util . get Xml Ċ import Ġcom . ly ee ed ar . Util . random Ċ import Ġcom . ly ee ed ar . Util . random OrNull Ċ import Ġk tx . collections . set Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠPhil ip Ġon Ġ 0 1 - Aug - 1 6 . Ċ Ġ*/ Ċ Ċ class ĠF action Ċ { Ċ ĉ val Ġsize Map Ġ= ĠInt Map < Array < Monster Desc >>() Ċ ĉ val Ġboss Size Map Ġ= ĠInt Map < Array < Monster Desc >>() ĊĊ ĉ fun Ġget ( size : ĠInt , Ġgrid : ĠGrid ) Ġ: ĠMon ster Desc Ċ ĉ { Ċĉ ĉ var Ġs Ġ= Ġsize Ċĉ ĉ while Ġ( s Ġ> Ġ 0 ) Ċĉ ĉ { Ċĉĉ ĉ if Ġ( size Map . containsKey ( s )) Ġreturn Ġsize Map [ s ]. as Sequence (). random ( grid . ran ) !! Ċĉĉ ĉ s -- Ċĉ ĉ } ĊĊĉ ĉ return Ġsize Map . values (). first (). random ( grid . ran ) Ċ ĉ } ĊĊ ĉ fun Ġget ( name : ĠString ): ĠMon ster Desc ? Ċ ĉ { Ċĉ ĉ for Ġ( size Ġin Ġsize Map ) Ċĉ ĉ { Ċĉĉ ĉ for Ġ( monster Ġin Ġsize . value ) Ċĉĉ ĉ { Ċĉĉĉ ĉ if Ġ( monster . name . toUpperCase ( Locale . EN GL ISH ) Ġ== Ġname . toUpperCase ( Locale . EN GL ISH )) Ġreturn Ġmonster Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ return Ġnull Ċ ĉ } ĊĊ ĉ fun Ġget Boss ( size : ĠInt , Ġgrid : ĠGrid ) Ġ: ĠMon ster Desc Ċ ĉ { Ċĉ ĉ var Ġs Ġ= Ġsize Ċĉ ĉ while Ġ( s Ġ> Ġ 0 ) Ċĉ ĉ { Ċĉĉ ĉ if Ġ( boss Size Map . containsKey ( s )) Ġreturn Ġboss Size Map [ s ]. as Sequence (). random ( grid . ran ) !! Ċĉĉ ĉ s -- Ċĉ ĉ } ĊĊĉ ĉ return Ġboss Size Map . values (). first OrNull ()?. random OrNull ( grid . ran ) Ġ?: Ġget ( size , Ġgrid ) Ċ ĉ } ĊĊ ĉ fun Ġget Boss ( name : ĠString ): ĠMon ster Desc ? Ċ ĉ { Ċĉ ĉ for Ġ( size Ġin Ġboss Size Map ) Ċĉ ĉ { Ċĉĉ ĉ for Ġ( monster Ġin Ġsize . value ) Ċĉĉ ĉ { Ċĉĉĉ ĉ if Ġ( monster . name Ġ== Ġname ) Ġreturn Ġmonster Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ return Ġnull Ċ ĉ } ĊĊ ĉ comp anion Ġobject Ċ ĉ { Ċĉ ĉ val Ġloaded F actions Ġ= ĠObject Map < String , ĠF action >() ĊĊĉ ĉ fun Ġload ( path : ĠString ): ĠF action Ċĉ ĉ { Ċĉĉ ĉ if Ġ( loaded F actions . containsKey ( path . toLowerCase ( Locale . EN GL ISH ))) Ċĉĉ ĉ { Ċĉĉĉ ĉ return Ġloaded F actions [ path . toLowerCase ( Locale . EN GL ISH )] Ċĉĉ ĉ } ĊĊĉĉ ĉ val Ġxml Ġ= Ġget Xml (" F actions /$ path ") ĊĊĉĉ ĉ val Ġf action Ġ= ĠF action () ĊĊĉĉ ĉ val Ġmonster El Ġ= Ġxml . getChild ByName (" Mon sters ") !! Ċĉĉ ĉ for Ġ( i Ġin Ġ 0 Ġuntil Ġmonster El . child Count ) Ċĉĉ ĉ { Ċĉĉĉ ĉ val Ġel Ġ= Ġmonster El . getChild ( i ) Ċĉĉĉ ĉ val Ġdesc Ġ= ĠMon ster Desc () Ċĉĉĉ ĉ desc . load ( el ) ĊĊĉĉĉ ĉ if Ġ(! faction . size Map . containsKey ( desc . size )) Ċĉĉĉ ĉ { Ċĉĉĉĉ ĉ faction . size Map [ desc . size ] Ġ= ĠArray () Ċĉĉĉ ĉ } ĊĊĉĉĉ ĉ faction . size Map [ desc . size ]. add ( desc ) Ċĉĉ ĉ } ĊĊĉĉ ĉ val Ġboss El Ġ= Ġxml . getChild ByName (" B os ses ") Ċĉĉ ĉ if Ġ( boss El Ġ!= Ġnull ) Ċĉĉ ĉ { Ċĉĉĉ ĉ for Ġ( i Ġin Ġ 0 Ġuntil Ġboss El . child Count ) Ċĉĉĉ ĉ { Ċĉĉĉĉ ĉ val Ġel Ġ= Ġboss El . getChild ( i ) Ċĉĉĉĉ ĉ val Ġdesc Ġ= ĠMon ster Desc () Ċĉĉĉĉ ĉ desc . load ( el ) ĊĊĉĉĉĉ ĉ if Ġ(! faction . boss Size Map . containsKey ( desc . size )) Ċĉĉĉĉ ĉ { Ċĉĉĉĉĉ ĉ faction . boss Size Map [ desc . size ] Ġ= ĠArray () Ċĉĉĉĉ ĉ } ĊĊĉĉĉĉ ĉ faction . boss Size Map [ desc . size ]. add ( desc ) Ċĉĉĉ ĉ } Ċĉĉ ĉ } ĊĊĉĉ ĉ loaded F actions [ path . toLowerCase ( Locale . EN GL ISH ). replace (". xml ", Ġ" ")] Ġ= Ġf action ĊĊĉĉ ĉ return Ġf action Ċĉ ĉ } ĊĊĉ ĉ fun Ġcreate Custom Faction ( level : ĠLevel ): ĠF action Ċĉ ĉ { Ċĉĉ ĉ val Ġf action Ġ= ĠF action () Ċĉĉ ĉ faction . size Map [ 1 ] Ġ= ĠArray () Ċĉĉ ĉ faction . size Map [ 1 ]. add ( level . custom Monster !! ) ĊĊĉĉ ĉ return Ġf action Ċĉ ĉ } Ċ ĉ } Ċ } ĊĊ