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++; }
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"); }
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(); }
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"); }
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); }
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"); }