protected virtual void DoWalk(RouteStep routeStep) { var currentCoordinates = new RoutePoint(XCoordinate, YCoordinate); switch (_direction) { case Direction.Up: YCoordinate += routeStep.Distance; break; case Direction.Down: YCoordinate -= routeStep.Distance; break; case Direction.Left: XCoordinate -= routeStep.Distance; break; case Direction.Right: XCoordinate += routeStep.Distance; break; default: throw new ArgumentOutOfRangeException(); } var newCoordinates = new RoutePoint(XCoordinate, YCoordinate); Links.Add(new RouteLink(currentCoordinates, newCoordinates)); }
private void ProcessStep(RouteStep routeStep) { // change direction DoTurn(routeStep); // walk distance DoWalk(routeStep); }
protected virtual void DoTurn(RouteStep routeStep) { switch (_direction) { case Direction.Up: _direction = routeStep.Direction == RouteDirection.Left ? Direction.Left : Direction.Right; break; case Direction.Down: _direction = routeStep.Direction == RouteDirection.Left ? Direction.Right : Direction.Left; break; case Direction.Left: _direction = routeStep.Direction == RouteDirection.Left ? Direction.Down : Direction.Up; break; case Direction.Right: _direction = routeStep.Direction == RouteDirection.Left ? Direction.Up : Direction.Down; break; default: throw new ArgumentOutOfRangeException(); } }