void SetLargeRooms() { //Keeping track of how many large rooms our level has int largeRooms = 0; //Checking our level for any suitable positions to place a large room List <int> availableRooms = new List <int>(); for (int i = 0; i < roomBool.Length; i++) { if (roomBool[i]) { if (!roomBool[i - 1] && !roomBool[i + 1] && i != startRoom) { availableRooms.Add(i); } } } if (availableRooms.Count > 0) { while (largeRooms < maxNoOfLargeRooms && availableRooms.Count > 0) { int randNo = Random.Range(0, availableRooms.Count); //Storing door positions of old room to place doorways in new room List <int> doorPositions = new List <int>(); RoomGenerator roomGen = gridPoints[availableRooms[randNo]].GetComponent <RoomGenerator>(); for (int i = 0; i < 12; i++) { if (roomGen.CheckForDoor(i)) { doorPositions.Add(i); } } //Clearing old room roomGen.transform.GetChild(0).GetComponent <RoomScript>().PrepareForDeletion(); Destroy(roomGen.transform.GetChild(0).gameObject); //Generating new room roomList.Add(roomGen.GenerateLargeRoom()); largeRoomPositions.Add(availableRooms[randNo]); roomGen.SetAsLargeRoom(); //Placing doorways foreach (int doorPosition in doorPositions) { roomGen.PlaceDoorway(doorPosition); roomGen.ReplaceCorridorForLargeRoom(doorPosition); } //Choosing large room layout roomGen.ChooseLargeRoomLayout(); availableRooms.Remove(availableRooms[randNo]); largeRooms++; } } }
/// <summary> /// Finds and sets Room Door References for all doors in the level /// </summary> public void SetRoomScriptRefOnDoors() { for (int i = 0; i < walls.Length; i++) { if (roomGen.CheckForDoor(i)) { roomDoors.Add(walls[i].transform.GetChild(0).GetChild(0).gameObject); } } foreach (GameObject go in roomDoors) { if (go.GetComponent <BossDoorScript>() == null) { go.GetComponent <RoomDoorScript>().roomScript = this; } } }