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