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(); }
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>(); }
// 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); }