private void GenerateDungeonFeatures(int direction) { // Generate architecture for each tree quad recursively ArchitectureGenerator architecture = new ArchitectureGenerator(); architecture.GenerateArchitecture(dungeonGenerator.quadTree); // Generate stairs StairGenerator stairs = new StairGenerator(); stairs.Generate(); // If we cannot solve the level, we need to generate a different one if (!LevelIsSolvable()) { Debug.LogError("Dungeon level cannot be solved. Genrating again..."); GenerateDungeon(direction); return; } // Generate player PlayerGenerator player = new PlayerGenerator(); Stair stair = direction == -1 ? grid.stairDown : grid.stairUp; player.GenerateAtPos(stair.x, stair.y); // Generate furniture FurnitureGenerator furniture = new FurnitureGenerator(); furniture.Generate(); // Generate monsters MonsterGenerator monsters = new MonsterGenerator(); monsters.Generate(); //monsters.GenerateSingle(); // Generate chests ChestGenerator chests = new ChestGenerator(); chests.Generate(); // Generate items ItemGenerator items = new ItemGenerator(); items.Generate(); }
// Start is called before the first frame update void Start() { PauseMenu.gameIsPaused = false; Vector3 SpawnPos = new Vector3(0, 1.16f, 0); ExportDungeon = new GameObject(); int intentos = 300; Queue <GameObject> Doors = new Queue <GameObject>(); List <GameObject> Rooms = new List <GameObject>(RoomList); Instantiate(firstRoom).transform.parent = ExportDungeon.transform; lightning.transform.GetChild(0).GetComponent <Light>().color = LevelManager.getColor(); for (int i = 0; i < 3; ++i) { Doors.Enqueue(ExportDungeon.transform.GetChild(0).transform.GetChild(i).gameObject); } numDoors = 0; while (numDoors < numRooms - 1 && Doors.Count > 0) { int r = Random.Range(0, Rooms.Count - 1); if (createRoom(Rooms[r].gameObject, Doors.Peek())) { Doors.Dequeue(); Doors = AddDoors(Doors, ExportDungeon.transform.GetChild(ExportDungeon.transform.childCount - 1).gameObject, ExportDungeon.transform.GetChild(ExportDungeon.transform.childCount - 1).transform.GetComponent <Room>().numDoors); numDoors += 1; intentos = 300; } else { --intentos; } if (intentos <= 0 && Doors.Count > 0) { Doors.Dequeue(); intentos = 300; } } for (int s = 0; s < ExportDungeon.transform.childCount; ++s) { for (int j = 0; j < ExportDungeon.transform.GetChild(s).GetComponent <Room>().numDoors + 1; ++j) { if (!ExportDungeon.transform.GetChild(s).transform.GetChild(j).GetComponent <Door>().conected) { Vector3 pos = ExportDungeon.transform.GetChild(s).transform.GetChild(j).GetChild(1).position; Quaternion rot = ExportDungeon.transform.GetChild(s).transform.GetChild(j).GetChild(1).rotation; Destroy(ExportDungeon.transform.GetChild(s).transform.GetChild(j).GetChild(1).gameObject); Instantiate(wall, pos, rot).transform.parent = ExportDungeon.transform.GetChild(s).transform.GetChild(j).transform; } } } FurnitureGenerator = new FurnitureGenerator(ExportDungeon, angFurnitureList, wallFloorFurnitureList, FloorFurniture, lightning); FurnitureGenerator.generateFurniture(); player.transform.GetChild(0).GetComponent <Camera>().fieldOfView = LevelManager.getFov(); if (LevelManager.getMusic()) { GetComponent <AudioSource>().clip = LevelManager.getMusic(); } GetComponent <AudioSource>().volume = LevelManager.getVolume(); GetComponent <AudioSource>().pitch = LevelManager.getPitch(); GetComponent <AudioSource>().Play(); ExportDungeon.isStatic = true; ExportDungeon.AddComponent <NavMeshSurface>().collectObjects = CollectObjects.Children; ExportDungeon.GetComponent <NavMeshSurface>().BuildNavMesh(); player = Instantiate(player, SpawnPos, player.transform.rotation); enemies[0].transform.GetComponent <EnemyScriptChaser>().target = player; enemy = enemies[0]; player.GetComponent <FirstPersonController>().setEnemyBack(false); InvokeRepeating("enemyInstantiateBack", Random.Range(30f, 120f), 100f); }