public CorridorConstraints(ICorridorMapDescription <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;
     graphWithoutCorridors    = this.mapDescription.GetGraphWithoutCorrridors();
 }
Пример #2
0
        private void PrepareMapping(ICorridorMapDescription <int> mapDescription)
        {
            var graph     = mapDescription.GetGraph();
            var corridors = graph.Vertices.Where(mapDescription.IsCorridorRoom).ToList();

            foreach (var corridor in corridors)
            {
                var room = ScriptableObject.CreateInstance <Room>();
                precomputedMapping.Add(room, corridor);
            }
        }
Пример #3
0
 public LayoutOperationsWithCorridors(
     IConfigurationSpaces <TNode, TShapeContainer, TConfiguration, ConfigurationSpace> configurationSpaces,
     ICorridorMapDescription <TNode> mapDescription,
     IConfigurationSpaces <TNode, TShapeContainer, TConfiguration, ConfigurationSpace> corridorConfigurationSpaces,
     int averageSize
     ) : base(configurationSpaces, averageSize)
 {
     MapDescription = mapDescription;
     CorridorConfigurationSpaces = corridorConfigurationSpaces;
     GraphWithoutCorridors       = mapDescription.GetGraphWithoutCorrridors();
 }
Пример #4
0
        public void AddCorridorsToMapping(ICorridorMapDescription <int> mapDescription, TwoWayDictionary <Room, int> mapping)
        {
            if (alreadyUsed)
            {
                throw new InvalidOperationException("Each instance of this class can be used at most once because it is tied to a specific map description.");
            }

            foreach (var pair in precomputedMapping)
            {
                mapping.Add(pair.Key, pair.Value);
            }

            alreadyUsed = true;
        }
        /// <inheritdoc />
        /// <summary>
        /// Finds the smallest feasible multiple of a specified number and then make from it a sequence of corridors.
        /// </summary>
        public void AddCorridorsToMapping(ICorridorMapDescription <int> mapDescription, TwoWayDictionary <int, int> mapping)
        {
            var graph                = mapDescription.GetGraph();
            var corridors            = graph.Vertices.Where(mapDescription.IsCorridorRoom).ToList();
            var maxNonCorridorNumber = graph.Vertices.Where(x => !mapDescription.IsCorridorRoom(x)).Max();

            var parts      = maxNonCorridorNumber / roundTo;
            var nextNumber = roundTo * (parts + 1);
            var counter    = nextNumber;

            foreach (var corridor in corridors)
            {
                mapping.Add(counter++, corridor);
            }
        }
Пример #6
0
        /// <inheritdoc />
        /// <remarks>
        /// Adds number to a given prefix until all corridors have a name.
        /// </remarks>
        public void AddCorridorsToMapping(ICorridorMapDescription <int> mapDescription, TwoWayDictionary <string, int> mapping)
        {
            var graph     = mapDescription.GetGraph();
            var corridors = graph.Vertices.Where(mapDescription.IsCorridorRoom).ToList();

            var counter = 0;

            foreach (var corridor in corridors)
            {
                while (true)
                {
                    var name = prefix + counter;

                    if (!mapping.ContainsKey(name))
                    {
                        mapping.Add(name, corridor);
                        break;
                    }

                    counter++;
                }
            }
        }
 public CorridorsChainDecomposition(ICorridorMapDescription <TNode> mapDescription, IChainDecomposition <TNode> decomposition)
 {
     this.mapDescription = mapDescription;
     this.decomposition  = decomposition;
 }
Пример #8
0
 public CorridorsNodeCreator(ICorridorMapDescription <int> mapDescription)
 {
     PrepareMapping(mapDescription);
 }
Пример #9
0
 public TouchingConstraints(ICorridorMapDescription <TNode> mapDescription, IPolygonOverlap <TShapeContainer> polygonOverlap)
 {
     this.mapDescription = mapDescription;
     this.polygonOverlap = polygonOverlap;
 }