Ejemplo n.º 1
0
 public void Clear()
 {
     Width      = 0;
     Height     = 0;
     NodeWidth  = 0;
     NodeHeight = 0;
     Nodes      = new PathingGridNode[0];
     Points.Clear();
     IsClosed = false;
 }
Ejemplo n.º 2
0
        /// <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;
        }