/// <summary> /// Creates a new <see cref="DynamicPotentialField"/> /// </summary> /// <param name="pathfindaxManager"></param> /// <param name="gridTransformer"></param> /// <param name="interval">The update interval in milliseconds.</param> public DynamicPotentialField(IPathfindaxManager pathfindaxManager, GridTransformer gridTransformer, float interval) : base(gridTransformer) { pathfindaxManager.CreatePotentialFieldUpdater(this, interval); PotentialArray = new Array2D <float>(gridTransformer.GridSize.X, gridTransformer.GridSize.Y); }
public static IPathfinder <DefinitionNodeGrid, DijkstraNodeGrid, PotentialField> CreatePotentialFieldPathfinder(this IPathfindaxManager pathfindaxManager, DefinitionNodeGrid nodeGrid, int maxClearance, int maxCachedFlowFields, int amountOfThreads = 1) { var pathfinder = pathfindaxManager.CreatePathfinder(nodeGrid, new PotentialFieldAlgorithm(nodeGrid.NodeCount), (definitionNodeGrid, algorithm, cache) => { var dijkstraNodeGrid = new DijkstraNodeGrid(definitionNodeGrid, maxClearance); return(CreateRequestProcesser(dijkstraNodeGrid, algorithm, cache)); }, maxCachedFlowFields > 0 ? new ConcurrentCache <IPathRequest, PotentialField>(maxCachedFlowFields, new SingleSourcePathRequestComparer()) : null, amountOfThreads); pathfinder.Start(); return(pathfinder); }
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 static IPathfinder <DefinitionNodeGrid, DijkstraNodeGrid, PotentialField> CreatePotentialFieldPathfinder(this IPathfindaxManager pathfindaxManager, DefinitionNodeGrid nodeGrid, int maxClearance, int maxCachedFlowFields, int amountOfThreads = 1) { var pathfinder = pathfindaxManager.CreatePathfinder(nodeGrid, new PotentialFieldAlgorithm(maxCachedFlowFields, nodeGrid.NodeCount), (definitionNodeGrid, algorithm) => { var dijkstraNodeGrid = new DijkstraNodeGrid(definitionNodeGrid, maxClearance); return(CreateRequestProcesser(dijkstraNodeGrid, algorithm)); }, amountOfThreads); pathfinder.Start(); return(pathfinder); }