package Ġcz . c uni . game dev . nail 1 2 3 . rog ue like . entities Ċ Ċ import Ġcz . c uni . game dev . nail 1 2 3 . rog ue like . entities . attributes . Interaction Type Ċ import Ġcz . c uni . game dev . nail 1 2 3 . rog ue like . entities . attributes . interaction Ċ import Ġcz . c uni . game dev . nail 1 2 3 . rog ue like . extensions . shift Ċ import Ġcz . c uni . game dev . nail 1 2 3 . rog ue like . world . Direction Ċ import Ġorg . hex works . z ir con . api . data . Position 3 D Ċ import Ġorg . hex works . z ir con . api . data . Tile Ċ Ċ abstract Ġclass ĠMoving Entity ( ĊĠĠĠĠĠĠĠ Ġtile : ĠTile Ġ= ĠTile . empty (), ĊĠĠĠĠĠĠĠ Ġsorting Layer : ĠSort ing Layer Ġ= ĠSort ing Layer . CHARACTER ): ĠGame Entity ( tile , Ġsorting Layer ) Ġ{ ĊĊĠĠĠ Ġenum Ġclass ĠMovement Result Ġ{ ĊĠĠĠĠĠĠĠ ĠMO VED , ĠB UM PED , ĠPOSITION _ BLOCK ED , ĠOUT _ OF _ BOUN DS ; ĊĠĠĠĠĠĠĠ Ġval Ġis Success : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis Ġ== ĠMO VED Ġ|| Ġthis Ġ== ĠB UM PED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġlast Movement : ĠDirection ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġmove ( direction : ĠDirection ): ĠMovement Result Ġ{ ĊĠĠĠĠĠĠĠ Ġlast Movement Ġ= Ġdirection ĊĊĠĠĠĠĠĠĠ Ġval Ġnext Block Ġ= Ġarea [ position Ġshift Ġdirection ] Ġ?: Ġreturn ĠMovement Result . OUT _ OF _ BOUN DS ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( next Block . blocks Movement ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( interaction ( this , Ġnext Block , ĠInteraction Type . BU M PED )) ĠMovement Result . BU M PED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠMovement Result . POSITION _ BLOCK ED ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( position Ġshift Ġdirection ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinteraction ( this , Ġnext Block , ĠInteraction Type . STEP PED _ ON ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMovement Result . MOVED ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmove To ( target Position : ĠPosition 3 D ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . position Ġ!= ĠPosition 3 D . unknown ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarea . remove Entity ( this ) ĊĠĠĠĠĠĠĠ Ġarea . add Entity ( this , Ġtarget Position ) ĊĠĠĠ Ġ} Ċ } Ċ