Пример #1
0
    internal static bool CanFindQueen(BaseTile initialRoom, BaseTile queenRoom)
    {
        ResetList();

        if (initialRoom.RoomScript != null && !initialRoom.RoomScript.IsRoom())
        {
            return(false);
        }

        BaseTilePriorityQueue queue = new BaseTilePriorityQueue();

        queue.push(initialRoom);

        BaseTile currTile;

        while ((currTile = queue.pop(queenRoom.transform.position)) != null)
        {
            if (currTile == queenRoom)
            {
                return(true);
            }

            currTile.AstarVisited = true;

            foreach (var neighbor in currTile.Neighbors)
            {
                if (neighbor.RoomScript == null || (neighbor.RoomScript != null && neighbor.RoomScript.IsRoom()))
                {
                    queue.push(neighbor);
                }
            }
        }

        return(false);
    }
Пример #2
0
    public static bool CanFindOwnNeighbor(BaseTile start, BaseTile end, List <BaseTile> ignoreList)
    {
        ResetList();

        foreach (var tile in ignoreList)
        {
            tile.AstarVisited = true;
        }

        BaseTilePriorityQueue queue = new BaseTilePriorityQueue();

        queue.push(start);

        BaseTile currTile;

        while ((currTile = queue.pop(end.transform.position)) != null)
        {
            if (currTile == end)
            {
                return(true);
            }

            if (currTile.AstarVisited)
            {
                continue;
            }

            currTile.AstarVisited = true;

            foreach (var neighbor in currTile.Neighbors)
            {
                if (neighbor.RoomScript != null && neighbor.RoomScript.IsRoom() && neighbor.RoomScript.GetType() == currTile.RoomScript.GetType())
                {
                    queue.push(neighbor);
                }
            }
        }

        return(false);
    }