Ejemplo n.º 1
0
        /// <summary>
        /// Remplis la grille de nodes.
        /// </summary>
        /// <param name="gridToPopulate">La grille à remplir</param>
        /// <param name="unwalkableMask">Le layer à concidérer comme intraversable par le seeker</param>
        public Node[,] PopulateGrid(Grid gridToPopulate, int unwalkableMask)
        {
            Vector2 worldBottomLeft = new Vector2();

            unwalkableMask = 1 << unwalkableMask;

            worldBottomLeft.X = gridToPopulate.CurrentPos.X - gridToPopulate.GridWorldSize.X / 2;
            worldBottomLeft.Y = gridToPopulate.CurrentPos.Y - gridToPopulate.GridWorldSize.Y / 2;

            float nodeDiameter = gridToPopulate.NodeRadius * 2;

            Node[,] grid = new Node[gridToPopulate.GridSizeX, gridToPopulate.GridSizeY];

            for (int x = 0; x < gridToPopulate.GridSizeX; x++)
            {
                for (int y = 0; y < gridToPopulate.GridSizeY; y++)
                {
                    Vector2 worldPoint = new Vector2
                    {
                        X = worldBottomLeft.X + (x * nodeDiameter + gridToPopulate.NodeRadius),
                        Y = worldBottomLeft.Y + (y * nodeDiameter + gridToPopulate.NodeRadius)
                    };

                    UnityEngine.Vector2 worldPointUnity = new UnityEngine.Vector2(worldPoint.X, worldPoint.Y);
                    bool walkable = !(Physics2D.OverlapCircle(worldPointUnity, gridToPopulate.NodeRadius, unwalkableMask));
                    grid[x, y] = new Node(walkable, worldPoint, x, y);
                }
            }
            return(grid);
        }
Ejemplo n.º 2
0
        private void OnDrawGizmos()
        {
            Gizmos.DrawWireCube(transform.position, new UnityEngine.Vector2(_gridWorldSizeX, _gridWorldSizeY));
            float _nodeDiameter = nodeRadius * 2;

            if (_grid != null)
            {
                foreach (Node n in _grid.grid)
                {
                    Color color = (n.IsFlyable) ? Color.white : Color.red;

                    if (_grid.Path != null)
                    {
                        if (_grid.Path.Contains(n))
                        {
                            color = Color.black;
                        }
                    }
                    color.a = 0.5f;

                    Gizmos.color = color;

                    UnityEngine.Vector2 _cubePosition = new UnityEngine.Vector2(n.WorldPosition.X, n.WorldPosition.Y);

                    Gizmos.DrawCube(_cubePosition, Vector3.one * (_nodeDiameter - .1f));
                }
            }
        }