protected AbstractDungeonRoom GetCurrentRoom() { AbstractDungeonRoom closestRoom = null; foreach (var room in GameManager.dungeonGenerator.DungeonRooms) { if (closestRoom == null) { closestRoom = room; continue; } if (Vector2.Distance(closestRoom.transform.position, transform.position) > Vector2.Distance(room.transform.position, transform.position)) { closestRoom = room; } } return(closestRoom); }
IEnumerable GenerateRooms() { float roomCount = 0; for (int col = 0; col < dungeonMaze.GetLength(0); col++) { for (int row = 0; row < dungeonMaze.GetLength(1); row++) { if (dungeonMaze[col, row] != 0) { AbstractDungeonRoom room = CreateRoom(dungeonMaze[col, row]); room.dungeon = this; room.Generate(col, row); // Add room to rooms list and expand bounds dungeonRooms.Add(room); if (dungeonBounds.size.x < 1) { dungeonBounds = new Bounds(room.Bounds.center, room.Bounds.size); } else { dungeonBounds.Encapsulate(room.Bounds); } roomCount++; roomGenProgress = roomCount / dungeonSize; yield return(new WaitForSeconds(0.1f)); } } } // Expand bounds after rooms are all generated to provide padding dungeonBounds.Expand(5); roomGenProgress = 1; loadedRooms = true; }
public override void init() { base.init(); currentRoom = GetCurrentRoom(); Executing = true; }