public void DefineRooms() { HashSet <int> treasureRooms = new HashSet <int>(); //Define what room ids are going to be treasure rooms if (treasureRoomQuantity <= _dungeonRooms.Count) { while (treasureRoomQuantity > 0) { int randomRoomID = Random.Range(2, _dungeonRooms.Count + 1); if (!treasureRooms.Contains(randomRoomID)) { treasureRooms.Add(randomRoomID); treasureRoomQuantity--; } } } int bottomStartRoom = GetRandomSideRoom(3); int topEndRoom = GetRandomSideRoom(1); RoomController roomComponent = null; foreach (DungeonRoom dungeonRoom in _dungeonRooms) { if (treasureRooms.Contains(dungeonRoom.id)) { roomComponent = dungeonRoom.room.AddComponent(typeof(TreasureRoom)) as TreasureRoom; } else { roomComponent = dungeonRoom.room.AddComponent(typeof(EnemiesRoom)) as EnemiesRoom; } _dungeonRoomsComponent.Add(roomComponent); Rect roomFloorsRectangle = new Rect(dungeonRoom.roomRectangle.position, new Vector2(dungeonRoom.roomRectangle.width - 2f, dungeonRoom.roomRectangle.height - 4f)); roomComponent.Initialize(this, tilesPosition, dungeonRoom.id, dungeonRoom.roomRectangle, roomFloorsRectangle); roomComponent.DrawRoomInteriors(); //Set player initial position at a random floor tile of the first room if (dungeonRoom.id == bottomStartRoom) { GameObject initialCorridorInstance = Instantiate(initialCorridor, roomComponent.DestroyRandomSideWall(3), Quaternion.identity, roomComponent.transform.GetChild(0)); GatewayPortal initialCorridorGateway = initialCorridorInstance.GetComponent <GatewayPortal>(); GameObject firstRoomTile = tilesPosition[(int)initialCorridorInstance.transform.position.x, (int)initialCorridorInstance.transform.position.y + 1]; tilesPosition[(int)initialCorridorInstance.transform.position.x, (int)initialCorridorInstance.transform.position.y].tag = "Gateway"; roomComponent.isFirstRoom = true; firstRoomTile.tag = "Gateway"; initialCorridorGateway.Initialize(this, 1, corridorSpeed, tilesPosition, _clsPlayerController.transform, _clsPlayerController, _clsPlayerSpriteManager); initialCorridorGateway.SetSimpleGateway(firstRoomTile); _clsPlayerController.gameObject.transform.position = new Vector3(initialCorridorInstance.transform.position.x, initialCorridorInstance.transform.position.y - 40); } //Set boss room in the last dungeon room if (dungeonRoom.id == topEndRoom) { GameObject bossRoomInstance = Instantiate(bossRoom, roomComponent.DestroyRandomSideWall(1), Quaternion.identity); BossRoom bossRoomComponent = bossRoomInstance.GetComponent <BossRoom>(); GatewayPortal bossRoomGateway = bossRoomInstance.GetComponent <GatewayPortal>(); tilesPosition[(int)bossRoomInstance.transform.position.x, (int)bossRoomInstance.transform.position.y].tag = "Gateway"; bossRoomGateway.Initialize(this, 1, corridorSpeed, tilesPosition, _clsPlayerController.transform, _clsPlayerController, _clsPlayerSpriteManager); bossRoomGateway.SetSimpleGateway(bossRoomComponent.firstPortalStop); bossRoomComponent.Initialize(this, tilesPosition, dungeonRoom.id + 1); roomComponent.roomGateways.Add(bossRoomGateway); } } }