void spawnDoors() { TilePatternTemplate[,] threeByThreeVertical = new TilePatternTemplate[3, 3] { { TilePatternTemplate.Any, TilePatternTemplate.Floor, TilePatternTemplate.Any }, { TilePatternTemplate.Wall, TilePatternTemplate.Wall, TilePatternTemplate.Wall }, { TilePatternTemplate.Any, TilePatternTemplate.Floor, TilePatternTemplate.Any } }; TilePatternTemplate[,] threeByThreeHorizontal = new TilePatternTemplate[3, 3] { { TilePatternTemplate.Any, TilePatternTemplate.Wall, TilePatternTemplate.Any }, { TilePatternTemplate.Floor, TilePatternTemplate.Wall, TilePatternTemplate.Floor }, { TilePatternTemplate.Any, TilePatternTemplate.Wall, TilePatternTemplate.Any } }; //Add Doors to the rooms, where there are two tiles on opposite sides of a 1x3 wall. Tile[,] tiles = TileManager.instance.tiles; for (int i = 1; i < TileManager.instance.width - 1; i++) { for (int j = 0; j < TileManager.instance.height - 3; j++) { if (CheckPattern(threeByThreeVertical, i, j) || CheckPattern(threeByThreeHorizontal, i, j)) { tiles[i + 1, j + 1].UpdateTile(Tile.TileType.Door); } } } //Store the original values of all tiles TileManager.instance.SetTiles(); }
void RemoveExtraDoors() { TilePatternTemplate[,] verticalFive = new TilePatternTemplate[1, 5] { { TilePatternTemplate.Door, TilePatternTemplate.Any, TilePatternTemplate.Door, TilePatternTemplate.Any, TilePatternTemplate.Door } }; TilePatternTemplate[,] horizontalFive = new TilePatternTemplate[5, 1] { { TilePatternTemplate.Door }, { TilePatternTemplate.Any }, { TilePatternTemplate.Door }, { TilePatternTemplate.Any }, { TilePatternTemplate.Door } }; TilePatternTemplate[,] verticalDoubleDoors = new TilePatternTemplate[3, 3] { { TilePatternTemplate.Floor, TilePatternTemplate.Floor, TilePatternTemplate.Floor }, { TilePatternTemplate.Door, TilePatternTemplate.Wall, TilePatternTemplate.Door }, { TilePatternTemplate.Floor, TilePatternTemplate.Floor, TilePatternTemplate.Floor } }; TilePatternTemplate[,] horizontalDoubleDoors = new TilePatternTemplate[3, 3] { { TilePatternTemplate.Floor, TilePatternTemplate.Door, TilePatternTemplate.Floor }, { TilePatternTemplate.Floor, TilePatternTemplate.Wall, TilePatternTemplate.Floor }, { TilePatternTemplate.Floor, TilePatternTemplate.Door, TilePatternTemplate.Floor } }; //Add Doors to the rooms, where there are two tiles on opposite sides of a 1x3 wall. Tile[,] tiles = TileManager.instance.tiles; for (int rescan = 0; rescan < 10; rescan++) { for (int i = 0; i < TileManager.instance.width; i++) { for (int j = 0; j < TileManager.instance.height; j++) { List <Tile.TileType> data; if (CheckPattern(verticalFive, i, j)) { tiles[i, j + 2].UpdateTile(Tile.TileType.Wall); } else if (CheckPattern(horizontalFive, i, j)) { tiles[i + 2, j].UpdateTile(Tile.TileType.Wall); } else if (CheckPattern(verticalDoubleDoors, i, j, out data)) { TileManager.instance.tiles[i + 1, j - 1].UpdateTile(Tile.TileType.Wall); TileManager.instance.tiles[i + 1, j].UpdateTile(Tile.TileType.Wall); TileManager.instance.tiles[i + 1, j + 1].UpdateTile(Tile.TileType.Wall); } else if (CheckPattern(horizontalDoubleDoors, i, j)) { tiles[i - 1, j + 1].UpdateTile(Tile.TileType.Wall); tiles[i, j + 1].UpdateTile(Tile.TileType.Wall); tiles[i + 1, j + 1].UpdateTile(Tile.TileType.Wall); } else if (tiles[i, j].type == Tile.TileType.Door) { int adjacentWalls = 0; new List <Tile>() { tiles[i - 1, j], tiles[i + 1, j], tiles[i, j - 1], tiles[i, j + 1] } .ForEach(tile => adjacentWalls += (tile.type == Tile.TileType.Wall) ? 1 : 0); if (adjacentWalls > 2) { tiles[i, j].UpdateTile(Tile.TileType.Wall); } } } } } //Store the original values of all tiles TileManager.instance.SetTiles(); //Finally, clean up the boids foreach (Boid b in FindObjectsOfType <Boid>()) { Destroy(b.gameObject); } }