private List <RoomNode> GenerateNextRooms(RoomSide side, List <RoomNode> currentRooms, ShouldStillGenerate shouldStillGenerate, int radius) { var oppositeSide = Room.OppositeSide(side); var currRoomNum = 0; var doorsLeft = CountDoorsAtSide(side, currentRooms); var nextRooms = new List <RoomNode>(); while (doorsLeft > 0) { // find a room with <= rooms at opposite of side. RoomNode nextNode = GetRoomWithMaxDoors( oppositeSide, doorsLeft, shouldStillGenerate, radius); nextRooms.Add(nextNode); var nodesToMake = nextNode.GetDoorCount(oppositeSide); Assert.IsTrue(nodesToMake > 0); doorsLeft -= nodesToMake; Assert.IsTrue(doorsLeft >= 0); for (var doorNum = 0; doorNum < nodesToMake; doorNum++) { while (currentRooms[currRoomNum].GetNeighborRooms(side).Count >= currentRooms[currRoomNum].GetDoorCount(side)) { currRoomNum++; } var currentRoomDoorNum = currentRooms[currRoomNum].GetNeighborRooms(side).Count; currentRooms[currRoomNum].GetNeighborRooms(side).Add(nextNode); currentRooms[currRoomNum].GetRoomDoorNums(side).Add(doorNum); nextNode.GetNeighborRooms(oppositeSide).Add(currentRooms[currRoomNum]); nextNode.GetRoomDoorNums(oppositeSide).Add(currentRoomDoorNum); } } return(nextRooms); }