private void CreateSpawnRoom()
    {
        int        spawnIndex = random.range(0, data.sets[dungeonSet].spawns.Count - 1);
        GameObject room       = (GameObject)Instantiate(data.sets[dungeonSet].spawns[spawnIndex].gameObject);

        startRoom = room;
        rooms.Add(room.GetComponent <Room>());
        room.transform.parent = this.gameObject.transform;
        openSet.Add(room.GetComponent <Room>());
        Volume volume = room.GetComponent <Volume>();

        volume.RecalculateBounds();
        AddGlobalVoxels(volume.voxels);
        roomsCount++;
    }
Ejemplo n.º 2
0
    void Start()
    {
        //instance = this;
        if (randomizeSeedOnStart)
        {
            seed = Random.Range(0, int.MaxValue);
        }

        random = new DRandom();
        random.Init(seed);

        if (randomizeRoomSize)
        {
            targetRooms = 15 + (int)(random.value() * 50f);
        }

        roomsCount   = 0;
        globalVoxels = new Dictionary <Vector3, GameObject>();
        dungeonSet   = random.range(0, data.sets.Count - 1);
        //Debug.Log("Generating dungeon with data:");
        //Debug.Log("Rooms count: " + targetRooms);
        //Debug.Log("Using set: " + data.sets[dungeonSet].name);

        try
        {
            StartCoroutine(StartGeneration());
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            throw;
        }

        Debug.Log("Generated in: " + stopwatch.ElapsedMilliseconds + "ms");
    }
Ejemplo n.º 3
0
    void Start()
    {
        //instance = this;
        if (randomizeSeedOnStart)
        {
            seed = Random.Range(0, int.MaxValue);
        }

        random = new DRandom();
        random.Init(seed);

        if (randomizeRoomSize)
        {
            targetRooms = 30 + (int)(random.value() * 50f);
        }
        Debug.Log(targetRooms);

        roomsCount   = 0;
        globalVoxels = new Dictionary <Vector3, GameObject>();
        dungeonSet   = random.range(0, data.sets.Count - 1);
        //Debug.Log("Generating dungeon with data:");
        //Debug.Log("Rooms count: " + targetRooms);
        //Debug.Log("Using set: " + data.sets[dungeonSet].name);

        StartGeneration();
    }
Ejemplo n.º 4
0
    private void StartGeneration()
    {
        DDebugTimer.Start();

        generationComplete = false;
        rooms = new List <Room>();
        doors = new List <Door>();

        int        spawn = random.range(0, data.sets[dungeonSet].spawns.Count - 1);
        GameObject room  = (GameObject)Instantiate(data.sets[dungeonSet].spawns[spawn].gameObject);

        startRoom = room;
        rooms.Add(room.GetComponent <Room>());
        room.transform.parent = this.gameObject.transform;
        openSet.Add(room.GetComponent <EL.Dungeon.Room>());
        room.GetComponent <Volume>().RecalculateBounds();
        AddGlobalVoxels(room.GetComponent <Volume>().voxels);
        roomsCount++;

        while (openSet.Count > 0)
        {
            GenerateNextRoom();
        }

        //process doors
        for (int i = 0; i < rooms.Count; i++)
        {
            for (int j = 0; j < rooms[i].doors.Count; j++)
            {
                if (rooms[i].doors[j].door == null)
                {
                    Door d = ((GameObject)Instantiate(data.sets[dungeonSet].doors[0].gameObject)).GetComponent <Door>();
                    doors.Add(d);
                    rooms[i].doors[j].door            = d;
                    rooms[i].doors[j].sharedDoor.door = d;
                    //
                    d.gameObject.transform.position = rooms[i].doors[j].transform.position;
                    d.gameObject.transform.rotation = rooms[i].doors[j].transform.rotation;
                    d.gameObject.transform.parent   = this.gameObject.transform;
                }
            }
        }
        //locked doors and keys, etc come next.

        generationComplete = true;
        Debug.Log("DungeonGenerator::Generation completed : " + DDebugTimer.Lap() + "ms");
    }
Ejemplo n.º 5
0
    public void CreateRandomSpawnPoint()
    {
        List <Element> spawnTemplates = factoryOwner.Sets[0].spawnTemplates;

        int spawnTemplatesCount = factoryOwner.Sets[0].spawnTemplates.Count - 1;
        int spawnRandomIndex    = random.range(0, spawnTemplatesCount);

        Candidate startCandidate = new Candidate(spawnTemplates[spawnRandomIndex].gameObject, factoryOwner.Sets[0]);

        openCandidates.Add(startCandidate);

        startCandidate.SetVoxelsWorldPos();

        AddGlobalVoxelCandidates(startCandidate.VoxWorldPos);
        startCandidate.UpdateConnPointsWorldPos();

        acceptedCandidates.Add(startCandidate);
    }
Ejemplo n.º 6
0
    private IEnumerator StartGeneration()
    {
        yield return(null);

        DDebugTimer.Start();
        stopwatch.Start();
        generationComplete = false;

        rooms = new List <Room>();
        doors = new List <Door>();

        int        spawn = random.range(0, data.sets[dungeonSet].spawns.Count - 1);
        GameObject room  = (GameObject)Instantiate(data.sets[dungeonSet].spawns[spawn].gameObject);

        startRoom = room;
        rooms.Add(room.GetComponent <Room>());
        room.transform.parent        = this.gameObject.transform;
        room.transform.localPosition = Vector3.zero;
        openSet.Add(room.GetComponent <EL.Dungeon.Room>());
        room.GetComponent <Volume>().RecalculateBounds();
        AddGlobalVoxels(room.GetComponent <Volume>().voxels);
        roomsCount++;

        while (openSet.Count > 0 && (!generateWithTimer || stopwatch.ElapsedMilliseconds < MaxGenerationTime))
        {
            stopwatch.Reset();

            GenerateNextRoom();
            if (UseEnumaration)
            {
                yield return(new WaitForSeconds(GenerationDelay));
            }

            stopwatch.Start();
        }

        //TODO: Do a pass on all rooms to try to replace dead ends with room that connect them

        //Init the player/walker
        SpawnRoom  spawnRoom  = startRoom.GetComponent <SpawnRoom>();
        GameObject walker     = Instantiate(WalkerPrefab, spawnRoom.SpawnPosition.position, spawnRoom.SpawnPosition.rotation);
        var        controller = walker.GetComponent <TwitchPlayerController>();

        controller.TargetDoor = spawnRoom.doors[0];

        //process doors
        for (int i = 0; i < rooms.Count; i++)
        {
            for (int j = 0; j < rooms[i].doors.Count; j++)
            {
                if (rooms[i].doors[j].door == null && rooms[i].doors[j].sharedDoor != null)
                {
                    Door d = ((GameObject)Instantiate(data.sets[dungeonSet].doors[0].gameObject)).GetComponent <Door>();
                    doors.Add(d);
                    rooms[i].doors[j].door            = d;
                    rooms[i].doors[j].sharedDoor.door = d;
                    //
                    d.gameObject.transform.position = rooms[i].doors[j].transform.position;
                    d.gameObject.transform.rotation = rooms[i].doors[j].transform.rotation;
                    d.gameObject.transform.parent   = this.gameObject.transform;
                }
            }
        }
        //locked doors and keys, etc come next.

        generationComplete = true;
        Debug.Log("DungeonGenerator::Generation completed : " + DDebugTimer.Lap() + "ms");
    }