public TouchingConstraints(IMapDescription <TNode> mapDescription, IPolygonOverlap <TShapeContainer> polygonOverlap)
 {
     this.mapDescription = mapDescription;
     this.polygonOverlap = polygonOverlap;
     stageOneGraph       = mapDescription.GetStageOneGraph();
     graph = mapDescription.GetGraph();
 }
 public DungeonGeneratorEvolution(
     IMapDescription <TNode> mapDescription,
     List <IPerformanceAnalyzer <DungeonGeneratorConfiguration <TNode>, Individual <TNode> > > analyzers, EvolutionOptions options, string resultsDirectory)
     : base(analyzers, options, resultsDirectory)
 {
     this.mapDescription = mapDescription;
 }
        public double ComputeRoomTemplatesEntropy <TNode>(IMapDescription <TNode> mapDescription, List <MapLayout <TNode> > layouts, TNode node, bool normalize = true)
        {
            var distribution = GetRoomTemplatesDistribution(mapDescription, layouts, node);
            var entropy      = ComputeEntropy(distribution, normalize);

            return(entropy);
        }
 public PlatformersGenerator(IMapDescription <TNode> mapDescription, DungeonGeneratorConfiguration <TNode> configuration = null)
 {
     this.mapDescription         = new MapDescriptionMapping <TNode>(mapDescription);
     this.configuration          = configuration ?? new DungeonGeneratorConfiguration <TNode>();
     this.mapDescriptionOriginal = mapDescription;
     SetupGenerator();
 }
Example #5
0
 protected AbstractLayoutOperations(IConfigurationSpaces <TNode, TShapeContainer, TConfiguration, ConfigurationSpace> configurationSpaces, int averageSize, IMapDescription <TNode> mapDescription, IRoomShapesHandler <TLayout, TNode, TShapeContainer> roomShapesHandler)
 {
     ConfigurationSpaces = configurationSpaces;
     AverageSize         = averageSize;
     MapDescription      = mapDescription;
     RoomShapesHandler   = roomShapesHandler;
     StageOneGraph       = mapDescription.GetStageOneGraph();
 }
Example #6
0
 public CorridorConstraints(IMapDescription <TNode> mapDescription, float averageSize, IConfigurationSpaces <TNode, TShapeContainer, TConfiguration, ConfigurationSpace> configurationSpaces)
 {
     this.mapDescription      = mapDescription;
     this.energySigma         = 10 * averageSize;     // TODO: should it be like this?
     this.configurationSpaces = configurationSpaces;
     stageOneGraph            = mapDescription.GetStageOneGraph();
     graph = mapDescription.GetGraph();
 }
 public double ComputeAverageRoomTemplatesEntropy <TNode>(IMapDescription <TNode> mapDescription, List <MapLayout <TNode> > layouts, bool normalize = true)
 {
     return(mapDescription
            .GetGraph()
            .Vertices
            .Where(x => mapDescription.GetRoomDescription(x).RoomTemplates.Count > 1)
            .Select(x => ComputeRoomTemplatesEntropy(mapDescription, layouts, x, normalize))
            .Average());
 }
        public RoomShapesHandler(
            IConfigurationSpaces <TNode, IntAlias <PolygonGrid2D>, TConfiguration, ConfigurationSpace> configurationSpaces,
            TwoWayDictionary <RoomTemplateInstance, IntAlias <PolygonGrid2D> > intAliasMapping,
            IMapDescription <TNode> mapDescription,
            RoomTemplateRepeatMode?repeatModeOverride = null)
        {
            this.configurationSpaces = configurationSpaces;
            this.intAliasMapping     = intAliasMapping;
            this.mapDescription      = mapDescription;
            this.repeatModeOverride  = repeatModeOverride;
            stageOneGraph            = mapDescription.GetStageOneGraph();

            Initialize();
        }
        private IMapDescription <int> GetIntMapDescription(IMapDescription <Room> mapDescription)
        {
            var newMapDescription = new MapDescription <int>();
            var mapping           = mapDescription.GetGraph().Vertices.CreateIntMapping();

            foreach (var vertex in mapDescription.GetGraph().Vertices)
            {
                newMapDescription.AddRoom(mapping[vertex], mapDescription.GetRoomDescription(vertex));
            }

            foreach (var edge in mapDescription.GetGraph().Edges)
            {
                newMapDescription.AddConnection(mapping[edge.From], mapping[edge.To]);
            }

            return(newMapDescription);
        }
 public LayoutOperations(
     IConfigurationSpaces <TNode, TShapeContainer, TConfiguration, ConfigurationSpace> configurationSpaces,
     int averageSize,
     IMapDescription <TNode> mapDescription,
     ConstraintsEvaluator <TLayout, TNode, TConfiguration, TShapeContainer, TEnergyData> stageOneConstraintsEvaluator,
     ConstraintsEvaluator <TLayout, TNode, TConfiguration, TShapeContainer, TEnergyData> stageTwoConstraintsEvaluator,
     IRoomShapesHandler <TLayout, TNode, TShapeContainer> roomShapesHandler, bool throwIfRepeatModeNotSatisfied)
     : base(
         configurationSpaces,
         averageSize,
         mapDescription,
         roomShapesHandler)
 {
     this.stageOneConstraintsEvaluator  = stageOneConstraintsEvaluator;
     this.stageTwoConstraintsEvaluator  = stageTwoConstraintsEvaluator;
     this.throwIfRepeatModeNotSatisfied = throwIfRepeatModeNotSatisfied;
 }
        public static double GetAverageRoomTemplateSize <TNode>(IMapDescription <TNode> mapDescription)
        {
            var roomTemplates = mapDescription
                                .GetGraph()
                                .Vertices
                                .Select(mapDescription.GetRoomDescription)
                                .Where(x => x is BasicRoomDescription)
                                .SelectMany(x => x.RoomTemplates)
                                .Distinct()
                                .ToList();

            var averageSize = roomTemplates
                              .Select(x => x.Shape.BoundingRectangle.Width + x.Shape.BoundingRectangle.Height)
                              .Average();

            return(averageSize);
        }
