public void FollowInstruction(Instruction instruction) { switch (instruction.InstructionType) { case InstructionType.Left: WaypointRelativePosition.RotateRelativeLeft(instruction.Value); break; case InstructionType.Right: WaypointRelativePosition.RotateRelativeRight(instruction.Value); break; case InstructionType.Forward: GeoPosition.AdjustPosition(WaypointRelativePosition, instruction.Value); break; case InstructionType.North: case InstructionType.East: case InstructionType.South: case InstructionType.West: WaypointRelativePosition.AdjustPosition(MapInstructionToDirection(instruction.InstructionType), instruction.Value); break; default: throw new ArgumentOutOfRangeException(); } }