예제 #1
0
 /// <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);
 }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
        }