Example #12
0
        public static LevelDescriptionGrid2D <TNode> GetLevelDescription <TNode>(this IMapDescription <TNode> mapDescription)
        {
            var levelDescription = new LevelDescriptionGrid2D <TNode>();
            var graph            = mapDescription.GetGraph();

            var corridorRoomDescriptions = new Dictionary <IRoomDescription, RoomDescriptionGrid2D>();
            var roomTemplateMapping      = new Dictionary <RoomTemplate, RoomTemplateGrid2D>();

            foreach (var room in graph.Vertices)
            {
                var roomDescription = mapDescription.GetRoomDescription(room);

                if (roomDescription.IsCorridor)
                {
                    if (corridorRoomDescriptions.TryGetValue(roomDescription, out var cached))
                    {
                        levelDescription.AddRoom(room, cached);
                    }
                    else
                    {
                        var corridorRoomDescription = new RoomDescriptionGrid2D(true, roomDescription.RoomTemplates.Select(x => GetNewRoomTemplate(x, roomTemplateMapping)).ToList());
                        corridorRoomDescriptions[roomDescription] = corridorRoomDescription;
                        levelDescription.AddRoom(room, corridorRoomDescription);
                    }
                }
                else
                {
                    levelDescription.AddRoom(room, new RoomDescriptionGrid2D(false, roomDescription.RoomTemplates.Select(x => GetNewRoomTemplate(x, roomTemplateMapping)).ToList()));
                }
            }

            foreach (var edge in graph.Edges)
            {
                levelDescription.AddConnection(edge.From, edge.To);
            }

            return(levelDescription);
        }
 public ChainDecompositionAnalyzer(IMapDescription <TNode> mapDescription)
 {
     this.mapDescription = mapDescription;
 }
        public Dictionary <RoomTemplateInstance, double> GetRoomTemplatesDistribution <TNode>(IMapDescription <TNode> mapDescription, List <MapLayout <TNode> > layouts, TNode node)
        {
            var roomDescription = mapDescription.GetRoomDescription(node);
            var availableRoomTemplateInstances = roomDescription.RoomTemplates.SelectMany(x => configurationSpacesGenerator.GetRoomTemplateInstances(x)).ToList();
            var data = layouts
                       .Select(x => x.Rooms.Single(y => y.Node.Equals(node)))
                       .Select(x => x.RoomTemplateInstance)
                       .ToList();

            return(GetProbabilityDistribution(data, availableRoomTemplateInstances));
        }
Example #15
0
        public Dictionary <Tuple <TNode, TNode>, CorridorRoomDescription> GetNodesToCorridorMapping <TNode>(IMapDescription <TNode> mapDescription)
        {
            var mapping = new Dictionary <Tuple <TNode, TNode>, CorridorRoomDescription>();

            var graph = mapDescription.GetGraph();

            foreach (var room in graph.Vertices)
            {
                var roomDescription = mapDescription.GetRoomDescription(room);

                if (roomDescription is CorridorRoomDescription corridorRoomDescription)
                {
                    var neighbors = graph.GetNeighbours(room).ToList();
                    mapping.Add(new Tuple <TNode, TNode>(neighbors[0], neighbors[1]), corridorRoomDescription);
                    mapping.Add(new Tuple <TNode, TNode>(neighbors[1], neighbors[0]), corridorRoomDescription);
                }
            }

            return(mapping);
        }
Example #16
0
 public NamedMapDescription(IMapDescription <int> mapDescription, string name, bool isWithCorridors)
 {
     MapDescription  = mapDescription;
     Name            = name;
     IsWithCorridors = isWithCorridors;
 }
Example #17
0
 public DungeonGeneratorInput(string name, IMapDescription <TNode> mapDescription, DungeonGeneratorConfiguration <TNode> configuration) : base(name, mapDescription)
 {
     Configuration = configuration;
 }
