package Ġrs . d us k . engine . client . update . task . npc Ċ Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġrs . d us k . engine . entity . character . move . NP CM oved Ċ import Ġrs . d us k . engine . entity . character . npc . NPC Ċ import Ġrs . d us k . engine . entity . character . npc . NP CM ove Type Ċ import Ġrs . d us k . engine . entity . character . npc . NPC s Ċ import Ġrs . d us k . engine . event . EventBus Ċ import Ġrs . d us k . engine . event . Priority . NPC _ MOVE MENT Ċ import Ġrs . d us k . engine . map . Tile Ċ import Ġrs . d us k . engine . tick . task . Engine Task Ċ Ċ /** Ċ Ġ* ĠChanges Ġthe Ġtile Ġnp cs Ġare Ġlocated Ġon Ġbased Ġon Ġ[ Movement . delta ] Ġand Ġ[ Movement . steps ] Ċ Ġ* Ġ@ author ĠG reg ĠH ib ber d Ġ< greg @ greg hib ber d . com > Ċ Ġ* Ġ@ since ĠApril Ġ 2 5 , Ġ 2 0 2 0 Ċ Ġ*/ Ċ class ĠN PCM ov ement Task ( private Ġval Ġnp cs : ĠN PC s , Ġprivate Ġval Ġbus : ĠEvent Bus ) Ġ: ĠEngine Task ( NPC _ MOVE MENT ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġnp cs . forEach Ġ{ Ġnpc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocked Ġ= Ġnpc . movement . frozen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! locked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep ( npc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove ( npc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġup Ġwalk Ġand Ġrun Ġchanges Ġbased Ġon Ġ[ Steps ] Ġqueue . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstep ( npc : ĠN PC ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmovement Ġ= Ġnpc . movement ĊĠĠĠĠĠĠĠ Ġval Ġsteps Ġ= Ġmovement . steps ĊĠĠĠĠĠĠĠ Ġif Ġ( steps . peek () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstep Ġ= Ġsteps . poll () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! movement . traversal . blocked ( npc . tile , Ġstep )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovement . walk Step Ġ= Ġstep ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovement . delta Ġ= Ġstep . delta ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnpc . movement Type Ġ= ĠN PCM ove Type . Walk ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( movement . running ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( steps . peek () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtile Ġ= Ġnpc . tile . add ( step . delta ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep Ġ= Ġsteps . poll () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! movement . traversal . blocked ( tile , Ġstep )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovement . run Step Ġ= Ġstep ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovement . delta Ġ= Ġmovement . delta . add ( step . delta ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnpc . movement Type Ġ= ĠN PCM ove Type . Run ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnpc . movement Type Ġ= ĠN PCM ove Type . Walk ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMov es Ġthe Ġnpc Ġtile Ġand Ġemits ĠM oved Ġevent ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmove ( npc : ĠN PC ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmovement Ġ= Ġnpc . movement ĊĠĠĠĠĠĠĠ Ġif Ġ( movement . delta Ġ!= ĠTile . EMPTY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfrom Ġ= Ġnpc . tile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnpc . tile Ġ= Ġnpc . tile . add ( movement . delta ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbus . emit ( NP CM oved ( npc , Ġfrom , Ġnpc . tile )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }