public void Clear() { Width = 0; Height = 0; NodeWidth = 0; NodeHeight = 0; Nodes = new PathingGridNode[0]; Points.Clear(); IsClosed = false; }
/// <summary> /// Creates the grid. /// </summary> /// <param name="nodeWidth">Width of each node in the grid.</param> /// <param name="nodeHeight">Height of each node in the grid.</param> public void CreateGrid(int nodeWidth, int nodeHeight) { var minX = int.MaxValue; var minY = int.MaxValue; var maxX = int.MinValue; var maxY = int.MinValue; foreach (var point in Points) { if (point.X < minX) { minX = point.X; } if (point.Y < minY) { minY = point.Y; } if (point.X > maxX) { maxX = point.X; } if (point.Y > maxY) { maxY = point.Y; } } var bounds = new Rectangle(minX, minY, maxX - minX, maxY - minY); Width = (int)Math.Ceiling((double)bounds.Width / nodeWidth); Height = (int)Math.Ceiling((double)bounds.Height / nodeHeight); var output = new PathingGridNode[Width * Height]; var polygonPoints = Points.ToArray(); for (var row = 0; row < Height; ++row) { for (var column = 0; column < Width; ++column) { var nodeBounds = new Rectangle(bounds.X + column * nodeWidth, bounds.Y + row * nodeHeight, nodeWidth, nodeHeight); output[row * Width + column] = new PathingGridNode(column, row, nodeBounds, IsRectangleInsidePolygon(polygonPoints, nodeBounds, UseTightTests)); } } Nodes = output; }