public static IPathfinder <IDefinitionNodeNetwork, IPathfindNodeNetwork <AstarNode>, WaypointPath> CreateAstarPathfinder(this IPathfindaxManager pathfindaxManager, IDefinitionNodeNetwork nodeNetwork, IDistanceHeuristic _heuristic, int maxClearance = -1, int amountOfThreads = 1) { var pathfinder = pathfindaxManager.CreatePathfinder(nodeNetwork, new AStarAlgorithm(nodeNetwork.NodeCount, _heuristic), (definitionNodeNetwork, algorithm, cache) => { var nodeGenerators = new List <IPathfindNodeGenerator <AstarNode> >(); if (definitionNodeNetwork is IDefinitionNodeGrid sourceNodeGrid) { nodeGenerators.Add(new BrushfireClearanceGenerator(sourceNodeGrid, maxClearance)); } var astarNodeNetwork = new AstarNodeNetwork(definitionNodeNetwork, nodeGenerators.ToArray()); return(CreateRequestProcesser(astarNodeNetwork, algorithm, cache)); }, null, amountOfThreads); pathfinder.Start(); return(pathfinder); }
public AStarAlgorithm(int amountOfNodes, IDistanceHeuristic heuristic) { _openSet = new IndexMinHeap <AstarNode>(amountOfNodes); _closedSet = new LookupArray(amountOfNodes); _heuristic = heuristic; }