void Awake() { archGen = GetComponent <ArchitectureGenerator>(); convexGen = GetComponent <ConvexHullConstructor>(); allRooms = new List <GameObject>(new GameObject[numObjects]); CreateRandomPoints(numObjects); float xSum = 0; float zSum = 0; for (int i = 0; i < numObjects; i++) { if (allRooms != null) { roomTemplate.GetComponent <GridGenerator>().currentGrid.gridSize.x = xRange[i]; roomTemplate.GetComponent <GridGenerator>().currentGrid.gridSize.y = zRange[i]; allRooms[i] = Instantiate(roomTemplate.gameObject); allRooms[i].transform.parent = transform; allRooms[i].transform.position = new Vector3(randomPoints[i].x, 0, randomPoints[i].y); zSum += allRooms[i].GetComponent <GridGenerator>().currentGrid.gridSize.y; xSum += allRooms[i].GetComponent <GridGenerator>().currentGrid.gridSize.x; } minimumSpanningTree = GetComponent <Triangulator>().minimumSpanningTree; } float xMean = (xSum / numObjects) * 0.75f; float zMean = (zSum / numObjects) * 0.75f; for (int i = 0; i < numObjects; i++) { bool biggerThanAverage = allRooms[i].GetComponent <GridGenerator>().currentGrid.gridSize.x >= xMean && allRooms[i].GetComponent <GridGenerator>().currentGrid.gridSize.y >= zMean; if (biggerThanAverage) { for (int j = 0; j < allRooms[i].GetComponent <GridGenerator>().allTileCoords.Count; j++) { allRooms[i].GetComponent <GridGenerator>().allTileCoords[j].type = Geometry.CellType.MajorRoom; } mainRooms.Add(allRooms[i]); } else { for (int j = 0; j < allRooms[i].GetComponent <GridGenerator>().allTileCoords.Count; j++) { allRooms[i].GetComponent <GridGenerator>().allTileCoords[j].type = Geometry.CellType.MinorRoom; } roomsToDelete.Add(allRooms[i]); } } for (int i = 0; i < mainRooms.Count; i++) { mainRooms[i].GetComponentInChildren <MeshRenderer>().material.color = Color.red; } }
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(); }