Beispiel #1
0
        /// <summary>
        /// Find route from src to dst, using the given positionings
        /// </summary>
        public static AStarResult Find(IEnvironmentObject env, IntVector3 src, DirectionSet srcPositioning, IntVector3 dst, DirectionSet dstPositioning,
			int maxNodeCount = 200000, CancellationToken? cancellationToken = null)
        {
            var initLocs = env.GetPositioningLocations(src, srcPositioning);
            var target = new AStarDefaultTarget(env, dst, dstPositioning);
            return Find(initLocs, target, maxNodeCount, cancellationToken);
        }
Beispiel #2
0
        /// <summary>
        /// Flood-find the nearest location for which func returns true
        /// </summary>
        public static AStarResult FindNearest(IEnvironmentObject env, IntVector3 src, Func <IntVector3, bool> func, int maxNodeCount = 200000)
        {
            var initLocs = env.GetPositioningLocations(src, DirectionSet.Exact);
            var target   = new AStarDelegateTarget(env, func);

            return(Find(initLocs, target, maxNodeCount));
        }
Beispiel #3
0
        /// <summary>
        /// Find route from src to destination area
        /// </summary>
        public static AStarResult FindArea(IEnvironmentObject env, IntVector3 src, DirectionSet srcPositioning, IntGrid3 dstArea,
                                           int maxNodeCount = 200000, CancellationToken?cancellationToken = null)
        {
            var initLocs = env.GetPositioningLocations(src, srcPositioning);
            var target   = new AStarAreaTarget(env, dstArea);

            return(Find(initLocs, target, maxNodeCount, cancellationToken));
        }
Beispiel #4
0
        public static IEnumerable <AStarResult> FindMany(IEnvironmentObject env,
                                                         IntVector3 src, DirectionSet srcPositioning, IAStarTarget target,
                                                         int maxNodeCount = 200000, CancellationToken?cancellationToken = null)
        {
            var initLocs = env.GetPositioningLocations(src, srcPositioning);

            var astar = new AStar(initLocs, target);

            astar.MaxNodeCount = maxNodeCount;
            if (cancellationToken.HasValue)
            {
                astar.CancellationToken = cancellationToken.Value;
            }

            AStarStatus status;

            while ((status = astar.Find()) == AStarStatus.Found)
            {
                yield return(new AStarResult(status, astar.LastNode));
            }
        }
Beispiel #5
0
 /// <summary>
 /// Flood-find the nearest location for which func returns true
 /// </summary>
 public static AStarResult FindNearest(IEnvironmentObject env, IntVector3 src, Func<IntVector3, bool> func, int maxNodeCount = 200000)
 {
     var initLocs = env.GetPositioningLocations(src, DirectionSet.Exact);
     var target = new AStarDelegateTarget(env, func);
     return Find(initLocs, target, maxNodeCount);
 }
Beispiel #6
0
        public static IEnumerable<AStarResult> FindMany(IEnvironmentObject env,
			IntVector3 src, DirectionSet srcPositioning, IAStarTarget target,
			int maxNodeCount = 200000, CancellationToken? cancellationToken = null)
        {
            var initLocs = env.GetPositioningLocations(src, srcPositioning);

            var astar = new AStar(initLocs, target);
            astar.MaxNodeCount = maxNodeCount;
            if (cancellationToken.HasValue)
                astar.CancellationToken = cancellationToken.Value;

            AStarStatus status;
            while ((status = astar.Find()) == AStarStatus.Found)
                yield return new AStarResult(status, astar.LastNode);
        }