Ejemplo n.º 1
0
        /// <summary>
        /// Calculates a path from the given start position to the given end position for this Pathfinder's list of
        /// rectangles. This overload Includes additional
        /// metrics about the nature of the pathfinding.
        /// </summary>
        /// <param name="startPosition"></param>
        /// <param name="endPosition"></param>
        /// <param name="metrics"></param>
        /// <returns></returns>
        public List <Position> CalculatePath(Position startPosition, Position endPosition, out PathfinderMetrics metrics)
        {
            var watch = Stopwatch.StartNew();
            PathfinderMetrics results = new PathfinderMetrics(0, 0, 0);
            // something to time
            var pathResult = CalculatePath(startPosition, endPosition, results);

            // done timing
            watch.Stop();
            results.RuntimeInMillis = watch.ElapsedMilliseconds;

            metrics = results;

            return(pathResult);
        }
Ejemplo n.º 2
0
        private List <Position> CalculatePath(Position initialPosition, Position finalPosition, PathfinderMetrics metrics = null)
        {
            Position startPosition, endPosition;

            //no path needed.
            if (initialPosition.Equals(finalPosition))
            {
                return(new List <Position>());
            }

            //Allows for preprocessing (if needed again in the future)
            startPosition = initialPosition;
            endPosition   = finalPosition;

            //look for caches where startposition ==||== endposition match also
            //TODO
            //end cache TODO

            List <Position> path = GetPathBetweenPositions(startPosition, endPosition, out int visitedNodeCount, out int frontierNodeCount);

            if (path.Count == 0)
            {
                //no path found
                return(path);
            }


            //add metrics if requested
            if (metrics != null)
            {
                metrics.FrontierSize = frontierNodeCount;
                metrics.VisitedNodes = visitedNodeCount;
            }

            return(path);
        }