public static List <PathNode> Search(HierarchicalMapFactory factory, HierarchicalMap map, int maxLevel, Vector2Int startPos, Vector2Int goalPos, int maxRefineCount = int.MaxValue) { //首先插入起点和终点到图中 var startAbsId = factory.InsertAbstractNode(map, startPos); var goalAbsId = factory.InsertAbstractNode(map, goalPos); var path = SearchImpl(map, startAbsId, goalAbsId, maxLevel, maxRefineCount); //可以在这里应用路径平滑 //搜索完毕后就移除起点和终点(如果常用,也可以留着) factory.RemoveAbstractNode(map, goalAbsId); factory.RemoveAbstractNode(map, startAbsId); return(path); }
private static List <IPathNode> HierarchicalSearch(HierarchicalMap hierarchicalMap, int maxLevel, ConcreteMap concreteMap, Position startPosition, Position endPosition) { var factory = new HierarchicalMapFactory(); var startAbsNode = factory.InsertAbstractNode(hierarchicalMap, startPosition); var targetAbsNode = factory.InsertAbstractNode(hierarchicalMap, endPosition); var maxPathsToRefine = int.MaxValue; var hierarchicalSearch = new HierarchicalSearch(); var abstractPath = hierarchicalSearch.DoHierarchicalSearch(hierarchicalMap, startAbsNode, targetAbsNode, maxLevel, maxPathsToRefine); var path = hierarchicalSearch.AbstractPathToLowLevelPath(hierarchicalMap, abstractPath, hierarchicalMap.Width, maxPathsToRefine); var smoother = new SmoothWizard(concreteMap, path); path = smoother.SmoothPath(); factory.RemoveAbstractNode(hierarchicalMap, targetAbsNode); factory.RemoveAbstractNode(hierarchicalMap, startAbsNode); return(path); }