Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
        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);
        }