public void AddRandomConnection() { bool connectionMade = false; do { var room = GetRandomRoom(); var dir = DirectionUtility.GetRandom(); for (int i = 0; i < 4; i++) { var secondRoom = GetRoomInDirection(room, dir); if (secondRoom != null && !room.Connections.ContainsKey(dir)) { room.AddConnection(dir, secondRoom.Id); secondRoom.AddConnection(dir.GetOpposite(), room.Id); connectionMade = true; } else { dir = dir.GetClockwise(); } } } while(!connectionMade); }
public DungeonRoom AddRandomRoom(int id) { if (Rooms.Count == 0) { return(AddStartingRoom()); } DungeonRoom parentRoom = GetRandomParentRoom(); var dir = DirectionUtility.GetRandom(); // Get a coordinate that isn't taken up by an existing room DungeonRoom roomInDirection; do { dir = dir.GetClockwise(); roomInDirection = GetRoomInDirection(parentRoom, dir); } while (roomInDirection != null); // Create new room, connect newRoom to parentRoom var coord = parentRoom.Coordinate + dir.ToVector(); var width = Rand.NextGaussian(RoomWidthMean, RoomWidthStd); var height = Rand.NextGaussian(RoomHeightMean, RoomHeightStd); var newRoom = new DungeonRoom(id, Level, coord, width, height); parentRoom.AddConnection(dir, id); newRoom.AddConnection(dir.GetOpposite(), parentRoom.Id); Rooms.Add(newRoom); return(newRoom); }