예제 #1
0
    public List <Node> FindRange(Vector3 startPosition, int range)
    {
        Node         startingNode = grid.GetNodeFromWorldPosition(startPosition);
        List <Node>  inRange      = new List <Node>();
        Queue <Node> BFSQueue     = new Queue <Node>();

        bool[,,] searched = new bool[grid.maxX, grid.maxY, grid.maxZ];
        BFSQueue.Enqueue(startingNode);
        while (BFSQueue.Count > 0)
        {
            Node current = BFSQueue.Dequeue();
            inRange.Add(current);
            List <Node> neighbors = grid.GetNodeNeighbors(current);
            foreach (Node neighbor in neighbors)
            {
                if (range - GetDistance(startingNode, neighbor) > 0 && !searched[neighbor.x, neighbor.y, neighbor.z])
                {
                    BFSQueue.Enqueue(neighbor);
                    searched[neighbor.x, neighbor.y, neighbor.z] = true;
                }
            }
        }
        return(inRange);
    }