Example #1
0
    private void SpreadFireFlammable(Vector3Int startPos, int floor)
    {
        Queue <Vector3Int>   searchQueue   = new Queue <Vector3Int>();
        HashSet <Vector3Int> searchHistory = new HashSet <Vector3Int>();

        searchQueue.Enqueue(startPos);
        searchHistory.Add(startPos);

        while (searchQueue.Count > 0)
        {
            Vector3Int pos = searchQueue.Dequeue();
            Vector3Int nPos;

            Flammable flammable = GetFlammable(pos, floor);
            flammable.CatchFire();
            CreateFire(pos, floor);

            nPos = pos + Vector3Int.up;
            if (flammable.isConnectedUp && !searchHistory.Contains(nPos))
            {
                searchQueue.Enqueue(nPos);
                searchHistory.Add(nPos);
            }

            nPos = pos + Vector3Int.down;
            if (flammable.isConnectedDown && !searchHistory.Contains(nPos))
            {
                searchQueue.Enqueue(nPos);
                searchHistory.Add(nPos);
            }

            nPos = pos + Vector3Int.left;
            if (flammable.isConnectedLeft && !searchHistory.Contains(nPos))
            {
                searchQueue.Enqueue(nPos);
                searchHistory.Add(nPos);
            }

            nPos = pos + Vector3Int.right;
            if (flammable.isConnectedRight && !searchHistory.Contains(nPos))
            {
                searchQueue.Enqueue(nPos);
                searchHistory.Add(nPos);
            }
        }
    }