private void LoadCorridors(MapDescription <int> mapDescription, MapDescriptionModel mapDescriptionModel, Dictionary <string, RoomDescriptionsSetModel> roomDescriptionsSets) { if (mapDescriptionModel.Corridors == null) { return; } var corridors = mapDescriptionModel.Corridors; var enable = corridors.Enable ?? true; if (enable && (corridors.Offsets == null || corridors.Offsets.Count == 0)) { throw new InvalidOperationException("There must be at least one offset if corridors are enabled"); } mapDescription.SetWithCorridors(enable, corridors.Offsets); if (enable && (corridors.CorridorShapes == null || corridors.CorridorShapes.Count == 0)) { throw new InvalidOperationException("There must be at least one shape for corridors if they are enabled."); } foreach (var rooms in corridors.CorridorShapes) { var roomShapes = GetRoomDescriptions(rooms, roomDescriptionsSets, mapDescriptionModel.CustomRoomDescriptionsSet, rooms.Scale); mapDescription.AddCorridorShapes(roomShapes, GetTransformations(rooms.Rotate), rooms.Probability ?? 1, rooms.NormalizeProbabilities ?? true); } }
private CorridorRoomDescription GetCorridors(MapDescriptionModel mapDescriptionModel, Dictionary <string, RoomDescriptionsSetModel> roomDescriptionsSets) { if (mapDescriptionModel.Corridors == null) { return(null); } var corridors = mapDescriptionModel.Corridors; var enable = corridors.Enable ?? true; if (!enable) { return(null); } if (enable && (corridors.CorridorShapes == null || corridors.CorridorShapes.Count == 0)) { throw new InvalidOperationException("There must be at least one shape for corridors if they are enabled."); } var roomTemplates = GetRoomTemplates(corridors.CorridorShapes, roomDescriptionsSets, mapDescriptionModel.CustomRoomDescriptionsSet); var roomDescription = new CorridorRoomDescription(roomTemplates); return(roomDescription); }
private void LoadPassages(MapDescription <int> mapDescription, MapDescriptionModel mapDescriptionModel, Dictionary <string, RoomDescriptionsSetModel> roomDescriptionsSets) { if (mapDescriptionModel.Passages == null) { return; } var corridors = GetCorridors(mapDescriptionModel, roomDescriptionsSets); var corridorsCounter = mapDescription.GetGraph().Vertices.Max() + 1; foreach (var passage in mapDescriptionModel.Passages) { if (corridors != null) { var corridorRoom = corridorsCounter++; mapDescription.AddRoom(corridorRoom, corridors); mapDescription.AddConnection(passage.X, corridorRoom); mapDescription.AddConnection(passage.Y, corridorRoom); } else { mapDescription.AddConnection(passage.X, passage.Y); } } }
private void LoadRooms(MapDescription <int> mapDescription, MapDescriptionModel mapDescriptionModel, Dictionary <string, RoomDescriptionsSetModel> roomDescriptionsSets) { if (mapDescriptionModel.RoomsRange == null) { throw new InvalidOperationException("Rooms range must be defined"); } if (mapDescriptionModel.RoomsRange.To - mapDescriptionModel.RoomsRange.From <= 0) { throw new InvalidOperationException("There must be at least one roon in the room range. 'To' must be greater than 'From'."); } var notUsedRooms = new List <int>(); for (var i = mapDescriptionModel.RoomsRange.From; i <= mapDescriptionModel.RoomsRange.To; i++) { notUsedRooms.Add(i); } if (mapDescriptionModel.Rooms != null) { foreach (var pair in mapDescriptionModel.Rooms) { var roomModel = pair.Value; var rooms = pair.Key; if (roomModel.RoomShapes != null) { var roomTemplates = GetRoomTemplates(roomModel.RoomShapes, roomDescriptionsSets, mapDescriptionModel.CustomRoomDescriptionsSet); var roomDescription = new BasicRoomDescription(roomTemplates); foreach (var room in rooms) { mapDescription.AddRoom(room, roomDescription); notUsedRooms.Remove(room); } } } } if (notUsedRooms.Count != 0) { if (mapDescriptionModel.DefaultRoomShapes != null) { var roomTemplates = GetRoomTemplates(mapDescriptionModel.DefaultRoomShapes, roomDescriptionsSets, mapDescriptionModel.CustomRoomDescriptionsSet); var roomDescription = new BasicRoomDescription(roomTemplates); foreach (var room in notUsedRooms) { mapDescription.AddRoom(room, roomDescription); } } else { throw new InvalidOperationException($"Default room shapes must be provided if there are rooms that do not have their own room shapes assigned. Rooms with missing room shapes: {string.Join(", ", notUsedRooms)}"); } } }
private void LoadPassagess(MapDescription <int> mapDescription, MapDescriptionModel mapDescriptionModel) { if (mapDescriptionModel.Passages == null) { return; } foreach (var passage in mapDescriptionModel.Passages) { mapDescription.AddPassage(passage.X, passage.Y); } }
private void LoadRooms(MapDescription <int> mapDescription, MapDescriptionModel mapDescriptionModel, Dictionary <string, RoomDescriptionsSetModel> roomDescriptionsSets) { if (mapDescriptionModel.RoomsRange == null) { throw new InvalidOperationException("Rooms range must be defined"); } if (mapDescriptionModel.RoomsRange.To - mapDescriptionModel.RoomsRange.From <= 0) { throw new InvalidOperationException("There must be at least one roon in the room range. 'To' must be greater than 'From'."); } for (var i = mapDescriptionModel.RoomsRange.From; i <= mapDescriptionModel.RoomsRange.To; i++) { mapDescription.AddRoom(i); } if (mapDescriptionModel.Rooms != null) { foreach (var pair in mapDescriptionModel.Rooms) { var room = pair.Value; if (room.RoomShapes != null) { foreach (var rooms in room.RoomShapes) { var roomShapes = GetRoomDescriptions(rooms, roomDescriptionsSets, mapDescriptionModel.CustomRoomDescriptionsSet, rooms.Scale); foreach (var name in pair.Key) { mapDescription.AddRoomShapes(name, roomShapes, GetTransformations(rooms.Rotate), rooms.Probability ?? 1, rooms.NormalizeProbabilities ?? true); } } } } } if (mapDescriptionModel.DefaultRoomShapes != null) { foreach (var rooms in mapDescriptionModel.DefaultRoomShapes) { var roomShapes = GetRoomDescriptions(rooms, roomDescriptionsSets, mapDescriptionModel.CustomRoomDescriptionsSet, rooms.Scale); mapDescription.AddRoomShapes(roomShapes, GetTransformations(rooms.Rotate), rooms.Probability ?? 1, rooms.NormalizeProbabilities ?? true); } } }