Exemple #1
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();
    }
Exemple #2
0
    // 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);
    }