public RoomType GetRandomSafeRoomType(IRandomGenerator random) { IRoomFactory rf = new RoomFactory(); RoomType[] roomTypes = (RoomType[])Enum.GetValues(typeof(RoomType)); List <RoomType> safeTypes = new List <RoomType>(); foreach (var type in roomTypes) { var room = rf.Create(type); if (room.BehaviourThreshold == 1) { safeTypes.Add(type); } } return(safeTypes[random.Generate(0, safeTypes.Count)]); }
public (IRoom[], int, int) GenerateMaze(IRandomGenerator random, int gridsize) { IRoom[] rooms = new IRoom[gridsize * gridsize]; IRoomFactory rf = new RoomFactory(); var(startIndex, endIndex) = GetStartAndEndIndexes(random, gridsize); rooms[startIndex] = rf.Create(GetRandomSafeRoomType(random)); rooms[endIndex] = rf.Create(GetRandomSafeRoomType(random)); // List of all roomtypes. RoomType[] roomTypes = (RoomType[])Enum.GetValues(typeof(RoomType)); for (int i = 0; i < rooms.Length; i++) { if (i == startIndex || i == endIndex) { continue; } rooms[i] = rf.Create(roomTypes[random.Generate(0, roomTypes.Length)]); // Place a room of random type on each index. } return(rooms, startIndex, endIndex); }