예제 #1
0
        public HierarchicalMap(ConcreteMap concreteMap, int clusterSize, int maxLevel)
        {
            ClusterSize = clusterSize;
            MaxLevel    = maxLevel;

            SetType(concreteMap.TileType);
            this.Height = concreteMap.Height;
            this.Width  = concreteMap.Width;
            ConcreteNodeIdToAbstractNodeIdMap = new Dictionary <Id <ConcreteNode>, Id <AbstractNode> >();

            Clusters      = new List <Cluster>();
            AbstractGraph = new AbstractGraph();
        }
예제 #2
0
 public Cluster(ConcreteMap concreteMap, Id <Cluster> id, int clusterX, int clusterY, Position origin, Size size)
 {
     SubConcreteMap      = concreteMap.Slice(origin.X, origin.Y, size.Width, size.Height, concreteMap.Passability);
     Id                  = id;
     ClusterY            = clusterY;
     ClusterX            = clusterX;
     Origin              = origin;
     Size                = size;
     _distances          = new Dictionary <Tuple <Id <AbstractNode>, Id <AbstractNode> >, int>();
     _cachedPaths        = new Dictionary <Tuple <Id <AbstractNode>, Id <AbstractNode> >, List <Id <ConcreteNode> > >();
     _distanceCalculated = new Dictionary <Tuple <Id <AbstractNode>, Id <AbstractNode> >, bool>();
     EntrancePoints      = new List <EntrancePoint>();
 }
예제 #3
0
        // Create a new concreteMap as a copy of another concreteMap (just copying obstacles)
        public ConcreteMap Slice(int horizOrigin, int vertOrigin, int width, int height, IPassability passability)
        {
            var slicedConcreteMap = new ConcreteMap(this.TileType, width, height, passability);

            foreach (var slicedMapNode in slicedConcreteMap.Graph.Nodes)
            {
                var globalConcreteNode =
                    Graph.GetNode(GetNodeIdFromPos(horizOrigin + slicedMapNode.Info.Position.X,
                                                   vertOrigin + slicedMapNode.Info.Position.Y));
                slicedMapNode.Info.IsObstacle = globalConcreteNode.Info.IsObstacle;
                slicedMapNode.Info.Cost       = globalConcreteNode.Info.Cost;
            }

            return(slicedConcreteMap);
        }