package Ġcom . game . sr pg . Units . Items Ċ Ċ import Ġcom . game . sr pg . Map . Game Map Ċ import Ġcom . game . sr pg . Units . Components . Unit Type Ċ import Ġcom . game . sr pg . Units . Game Unit ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby ĠF lying J am Ġon Ġ 8 / 2 / 2 0 1 6 . Ċ Ġ*/ Ċ Ċ abstract Ġclass ĠRange { ĊĠĠĠ Ġabstract Ġfun Ġcondition ( map Ġ: ĠGame Map , Ġx Ġ: ĠInt , Ġy Ġ: ĠInt , Ġtarget : ĠUnit Type Ġ= ĠUnit Type . EN EM Y ) Ġ: ĠBoolean ĊĠĠĠ Ġabstract Ġfun Ġel igible S quares ( map Ġ: ĠGame Map , Ġx Ġ: ĠInt , Ġy Ġ: ĠInt , Ġtarget Ġ: ĠUnit Type Ġ= ĠUnit Type . EN EM Y ) Ġ: ĠArray < Int > ĊĠĠĠ Ġabstract Ġfun Ġun filtered El igible S quares ( map Ġ: ĠGame Map , Ġx Ġ: ĠInt , Ġy Ġ: ĠInt , Ġtarget Ġ: ĠUnit Type Ġ= ĠUnit Type . EN EM Y ) Ġ: ĠArray < Int > Ċ } Ċ Ċ class ĠStrict Range ( val Ġrange Ġ: ĠInt Ġ= Ġ 1 ) Ġ: ĠRange (){ ĊĊĠĠĠ Ġoverride Ġfun Ġcondition ( map Ġ: ĠGame Map , Ġx Ġ: ĠInt , Ġy Ġ: ĠInt , Ġtarget Ġ: ĠUnit Type ) Ġ: ĠBoolean { ĊĊĠĠĠĠĠĠĠ Ġval Ġcheck Ġ= Ġ{ x Ġ: ĠGame Unit Ġ-> Ġx . unit Class . type Ġ== Ġtarget } ĊĠĠĠĠĠĠĠ Ġval Ġnorth Ġ= Ġy Ġ- Ġrange ĊĠĠĠĠĠĠĠ Ġval Ġsouth Ġ= Ġy Ġ+ Ġrange ĊĠĠĠĠĠĠĠ Ġval Ġeast Ġ= Ġx Ġ+ Ġrange ĊĠĠĠĠĠĠĠ Ġval Ġwest Ġ= Ġx Ġ- Ġrange ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ( map . is Unit ( x , Ġnorth , Ġcheck ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġmap . is Unit ( x , Ġsouth , Ġcheck ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġmap . is Unit ( east , Ġy , Ġcheck ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġmap . is Unit ( west , Ġy , Ġcheck )) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġel igible S quares ( map Ġ: ĠGame Map , Ġx Ġ: ĠInt , Ġy Ġ: ĠInt , Ġtarget Ġ: ĠUnit Type ) Ġ: ĠArray < Int >{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcheck Ġ= Ġ{ x Ġ: ĠGame Unit Ġ-> Ġx . unit Class . type Ġ== Ġtarget } ĊĠĠĠĠĠĠĠ Ġval Ġnorth Ġ= Ġy Ġ- Ġrange ĊĠĠĠĠĠĠĠ Ġval Ġsouth Ġ= Ġy Ġ+ Ġrange ĊĠĠĠĠĠĠĠ Ġval Ġeast Ġ= Ġx Ġ+ Ġrange ĊĠĠĠĠĠĠĠ Ġval Ġwest Ġ= Ġx Ġ- Ġrange ĊĊĠĠĠĠĠĠĠ Ġval Ġpossible Ġ= ĠarrayOf ( Pair ( x , Ġnorth ), ĠPair ( x , Ġsouth ), ĠPair ( east , Ġy ), ĠPair ( west , Ġy )). filter { Ġmap . is Unit ( it . first , Ġit . second , Ġcheck ) Ġ}. map Ġ{ Ġmap . path . point To Index ( it . first , Ġit . second )} ĊĠĠĠĠĠĠĠ Ġreturn Ġpossible . to Typed Array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġun filtered El igible S quares ( map : ĠGame Map , Ġx : ĠInt , Ġy : ĠInt , Ġtarget : ĠUnit Type ): ĠArray < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcheck Ġ= Ġ{ x Ġ: ĠGame Unit Ġ-> Ġx . unit Class . type Ġ== Ġtarget } ĊĠĠĠĠĠĠĠ Ġval Ġnorth Ġ= Ġy Ġ- Ġrange ĊĠĠĠĠĠĠĠ Ġval Ġsouth Ġ= Ġy Ġ+ Ġrange ĊĠĠĠĠĠĠĠ Ġval Ġeast Ġ= Ġx Ġ+ Ġrange ĊĠĠĠĠĠĠĠ Ġval Ġwest Ġ= Ġx Ġ- Ġrange ĊĊĠĠĠĠĠĠĠ Ġval Ġpossible Ġ= ĠarrayOf ( Pair ( x , Ġnorth ), ĠPair ( x , Ġsouth ), ĠPair ( east , Ġy ), ĠPair ( west , Ġy )). map Ġ{ Ġmap . path . point To Index ( it . first , Ġit . second )} ĊĠĠĠĠĠĠĠ Ġreturn Ġpossible . to Typed Array () ĊĠĠĠ Ġ} Ċ Ċ } ĊĊ