/// <summary> /// /// </summary> /// <param name="startingCoordinate">The coordinate where you want to calculate steps from</param> /// <param name="direction">direction where the step is heading</param> /// <param name="tiles">amount of steps to take. defaults on 1</param> /// <returns>the ending coordinate</returns> public static TileCoordinate CalculateLocationAfterSteps(TileCoordinate startingCoordinate, DiagonalDirection direction, int tiles = 1) { var newX = startingCoordinate.X; var newY = startingCoordinate.Y; newX += direction.HasFlag(DiagonalDirection.East) ? tiles : -tiles; newY += direction.HasFlag(DiagonalDirection.North) ? tiles : -tiles; return(new TileCoordinate(newX, newY)); }
/// <summary> /// Gets the corner coordinate for a king to move /// </summary> /// <param name="coordinate"></param> /// <param name="direction"></param> /// <returns></returns> public static TileCoordinate GetNearestDiagonalEdgeCoordinate(TileCoordinate currentCoordinate, DiagonalDirection direction) { //north= y+ south= y- east = x+ west = x- int x = (direction.HasFlag(DiagonalDirection.East)) ? MAX_X - currentCoordinate.X : MAX_X - (MAX_X - currentCoordinate.X); int y = (direction.HasFlag(DiagonalDirection.North)) ? MAX_Y - currentCoordinate.X : MAX_Y - (MAX_Y - currentCoordinate.Y); int steps = Math.Min(x, y); int newx = (direction.HasFlag(DiagonalDirection.East)) ? currentCoordinate.X + steps : currentCoordinate.X - steps; int newy = (direction.HasFlag(DiagonalDirection.North)) ? currentCoordinate.Y + steps : currentCoordinate.Y - steps; return(new TileCoordinate(newx, newy)); }