/// <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); }
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); }