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); }