public static Point2 ToGrid(this IReadOnlyArray2D array, int i) { var y = i / array.Width; var x = i - y * array.Width; return(new Point2(x, y)); }
private static List <NodePointer> GetNeighbours(IReadOnlyArray2D <DefinitionNode> nodeArray, int gridX, int gridY, GenerateNodeGridConnections generateNodeGridConnections) { var neighbours = new List <NodePointer>(); for (var y = -1; y <= 1; y++) { for (var x = -1; x <= 1; x++) { if (x == 0 && y == 0) { continue; //Skip the center since this is the node we are adding neighbours to. } var checkX = gridX + x; var checkY = gridY + y; if (checkX >= 0 && checkX < nodeArray.Width && checkY >= 0 && checkY < nodeArray.Height) { if (generateNodeGridConnections == GenerateNodeGridConnections.NoDiagonal) { if (x == 1 && y == 1 || x == -1 && y == 1 || x == -1 && y == -1 || x == 1 && y == -1) { continue; } } var p = new NodePointer(nodeArray.Width * checkY + checkX); neighbours.Add(p); } } } return(neighbours); }
private int GetIndex(IReadOnlyArray2D readOnlyArray2D, int x, int y) { if (x >= 0 && y >= 0 && x < readOnlyArray2D.Width && y < readOnlyArray2D.Height) { return(readOnlyArray2D.ToIndex(x, y)); } return(-1); }
public static int ToIndex(this IReadOnlyArray2D array, int x, int y) { return(x + y * array.Width); }
public static int ToIndex(this IReadOnlyArray2D array, Point2 gridCoords) { return(ToIndex(array, gridCoords.X, gridCoords.Y)); }