package Ġrs . d us k . engine . path . find Ċ Ċ import Ġrs . d us k . engine . entity . Direction Ċ import Ġrs . d us k . engine . entity . Size Ċ import Ġrs . d us k . engine . entity . character . move . Movement Ċ import Ġrs . d us k . engine . entity . character . move . Steps Ċ import Ġrs . d us k . engine . map . Tile Ċ import Ġrs . d us k . engine . path . Finder Ċ import Ġrs . d us k . engine . path . Path Result Ċ import Ġrs . d us k . engine . path . Target Strategy Ċ import Ġrs . d us k . engine . path . Traversal Strategy Ċ Ċ /** Ċ Ġ* ĠMov es Ġh orizontally Ġand Ġvert ically Ġuntil Ġblocked Ġby Ġobstacle Ġor Ġreaches Ġtarget Ċ Ġ* ĠUsed Ġfor Ġcom bat . Ċ Ġ* Ġ@ author ĠMajor Ċ Ġ* Ġ@ author ĠG reg ĠH ib ber d Ġ< greg @ greg hib ber d . com > Ċ Ġ* Ġ@ since ĠMay Ġ 2 0 , Ġ 2 0 2 0 Ċ Ġ*/ Ċ class ĠDirect Search Ġ: ĠFin der Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġfind ( ĊĠĠĠĠĠĠĠ Ġtile : ĠTile , ĊĠĠĠĠĠĠĠ Ġsize : ĠSize , ĊĠĠĠĠĠĠĠ Ġmovement : ĠMovement , ĊĠĠĠĠĠĠĠ Ġstrategy : ĠTarget Strategy , ĊĠĠĠĠĠĠĠ Ġtraversal : ĠTra versal Strategy ĊĠĠĠ Ġ): ĠPath Result Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġadd Horizontal ( movement . steps , Ġtile , Ġsize , Ġstrategy , Ġtraversal ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Horizontal ( ĊĠĠĠĠĠĠĠ Ġsteps : ĠSteps , ĊĠĠĠĠĠĠĠ Ġtile : ĠTile , ĊĠĠĠĠĠĠĠ Ġsize : ĠSize , ĊĠĠĠĠĠĠĠ Ġstrategy : ĠTarget Strategy , ĊĠĠĠĠĠĠĠ Ġtraversal : ĠTra versal Strategy ĊĠĠĠ Ġ): ĠPath Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdelta Ġ= Ġtile . delta ( strategy . tile ) ĊĠĠĠĠĠĠĠ Ġvar Ġdx Ġ= Ġdelta . x ĊĠĠĠĠĠĠĠ Ġvar Ġx Ġ= Ġtile . x ĊĊĠĠĠĠĠĠĠ Ġif Ġ( dx Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(! traversal . blocked ( x , Ġtile . y , Ġtile . plane , ĠDirection . WEST ) Ġ&& Ġdx -- Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps . add ( Direction . WEST ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx -- ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( dx Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(! traversal . blocked ( x , Ġtile . y , Ġtile . plane , ĠDirection . EAST ) Ġ&& Ġdx ++ Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps . add ( Direction . EAST ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlast Ġ= Ġtile . copy ( x Ġ= Ġx ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( strategy . re ached ( last , Ġsize )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPath Result . Success . Complete ( last ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( delta . y Ġ!= Ġ 0 Ġ&& Ġ! traversal . blocked ( last , Ġif Ġ( delta . y Ġ> Ġ 0 ) ĠDirection . SO UTH Ġelse ĠDirection . NORTH )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Vertical ( steps , Ġlast , Ġsize , Ġstrategy , Ġtraversal ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPath Result . Success . Partial ( last ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Vertical ( ĊĠĠĠĠĠĠĠ Ġsteps : ĠSteps , ĊĠĠĠĠĠĠĠ Ġtile : ĠTile , ĊĠĠĠĠĠĠĠ Ġsize : ĠSize , ĊĠĠĠĠĠĠĠ Ġstrategy : ĠTarget Strategy , ĊĠĠĠĠĠĠĠ Ġtraversal : ĠTra versal Strategy ĊĠĠĠ Ġ): ĠPath Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdelta Ġ= Ġtile . delta ( strategy . tile ) ĊĠĠĠĠĠĠĠ Ġvar Ġdy Ġ= Ġdelta . y ĊĠĠĠĠĠĠĠ Ġvar Ġy Ġ= Ġtile . y ĊĊĠĠĠĠĠĠĠ Ġif Ġ( dy Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(! traversal . blocked ( tile . x , Ġy , Ġtile . plane , ĠDirection . SO UTH ) Ġ&& Ġdy -- Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps . add ( Direction . SO UTH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy -- ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( dy Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(! traversal . blocked ( tile . x , Ġy , Ġtile . plane , ĠDirection . NORTH ) Ġ&& Ġdy ++ Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps . add ( Direction . NORTH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlast Ġ= Ġtile . copy ( y Ġ= Ġy ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( strategy . re ached ( last , Ġsize )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPath Result . Success . Complete ( last ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( delta . x Ġ!= Ġ 0 Ġ&& Ġ! traversal . blocked ( last , Ġif Ġ( delta . x Ġ> Ġ 0 ) ĠDirection . WEST Ġelse ĠDirection . EAST ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Horizontal ( steps , Ġlast , Ġsize , Ġstrategy , Ġtraversal ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPath Result . Success . Partial ( last ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }