コード例 #1
0
        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);
            }
        }
コード例 #2
0
ファイル: ConfigLoader.cs プロジェクト: zemos/Edgar-DotNet
        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);
        }
コード例 #3
0
ファイル: ConfigLoader.cs プロジェクト: zemos/Edgar-DotNet
        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);
                }
            }
        }
コード例 #4
0
ファイル: ConfigLoader.cs プロジェクト: zemos/Edgar-DotNet
        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)}");
                }
            }
        }
コード例 #5
0
        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);
            }
        }
コード例 #6
0
        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);
                }
            }
        }