private bool FindRoom(Vector3Int position, int roomNumber) { Queue <Vector3Int> posToCheck = new Queue <Vector3Int>(); HashSet <Vector3Int> roomPosition = new HashSet <Vector3Int>(); posToCheck.Enqueue(position); bool isSpace = false; while (posToCheck.Count > 0) { Vector3Int pos = posToCheck.Dequeue(); roomPosition.Add(pos); foreach (Vector3Int dir in new[] { Vector3Int.up, Vector3Int.left, Vector3Int.down, Vector3Int.right }) { Vector3Int neighbor = pos + dir; if (!posToCheck.Contains(neighbor) && !roomPosition.Contains(neighbor)) { if (metaTileMap.IsSpaceAt(neighbor)) { isSpace = true; } else if (metaTileMap.IsAtmosPassableAt(neighbor)) { posToCheck.Enqueue(neighbor); } } } } foreach (Vector3Int p in roomPosition) { MetaDataNode node = metaDataLayer.Get(p); node.Room = isSpace ? -1 : roomNumber; } return(!isSpace); }