public ITile MoveRobot( IRobot robot, OrientationDirection direction) { Debug.WriteLine("Moving robot " + robot + " " + direction); var currentTile = robot.CurrentTile; var relation = GetTileRelationInDirectionOfTile(currentTile, direction); var newTile = relation.Tile; if (relation.IsObstructed) { return(null); } var existingRobot = newTile.Robot; if (existingRobot != null) { var newTileForExistingRobot = MoveRobot(existingRobot, direction); if (newTileForExistingRobot == null) { return(null); } } currentTile.Robot = null; newTile.Robot = robot; robot.CurrentTile = newTile; FireRenderRequested(); return(newTile); }
public MarsRover(int x, int y, OrientationDirection orientation, IPlanet planet = null) { PositionX = x; PositionY = y; Orientation = orientation; _planet = planet; InitializeAvailableCommands(); }
public static OrientationDirection GetRotatedDirection(OrientationDirection targetDirection, RotateDirection rotationDirection) { var newDirection = ((int)targetDirection + (int)rotationDirection) % 4; if (newDirection < 0) { newDirection += 4; } return((OrientationDirection)newDirection); }
public static RotateDirection GetRotationDirection(OrientationDirection fromDirection, OrientationDirection toDirection) { var rotateDirection = (int)toDirection - (int)fromDirection; if (rotateDirection >= 3) { rotateDirection -= 4; } if (rotateDirection == -2) { rotateDirection = (int)RotateDirection.Uturn; } if (rotateDirection < -1) { rotateDirection += 4; } return((RotateDirection)rotateDirection); }
private ITileRelation GetTileRelationInDirectionOfTile( ITile tile, OrientationDirection direction) { switch (direction) { case OrientationDirection.Down: return(tile.Bottom); case OrientationDirection.Up: return(tile.Top); case OrientationDirection.Left: return(tile.Left); case OrientationDirection.Right: return(tile.Right); default: throw new InvalidOperationException("An unknown direction " + direction + " was specified."); } }
public ExpressConveyorBeltTile(OrientationDirection direction) : base(direction) { }
public ConveyorBeltTile(OrientationDirection direction) { Direction = direction; }