Processes a Move
action.
In the case of a basic Move
we do a vector addition of the
agent's current location with the move to determine a resultant location.
This is then passed to the LocationService
to update the agent's
location. If the resultant location is not in the simulation Area
we ask the area for a valid version of the move and apply that instead.
In the case of a CellMove
we simply check the destination cell,
and if it's empty we set the new location through the
LocationService
. Otherwise we throw an
ActionHandlingException
.