Example #18
0
 private void method_1(ref IMapDescription imapDescription_0, ref IMapServer imapServer_1)
 {
 }
Example #19
0
        public ConfigurationSpaces <TConfiguration> GetConfigurationSpaces <TConfiguration>(IMapDescription <int> mapDescription)
            where TConfiguration : IConfiguration <IntAlias <PolygonGrid2D>, int>
        {
            var graph = mapDescription.GetGraph();

            var roomDescriptions = graph
                                   .Vertices
                                   .ToDictionary(x => x, mapDescription.GetRoomDescription);

            var roomTemplates = roomDescriptions
                                .Values
                                .SelectMany(x => x.RoomTemplates)
                                .Distinct()
                                .ToList();

            var roomTemplateInstances = roomTemplates
                                        .ToDictionary(x => x, GetRoomTemplateInstances);

            var roomTemplateInstancesMapping = roomTemplateInstances
                                               .SelectMany(x => x.Value)
                                               .CreateIntMapping();

            var roomTemplateInstancesCount = roomTemplateInstancesMapping.Count;

            var corridorRoomDescriptionsMapping = roomDescriptions
                                                  .Values
                                                  .Where(x => x.GetType() == typeof(CorridorRoomDescription))
                                                  .Cast <CorridorRoomDescription>()
                                                  .Distinct()
                                                  .CreateIntMapping();

            var corridorRoomTemplateInstances = corridorRoomDescriptionsMapping
                                                .Keys
                                                .ToDictionary(
                x => x,
                x => x.RoomTemplates.SelectMany(y => roomTemplateInstances[y]).ToList());

            var nodesToCorridorMapping = GetNodesToCorridorMapping(mapDescription)
                                         .ToDictionary(
                x => x.Key,
                x => corridorRoomDescriptionsMapping[x.Value] + 1
                );

            var configurationSpaces = new ConfigurationSpaces <TConfiguration>(lineIntersection,
                                                                               roomTemplateInstancesCount, graph.VerticesCount, (configuration1, configuration2) =>
            {
                if (nodesToCorridorMapping.TryGetValue(new Tuple <int, int>(configuration1.Node, configuration2.Node), out var corridor))
                {
                    return(corridor);
                }

                return(0);
            });

            // Generate configuration spaces
            foreach (var shape1 in roomTemplateInstancesMapping.Keys)
            {
                foreach (var shape2 in roomTemplateInstancesMapping.Keys)
                {
                    var configurationSpacesList = new ConfigurationSpace[corridorRoomDescriptionsMapping.Count + 1];

                    configurationSpacesList[0] = GetConfigurationSpace(shape1, shape2);

                    foreach (var pair in corridorRoomDescriptionsMapping)
                    {
                        var roomDescription = pair.Key;
                        var intAlias        = pair.Value;

                        configurationSpacesList[intAlias + 1] = GetConfigurationSpaceOverCorridors(shape1, shape2,
                                                                                                   corridorRoomTemplateInstances[roomDescription]);
                    }

                    configurationSpaces.AddConfigurationSpace(shape1, shape2, configurationSpacesList.ToArray());
                }
            }

            foreach (var vertex in graph.Vertices)
            {
                var roomDescription = mapDescription.GetRoomDescription(vertex);

                foreach (var roomTemplate in roomDescription.RoomTemplates)
                {
                    var instances = roomTemplateInstances[roomTemplate];

                    foreach (var roomTemplateInstance in instances)
                    {
                        configurationSpaces.AddShapeForNode(vertex, roomTemplateInstance, 1d / instances.Count);
                    }
                }
            }

            return(configurationSpaces);
        }
 public MapDescriptionMapping(IMapDescription <TNode> mapDescription)
 {
     this.mapDescription = mapDescription;
     roomDescriptions    = new IRoomDescription[mapDescription.GetGraph().VerticesCount];
     DoMapping();
 }
Example #21
0
 public NamedMapDescription(IMapDescription <int> mapDescription, NamedGraph graph, bool isWithCorridors)
 {
     MapDescription  = mapDescription;
     IsWithCorridors = isWithCorridors;
     Name            = graph.Name;
 }
Example #22
0
 public TwoStageChainDecomposition(IMapDescription <TNode> mapDescription, IChainDecomposition <TNode> decomposition)
 {
     this.mapDescription = mapDescription;
     this.decomposition  = decomposition;
 }
 public SimpleDungeonGeneratorEvolution(IMapDescription <TNode> mapDescription, List <IPerformanceAnalyzer <DungeonGeneratorConfiguration <TNode>, Individual <TNode> > > analyzers, EvolutionOptions options, string resultsDirectory) : base(mapDescription, analyzers, options, resultsDirectory)
 {
     OnEvolutionStarted += () => generationNumber = 0;
 }
 public DungeonGeneratorInput(string name, IMapDescription <TNode> mapDescription, DungeonGeneratorConfiguration <TNode> configuration, List <int> offsets) : base(name, mapDescription)
 {
     Configuration = configuration;
     Offsets       = offsets;
 }