public void ExecuteStep(IExecutionStep step) { // this position does not take the area dimensions into account var position = step.GetNextPosition(Position, Direction); // the final position takes the area dimensions into account Position = new Vector( _ComputeSlidingValue(position.X, AreaDimensions.X), _ComputeSlidingValue(position.Y, AreaDimensions.Y) ); Direction = step.GetNextDirection(Direction); }