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;
        }
    }
Beispiel #2
0
    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();
    }