package Ġcom . ly ee ed ar . Game . Ability Ċ Ċ import Ġcom . badlogic . gdx . utils . Array Ċ import Ġcom . ly ee ed ar . Board . Grid Ċ import Ġcom . ly ee ed ar . Board . Tile Ċ import Ġcom . ly ee ed ar . Components . match able Ċ import Ġcom . ly ee ed ar . Direction Ċ import Ġcom . ly ee ed ar . Util . Data Value Ċ import Ġcom . ly ee ed ar . Util . Xml Data Ċ import Ġcom . ly ee ed ar . Util . Xml Data Class Ċ import Ġcom . ly ee ed ar . Util . random Ċ import Ġjava . util .* Ċ Ċ enum Ġclass ĠPer mut er Type Ċ { Ċ ĉ SINGLE , Ċ ĉ AL LO F TYPE , Ċ ĉ N OF TYPE , Ċ ĉ COLUMN , Ċ ĉ ROW , Ċ ĉ CROSS , Ċ ĉ BLOCK , Ċ ĉ DI AM OND , Ċ ĉ RANDOM , Ċ ĉ CON E Ċ } Ċ Ċ class ĠPer mut er Ġ: ĠXml Data Class () Ċ { Ċ ĉ late init Ġvar Ġtype : ĠPer mut er Type ĊĉĊ ĉ @ Data Value ( visible If Ġ= Ġ" Type Ġ== ĠN OF TYPE Ġ|| ĠType Ġ== ĠR AN DOM ") Ċ ĉ var Ġcount : ĠInt Ġ= Ġ 1 ĊĉĊ ĉ @ Data Value ( visible If Ġ= Ġ" Type Ġ== ĠCOLUMN Ġ|| ĠType Ġ== ĠROW Ġ|| ĠType Ġ== ĠC ROSS Ġ|| ĠType Ġ== ĠCON E ") Ċ ĉ var Ġrange : ĠInt Ġ= Ġ 9 9 9 9 9 ĊĉĊ ĉ @ Data Value ( visible If Ġ= Ġ" Type Ġ== ĠBLOCK Ġ|| ĠType Ġ== ĠDI AM OND ") Ċ ĉ var Ġa oe : ĠInt Ġ= Ġ 1 ĊĊ ĉ override Ġfun Ġload ( xml Data : ĠXml Data ) Ċ ĉ { Ċ ĉ /* ĠAutogenerated Ġmethod Ġcontents . ĠDo Ġnot Ġmodify . Ġ*/ Ċĉ ĉ type Ġ= ĠPer mut er Type . valueOf ( xml Data . get (" Type "). toUpperCase ( Locale . EN GL ISH )) Ċĉ ĉ count Ġ= Ġxml Data . getInt (" Count ", Ġ 1 ) Ċĉ ĉ range Ġ= Ġxml Data . getInt (" Range ", Ġ 9 9 9 9 9 ) Ċĉ ĉ ao e Ġ= Ġxml Data . getInt (" A oe ", Ġ 1 ) Ċ ĉ } Ċ } Ċ Ċ fun ĠPer mut er . perm ute ( tile : ĠTile , Ġgrid : ĠGrid , Ġselected Targets : ĠArray < Tile >, Ġability : ĠAbility ?, Ġsource : ĠTile ?): ĠSequence < Tile > Ċ { Ċ ĉ return Ġwhen ( type ) Ċ ĉ { Ċĉ ĉ Per mut er Type . SINGLE Ġ-> Ġsequence Of ( tile ) ĊĊĉ ĉ Per mut er Type . AL LO F TYPE Ġ-> Ġ{ Ċĉĉ ĉ return Ġgrid . grid . filter Ġ{ Ċĉĉĉ ĉ val Ġkey Ġ= Ġtile . contents !!. match able () !!. desc . key Ċĉĉĉ ĉ it . contents ?. match able ()?. desc ?. key Ġ== Ġkey Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ Per mut er Type . N OF TYPE Ġ-> Ġ{ Ċĉĉ ĉ val Ġkey Ġ= Ġtile . contents !!. match able () !!. desc . key Ċĉĉ ĉ return Ġgrid . grid . filter { Ġit . contents ?. match able ()?. desc ?. key Ġ== Ġkey Ġ}. random ( count , Ġgrid . ran ) Ċĉ ĉ } ĊĊĉ ĉ Per mut er Type . COLUMN Ġ-> Ġ{ Ċĉĉ ĉ return Ġgrid . grid . filter { Ġit . x Ġ== Ġtile . x Ġ&& Ġit . dist ( tile ) Ġ<= Ġrange Ġ} Ċĉ ĉ } ĊĊĉ ĉ Per mut er Type . ROW Ġ-> Ġ{ Ċĉĉ ĉ return Ġgrid . grid . filter { Ġit . y Ġ== Ġtile . y Ġ&& Ġit . dist ( tile ) Ġ<= Ġrange Ġ} Ċĉ ĉ } ĊĊĉ ĉ Per mut er Type . CROSS Ġ-> Ġ{ Ċĉĉ ĉ return Ġgrid . grid . filter { Ġ( it . y Ġ== Ġtile . y Ġ|| Ġit . x Ġ== Ġtile . x ) Ġ&& Ġit . dist ( tile ) Ġ<= Ġrange Ġ} Ċĉ ĉ } ĊĊĉ ĉ Per mut er Type . BLOCK Ġ-> Ġ{ Ċĉĉ ĉ return Ġgrid . grid . filter { Ġit . tax i Dist ( tile ) Ġ<= Ġa oe Ġ} Ċĉ ĉ } ĊĊĉ ĉ Per mut er Type . DI AM OND Ġ-> Ġ{ Ċĉĉ ĉ return Ġgrid . grid . filter { Ġit . dist ( tile ) Ġ<= Ġa oe Ġ} Ċĉ ĉ } ĊĊĉ ĉ Per mut er Type . RANDOM Ġ-> Ġ{ Ċĉĉ ĉ if Ġ( ability Ġ!= Ġnull Ġ&& Ġselected Targets . size Ġ> Ġ 0 Ġ&& Ġability . data . effect . type Ġ== ĠEffect Type . CONVERT ) Ċĉĉ ĉ { Ċĉĉĉ ĉ val Ġselected Type Ġ= Ġselected Targets [ 0 ]. contents !!. match able () !!. desc Ċĉĉĉ ĉ return Ġgrid . grid . filter { Ġit . contents ?. match able () Ġ!= Ġnull Ġ&& Ġit . contents !!. match able () !!. desc Ġ!= Ġselected Type Ġ}. random ( count , Ġgrid . ran ) Ċĉĉ ĉ } ĊĊĉĉ ĉ return Ġgrid . grid . filter { Ġability ?. data ?. target ter ?. isValid ( it ) Ġ?: Ġit . can Have Or b Ġ}. random ( count , Ġgrid . ran ) Ċĉ ĉ } ĊĊĉ ĉ Per mut er Type . CON E Ġ-> Ġ{ Ċĉĉ ĉ val Ġdir Ġ= ĠDirection . get Card inal Direction ( source !! , Ġtile ) Ċĉĉ ĉ val Ġcon e Ġ= ĠDirection . build Con e ( dir , Ġsource , Ġrange ) ĊĊĉĉ ĉ return Ġcon e . map NotNull Ġ{ Ġif Ġ( grid . grid . in Bounds ( it )) Ġgrid . grid . get ( it ) Ġelse Ġnull Ġ}. as Sequence () Ċĉ ĉ } ĊĊĉ ĉ else Ġ-> Ġthrow ĠException (" Invalid Ġper mut er Ġtype Ġ$ type ") Ċ ĉ } Ċ }