/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 0 - 2 0 2 0 , ĠD ani lo ĠP ian ini Ġand Ġcontributors Ċ Ġ* Ġlisted Ġin Ġthe Ġmain Ġproject 's Ġal che mist / build . gradle . k ts Ġfile . Ċ Ġ* Ċ Ġ* ĠThis Ġfile Ġis Ġpart Ġof ĠAl che mist , Ġand Ġis Ġdistributed Ġunder Ġthe Ġterms Ġof Ġthe Ċ Ġ* ĠGNU ĠGeneral ĠPublic ĠLicense , Ġwith Ġa Ġlinking Ġexception , Ċ Ġ* Ġas Ġdescribed Ġin Ġthe Ġfile ĠLICENSE Ġin Ġthe ĠAl che mist Ġdistribution 's Ġtop Ġdirectory . Ċ Ġ*/ Ċ Ċ package Ġit . uni bo . al che mist . model . implement ations . actions Ċ Ċ import Ġit . uni bo . al che mist . model . interfaces . Navigation Action Ċ import Ġit . uni bo . al che mist . model . interfaces . Navigation Strategy Ċ import Ġit . uni bo . al che mist . model . interfaces . Orient ing Pe de stri an Ċ import Ġit . uni bo . al che mist . model . interfaces . Position Ċ import Ġit . uni bo . al che mist . model . interfaces . Reaction Ċ import Ġit . uni bo . al che mist . model . interfaces . environments . Environment With Graph Ċ import Ġit . uni bo . al che mist . model . interfaces . geometry . Convex Ge ometric Shape Ċ import Ġit . uni bo . al che mist . model . interfaces . geometry . Ge ometric Transformation Ċ import Ġit . uni bo . al che mist . model . interfaces . geometry . Vector Ċ import Ġjava . lang . IllegalStateException Ċ import Ġit . uni bo . al che mist . model . implement ations . actions . Abstract Navigation Action . Navigation State . START Ċ import Ġit . uni bo . al che mist . model . implement ations . actions . Abstract Navigation Action . Navigation State . NEW _ ROOM Ċ import Ġit . uni bo . al che mist . model . implement ations . actions . Abstract Navigation Action . Navigation State . MOV ING _ TO _ CROSS ING _ POINT _ 1 Ċ import Ġit . uni bo . al che mist . model . implement ations . actions . Abstract Navigation Action . Navigation State . MOV ING _ TO _ CROSS ING _ POINT _ 2 Ċ import Ġit . uni bo . al che mist . model . implement ations . actions . Abstract Navigation Action . Navigation State . CROSS ING _ DO OR Ċ import Ġit . uni bo . al che mist . model . implement ations . actions . Abstract Navigation Action . Navigation State . MOV ING _ TO _ FINAL Ċ import Ġit . uni bo . al che mist . model . implement ations . actions . Abstract Navigation Action . Navigation State . AR RI VED Ċ Ċ /** Ċ Ġ* ĠAn Ġabstract Ġ[ Navigation Action ], Ġtaking Ġcare Ġof Ġproperly Ġmoving Ġthe Ġpe de stri an Ġin Ġthe Ċ Ġ* Ġenvironment Ġwhile Ġdeleg ating Ġthe Ġdecision Ġon Ġwhere Ġto Ġmove Ġit Ġto Ġa Ġ[ Navigation Strategy ]. Ċ Ġ* Ċ Ġ* Ġ@ param ĠT Ġthe Ġconcent ration Ġtype . Ċ Ġ* Ġ@ param ĠP Ġthe Ġ[ Position ] Ġtype Ġand Ġ[ Vector ] Ġtype Ġfor Ġthe Ġspace Ġthe Ġpe de stri an Ġis Ġinto . Ċ Ġ* Ġ@ param ĠA Ġthe Ġtransformations Ġsupported Ġby Ġthe Ġshapes Ġin Ġthis Ġspace . Ċ Ġ* Ġ@ param ĠL Ġthe Ġtype Ġof Ġland marks Ġof Ġthe Ġpe de stri an 's Ġc ognitive Ġmap . Ċ Ġ* Ġ@ param ĠR Ġthe Ġtype Ġof Ġedges Ġof Ġthe Ġpe de stri an 's Ġc ognitive Ġmap , Ġrepresenting Ġthe Ġ[ R ] el ations Ġbetween Ġland marks . Ċ Ġ* Ġ@ param ĠN Ġthe Ġtype Ġof Ġnodes Ġof Ġthe Ġnavigation Ġgraph Ġprovided Ġby Ġthe Ġ[ environment ]. Ċ Ġ* Ġ@ param ĠE Ġthe Ġtype Ġof Ġedges Ġof Ġthe Ġnavigation Ġgraph Ġprovided Ġby Ġthe Ġ[ environment ]. Ċ Ġ*/ Ċ abstract Ġclass ĠAbstract Navigation Action < T , ĠP , ĠA , ĠL , ĠR , ĠN , ĠE >( ĊĠĠĠ Ġoverride Ġval Ġenvironment : ĠEnvironment With Graph < *, ĠT , ĠP , ĠA , ĠN , ĠE >, ĊĠĠĠ Ġoverride Ġval Ġreaction : ĠRe action < T >, ĊĠĠĠ Ġfinal Ġoverride Ġval Ġpe de stri an : ĠOrient ing Pe de stri an < T , ĠP , ĠA , ĠL , ĠR > Ċ ) Ġ: ĠAbstract Ste ering Action < T , ĠP , ĠA >( environment , Ġreaction , Ġpe de stri an ), ĊĠĠĠ ĠNavigation Action < T , ĠP , ĠA , ĠL , ĠR , ĠN , ĠE > ĊĠĠĠ Ġwhere ĠP Ġ: ĠPosition < P >, ĠP Ġ: ĠVector < P >, ĊĠĠĠĠĠĠĠĠĠ ĠA Ġ: ĠGe ometric Transformation < P >, ĊĠĠĠĠĠĠĠĠĠ ĠL Ġ: ĠConv ex Ge ometric Shape < P , ĠA >, ĊĠĠĠĠĠĠĠĠĠ ĠN Ġ: ĠConv ex Ge ometric Shape < P , ĠA > Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġstrategy Ġused Ġto Ġnavigate Ġthe Ġenvironment . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġlateinit Ġvar Ġstrategy : ĠNavigation Strategy < T , ĠP , ĠA , ĠL , ĠR , ĠN , ĠE > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġposition Ġof Ġthe Ġ[ pe de stri an ] Ġin Ġthe Ġ[ environment ], Ġthis Ġis Ġcached Ġand Ġupdated ĊĠĠĠĠ Ġ* Ġevery Ġtime Ġ[ update ] Ġis Ġcalled Ġso Ġas Ġto Ġavoid Ġpotentially Ġcost ly Ġre - comp ut ations . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġpe de stri an Position : ĠP ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġroom Ġ(= Ġenvironment 's Ġarea ) Ġthe Ġ[ pe de stri an ] Ġis Ġinto , Ġthis Ġis Ġcached Ġand Ġupdated ĊĠĠĠĠ Ġ* Ġevery Ġtime Ġ[ update ] Ġis Ġcalled Ġso Ġas Ġto Ġavoid Ġpotentially Ġcost ly Ġre - comp ut ations . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġvar Ġcurrent Room : ĠN ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMinimum Ġdistance Ġto Ġconsider Ġa Ġtarget Ġreached . ĠUsing Ġzero Ġ( even Ġwith Ġfuzzy Ġequals ) Ġmay Ġlead Ġto Ġsome ĊĠĠĠĠ Ġ* Ġboundary Ġcases Ġin Ġwhich Ġthe Ġpe de stri an Ġremains Ġblocked Ġdue Ġto Ġhow Ġthe Ġenvironment Ġmanage Ġcollisions ĊĠĠĠĠ Ġ* Ġat Ġpresent . ĠThis Ġworkaround Ġallows Ġto Ġspecify Ġa Ġminimum Ġdistance Ġwhich Ġis Ġdependent Ġon Ġthe Ġpe de stri an ĊĠĠĠĠ Ġ* Ġshape . ĠIn Ġthe Ġfuture , Ġsomething Ġbetter Ġcould Ġbe Ġdone . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġval Ġmin Distance : ĠDouble Ġ= Ġpe de stri an . shape . diameter ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ returns Ġtrue Ġif Ġthe Ġdistance Ġto Ġ[ pe de stri an Position ] Ġis Ġsmaller Ġthan Ġor Ġequal Ġto Ġ[ min Distance ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun ĠP . is Reached (): ĠBoolean Ġ= Ġdistance To ( pe de stri an Position ) Ġ<= Ġmin Distance ĊĊĠĠĠ Ġprotected Ġvar Ġstate : ĠNavigation State Ġ= ĠSTART ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCache s Ġthe Ġroom Ġthe Ġpe de stri an Ġis Ġinto Ġwhen Ġhe / she Ġstarts Ġmoving . ĠWhen Ġthe Ġpe de stri an Ġis Ġcross ing Ġa Ġdoor , Ġit ĊĠĠĠĠ Ġ* Ġcontains Ġthe Ġroom Ġbeing Ġleft . ĠWhen Ġin Ġ[ Navigation State . MOV ING _ TO _ FINAL ], Ġit Ġcontains Ġthe Ġroom Ġthe Ġpe de stri an ĊĠĠĠĠ Ġ* Ġwas Ġ( and Ġshould Ġbe ) Ġinto . ĠIt 's Ġused Ġto Ġdetect Ġif Ġthe Ġpe de stri an Ġended Ġup Ġin Ġan Ġunexpected Ġroom Ġwhile Ġmoving . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġvar Ġprevious Room : ĠN ? Ġ= Ġnull ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefined Ġwhen Ġcross ing Ġa Ġdoor . ĠSee Ġ[ cross Door ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġvar Ġcross ing Points : ĠPair < P , ĠP >? Ġ= Ġnull ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefined Ġwhen Ġcross ing Ġa Ġdoor . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġvar Ġexpected New Room : ĠN ? Ġ= Ġnull ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefined Ġin Ġ[ Navigation State . MOV ING _ TO _ FINAL ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġvar Ġfinal Destination : ĠP ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ returns Ġthe Ġnon - null Ġvalue Ġof Ġa Ġnullable Ġvariable Ġor Ġthrows Ġan Ġ[ IllegalStateException ] Ġwith Ġa Ġmeaningful ĊĠĠĠĠ Ġ* Ġmessage . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġ< T > ĠT ?. or Fail (): ĠT Ġ= ĊĠĠĠĠĠĠĠ Ġthis Ġ?: Ġthrow ĠIllegalStateException (" internal Ġerror : Ġvariable Ġmust Ġbe Ġdefined Ġin Ġ$ state ") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdates Ġ[ pe de stri an Position ] Ġand Ġ[ current Room ], Ġthis Ġcan Ġbe Ġcost ly . ĊĠĠĠĠ Ġ* ĠDep ending Ġon Ġhow Ġ[ Convex Ge ometric Shape . contains ] Ġmanage Ġpoints Ġon Ġthe Ġboundary , Ġthe Ġpe de stri an Ġcould ĊĠĠĠĠ Ġ* Ġbe Ġinside Ġtwo Ġ( adjacent ) Ġrooms Ġat Ġonce . ĠThis Ġcan Ġhappen Ġin Ġtwo Ġcases : ĊĠĠĠĠ Ġ* Ġ- Ġwhen Ġin Ġ[ Navigation State . MOV ING _ TO _ CROSS ING _ POINT _ 1 ] Ġor Ġ[ Navigation State . MOV ING _ TO _ FINAL ] Ġand Ġthe Ġpe de stri an ĊĠĠĠĠ Ġ* Ġis Ġmoving Ġon Ġ[ previous Room ]' s Ġboundary . ĠIn Ġsuch Ġcase Ġ[ previous Room ] Ġis Ġused . ĊĠĠĠĠ Ġ* Ġ- Ġwhen Ġcross ing Ġa Ġdoor Ġor Ġin Ġ[ Navigation State . NEW _ ROOM ] Ġand Ġ[ expected New Room ] Ġis Ġadjacent Ġto Ġ[ previous Room ]. ĊĠĠĠĠ Ġ* ĠIn Ġsuch Ġcase Ġ[ expected New Room ] Ġis Ġused . ĊĠĠĠĠ Ġ* ĠOtherwise Ġthe Ġfirst Ġroom Ġcontaining Ġ[ pe de stri an Position ] Ġis Ġused . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun Ġupdate Cached Variables () Ġ{ ĊĠĠĠĠĠĠĠ Ġpe de stri an Position Ġ= Ġenvironment . getPosition ( pe de stri an ) ĊĠĠĠĠĠĠĠ Ġcurrent Room Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( state Ġ== ĠMOV ING _ TO _ CROSS ING _ POINT _ 1 Ġ|| Ġstate Ġ== ĠMOV ING _ TO _ FINAL ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Room . or Fail (). contains ( pe de stri an Position ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Room ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( state Ġ== ĠMOV ING _ TO _ CROSS ING _ POINT _ 2 Ġ|| Ġstate Ġ== ĠC ROSS ING _ DO OR Ġ|| Ġstate Ġ== ĠNEW _ ROOM ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected New Room ?. contains ( pe de stri an Position ) Ġ?: Ġfalse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected New Room ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment . graph . vertex Set (). first OrNull Ġ{ Ġit . contains ( pe de stri an Position ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġstate Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Room Ġ!= Ġnull Ġ-> ĠNEW _ ROOM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠIf Ġthe Ġpe de stri an Ġcannot Ġlocate Ġitself Ġinside Ġany Ġroom Ġon Ġstart , Ġit Ġsimply Ġwon 't Ġmove . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠARR IVED ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ returns Ġall Ġthe Ġdo ors Ġ(= Ġpass ages / edges ) Ġoutgoing Ġfrom Ġthe Ġcurrent Ġroom . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġdo ors In S ight (): ĠList < E > Ġ= ĊĠĠĠĠĠĠĠ Ġcurrent Room ?. let Ġ{ Ġenvironment . graph . outgoing Edges Of ( it ). toList () Ġ} Ġ?: Ġempty List () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġtarget Ġof Ġa Ġdirected Ġedge Ġof Ġthe Ġenvironment 's Ġgraph . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġval ĠE . target : ĠN Ġget () Ġ= Ġenvironment . graph . get Edge Target ( this ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMov es Ġthe Ġpe de stri an Ġacross Ġthe Ġprovided Ġ[ door ], Ġwhich Ġmust Ġbe Ġamong Ġ[ do ors In S ight ]. ĊĠĠĠĠ Ġ* ĠSince Ġconnected Ġrooms Ġmay Ġbe Ġnon - adjacent , Ġa Ġpair Ġof Ġ[ cross ing Points ] Ġhas Ġto Ġbe Ġprovided : ĊĠĠĠĠ Ġ* Ġ- Ġthe Ġfirst Ġpoint Ġmust Ġbelong Ġto Ġthe Ġcurrent Ġroom 's Ġboundary Ġand Ġwill Ġbe Ġreached Ġfirst , ĊĠĠĠĠ Ġ* Ġ- Ġthe Ġsecond Ġpoint Ġmust Ġbelong Ġto Ġthe Ġnext Ġroom 's Ġboundary Ġand Ġwill Ġbe Ġpur s ued Ġafter ĊĠĠĠĠ Ġ* Ġre aching Ġthe Ġformer Ġone . Ġ[ cross ing Points ] Ġmay Ġcoin c ide Ġif Ġthe Ġtwo Ġrooms Ġare Ġadjacent . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun Ġcross Door ( door : ĠE , Ġcross ing Points : ĠPair < P , ĠP >) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( do ors In S ight (). contains ( door )) Ġ{ Ġ"$ door Ġis Ġnot Ġin Ġsight " Ġ} ĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠMOV ING _ TO _ CROSS ING _ POINT _ 1 ĊĠĠĠĠĠĠĠ Ġthis . previous Room Ġ= Ġcurrent Room . or Fail () ĊĠĠĠĠĠĠĠ Ġthis . cross ing Points Ġ= Ġcross ing Points ĊĠĠĠĠĠĠĠ Ġthis . expected New Room Ġ= Ġdoor . target ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmove To Final ( destination : ĠP ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( current Room . or Fail (). contains ( destination )) Ġ{ Ġ"$ destination Ġis Ġnot Ġin Ġ$ current Room " Ġ} ĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠMOV ING _ TO _ FINAL ĊĠĠĠĠĠĠĠ Ġthis . previous Room Ġ= Ġcurrent Room . or Fail () ĊĠĠĠĠĠĠĠ Ġthis . final Destination Ġ= Ġdestination ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġmoving () Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Room ?. take If Ġ{ Ġit Ġ!= Ġprevious Room . or Fail () Ġ} ?. let Ġ{ Ġnew Room Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( new Room ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected New Room . or Fail () Ġ-> Ġstate Ġ= ĠNEW _ ROOM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġstrategy . in Unexpected New Room ( previous Room . or Fail (), Ġexpected New Room . or Fail (), Ġnew Room ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( desired Position . is Reached ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMOV ING _ TO _ CROSS ING _ POINT _ 1 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠShort - cut Ġto Ġsave Ġtime . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMOV ING _ TO _ CROSS ING _ POINT _ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take Unless Ġ{ Ġcross ing Points . or Fail (). run Ġ{ Ġfirst Ġ== Ġsecond Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠC ROSS ING _ DO OR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMOV ING _ TO _ CROSS ING _ POINT _ 2 Ġ-> ĠC ROSS ING _ DO OR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMOV ING _ TO _ FINAL Ġ-> ĠARR IVED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġposition Ġthe Ġpe de stri an Ġwants Ġto Ġreach . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġdesired Position : ĠP Ġget () Ġ= Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠ ĠMOV ING _ TO _ CROSS ING _ POINT _ 1 Ġ-> Ġcross ing Points . or Fail (). first ĊĠĠĠĠĠĠĠ ĠMOV ING _ TO _ CROSS ING _ POINT _ 2 Ġ-> Ġcross ing Points . or Fail (). second ĊĠĠĠĠĠĠĠ ĠC ROSS ING _ DO OR Ġ-> Ġexpected New Room . or Fail (). centroid ĊĠĠĠĠĠĠĠ ĠMOV ING _ TO _ FINAL Ġ-> Ġfinal Destination . or Fail () ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠ Ġ* ĠAlways Ġup Ġto Ġdate Ġcurrent Ġposition . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġenvironment . getPosition ( pe de stri an ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdates Ġthe Ġinternal Ġstate Ġbut Ġdoes Ġnot Ġmove Ġthe Ġpe de stri an . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Cached Variables () ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSTART Ġ-> ĠonStart () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNEW _ ROOM Ġ-> Ġcurrent Room . or Fail (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpe de stri an . register Visit ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstrategy . in New Room ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin ĠMOV ING _ TO _ CROSS ING _ POINT _ 1 .. MOV ING _ TO _ FINAL Ġ-> Ġmoving () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠAr rived . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġenum Ġclass ĠNavigation State Ġ{ ĊĠĠĠĠĠĠĠ ĠSTART , ĊĠĠĠĠĠĠĠ ĠNEW _ ROOM , ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠMoving Ġtowards Ġthe Ġfirst Ġcross ing Ġpoint Ġ( see Ġ[ cross Door ]). ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ ĠMOV ING _ TO _ CROSS ING _ POINT _ 1 , ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠMoving Ġtowards Ġthe Ġsecond Ġcross ing Ġpoint Ġ( see Ġ[ cross Door ]). ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ ĠMOV ING _ TO _ CROSS ING _ POINT _ 2 , ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠWhen Ġthe Ġsecond Ġcross ing Ġpoint Ġ[ is Reached ] Ġ( see Ġ[ cross Door ]), Ġthe Ġpe de stri an Ġmay Ġstill Ġbe Ġoutside ĊĠĠĠĠĠĠĠĠ Ġ* Ġany Ġroom . ĠIn Ġsuch Ġcase Ġit Ġmoves Ġtowards Ġ[ expected New Room ] Ġcentroid Ġuntil Ġhe / she Ġent ers Ġa Ġroom . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ ĠC ROSS ING _ DO OR , ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠMoving Ġto Ġthe Ġfinal Ġdestination , Ġwhich Ġis Ġinside Ġ[ current Room ] Ġ( this Ġmeans Ġit Ġcan Ġbe Ġdirectly ĊĠĠĠĠĠĠĠĠ Ġ* Ġappro ached Ġas Ġno Ġobstacle Ġis Ġplaced Ġin Ġbetween ). ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ ĠMOV ING _ TO _ FINAL , ĊĠĠĠĠĠĠĠ ĠARR IVED ĊĠĠĠ Ġ} Ċ } Ċ