A* Pathfinding Project  3.8.5
The A* Pathfinding Project for Unity 3D
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Properties Events Macros Groups Pages
ABPath Class Reference

Basic path, finds the shortest path from A to B. More...

Detailed Description

Basic path, finds the shortest path from A to B.

This is the most basic path object it will try to find the shortest path from A to B.
Many other path types inherit from this type.

See Also
Seeker.StartPath

Public Member Functions

override void CalculateStep (long targetTick)
 Calculates the path until completed or until the time has passed targetTick.
 
override void Cleanup ()
 Always called after the path has been calculated.
 
override string DebugString (PathLog logMode)
 Returns a debug string for this path.
 
override uint GetConnectionSpecialCost (GraphNode a, GraphNode b, uint currentCost)
 May be called by graph nodes to get a special cost for some connections.
 
Vector3 GetMovementVector (Vector3 point)
 Returns in which direction to move from a point on the path.
 
override void Initialize ()
 Initializes the path.
 
override void Prepare ()
 Prepares the path.
 
override void Reset ()
 Reset all values to their default values.
 
void ResetCosts (Path p)
 Resets End Node Costs.
 
- Public Member Functions inherited from Path
void AdvanceState (PathState s)
 Threadsafe increment of the state.
 
uint CalculateHScore (GraphNode node)
 Estimated cost from the specified node to the target.
 
bool CanTraverse (GraphNode node)
 Returns if the node can be traversed.
 
void Claim (System.Object o)
 Claim this path (pooling).
 
void Error ()
 Aborts the path because of an error.
 
Int3 GetHTarget ()
 
PathState GetState ()
 Returns the state of the path in the pathfinding pipeline.
 
uint GetTagPenalty (int tag)
 Returns penalty for the given tag.
 
float GetTotalLength ()
 Total Length of the path.
 
uint GetTraversalCost (GraphNode node)
 
bool IsDone ()
 Returns if this path is done calculating.
 
virtual void OnEnterPool ()
 Called when the path enters the pool.
 
void Release (System.Object o, bool silent=false)
 Releases a path claim (pooling).
 
void ReleaseSilent (System.Object o)
 Releases the path silently (pooling).
 
virtual void ReturnPath ()
 Calls callback to return the calculated path.
 
IEnumerator WaitForPath ()
 Waits until this path has been calculated and returned.
 

Public Attributes

bool calculatePartial
 Calculate partial path if the target node cannot be reached.
 
GraphNode endHint
 Hints can be set to enable faster Get Nearest Node queries.
 
GraphNode endNode
 End node of the path.
 
Vector3 endPoint
 End point of the path.
 
Vector3 originalEndPoint
 End Point exactly as in the path request.
 
Vector3 originalStartPoint
 Start Point exactly as in the path request.
 
bool recalcStartEndCosts = true
 Defines if start and end nodes will have their connection costs recalculated for this path.
 
GraphNode startHint
 Hints can be set to enable faster Get Nearest Node queries.
 
Int3 startIntPoint
 Start point in integer coordinates.
 
GraphNode startNode
 Start node of the path.
 
Vector3 startPoint
 Start point of the path.
 
- Public Attributes inherited from Path
OnPathDelegate callback
 Callback to call when the path is complete.
 
float duration
 The duration of this path in ms.
 
int enabledTags = -1
 Which graph tags are traversable.
 
Heuristic heuristic
 Determines which heuristic to use.
 
float heuristicScale = 1F
 Scale of the heuristic values.
 
OnPathDelegate immediateCallback
 Immediate callback to call when the path is complete.
 
NNConstraint nnConstraint = PathNNConstraint.Default
 Constraint for how to search for nodes.
 
List< GraphNodepath
 Holds the path as a Node array.
 
int searchedNodes
 Number of nodes this path has searched.
 
int searchIterations
 The number of frames/iterations this path has executed.
 
List< Vector3 > vectorPath
 Holds the (perhaps post processed) path as a Vector3 list.
 

Protected Member Functions

virtual void CompletePathIfStartIsValidTarget ()
 Checks if the start node is the target and complete the path if that is the case.
 
virtual bool EndPointGridGraphSpecialCase (GraphNode closestWalkableEndNode)
 Applies a special case for grid nodes.
 
void UpdateStartEnd (Vector3 start, Vector3 end)
 Sets the start and end points.
 
- Protected Member Functions inherited from Path
void DebugStringPrefix (PathLog logMode, System.Text.StringBuilder text)
 Writes text shared for all overrides of DebugString to the string builder.
 
void DebugStringSuffix (PathLog logMode, System.Text.StringBuilder text)
 Writes text shared for all overrides of DebugString to the string builder.
 
bool HasExceededTime (int searchedNodes, long targetTime)
 
virtual void Trace (PathNode from)
 Traces the calculated path from the end node to the start.
 

Protected Attributes

int[] endNodeCosts
 Saved original costs for the end node.
 
PathNode partialBestTarget
 Current best target for the partial path.
 
- Protected Attributes inherited from Path
PathNode currentR
 The node currently being processed.
 
bool hasBeenReset
 True if the Reset function has been called.
 
Int3 hTarget
 Target to use for H score calculations.
 
GraphNode hTargetNode
 Target to use for H score calculation.
 
int[] internalTagPenalties
 The tag penalties that are actually used.
 
int[] manualTagPenalties
 Tag penalties set by other scripts.
 
float maxFrameTime
 The max number of milliseconds per iteration (frame, in case of non-multithreading)
 

Properties

virtual bool hasEndPoint [get]
 Determines if a search for an end node should be done.
 
- Properties inherited from Path
System.DateTime callTime [get, set]
 When the call was made to start the pathfinding for this path.
 
PathCompleteState CompleteState [get, set]
 Current state of the path.
 
bool error [get]
 If the path failed, this is true.
 
string errorLog [get]
 Log messages with info about eventual errors.
 
virtual bool FloodingPath [get]
 True for paths that want to search all nodes and not jump over nodes as optimizations.
 
PathHandler pathHandler [get, set]
 Data for the thread calculating this path.
 
ushort pathID [get, set]
 ID of this path.
 
bool recycled [get, set]
 True if the path is currently recycled (i.e in the path pool).
 
int[] tagPenalties [get, set]
 Penalties for each tag.
 

Private Member Functions

void CompleteWith (GraphNode node)
 Completes the path using the specified target node.
 
void SetFlagOnSurroundingGridNodes (GridNode gridNode, int flag, bool flagState)
 Helper method to set PathNode.flag1 to a specific value for all nodes adjacent to a grid node.
 

Private Attributes

GridNode gridSpecialCaseNode
 Used in EndPointGridGraphSpecialCase.
 

Constructors

 ABPath ()
 Default constructor.
 
static ABPath Construct (Vector3 start, Vector3 end, OnPathDelegate callback=null)
 Construct a path with a start and end point.
 
void Setup (Vector3 start, Vector3 end, OnPathDelegate callbackDelegate)
 

Additional Inherited Members

- Package Functions inherited from Path
void ForceLogError (string msg)
 Logs an error and calls Error().
 
void Log (string msg)
 Appends a message to the errorLog.
 
void LogError (string msg)
 Appends msg to errorLog and logs msg to the console.
 
void PrepareBase (PathHandler pathHandler)
 Prepares low level path variables for calculation.
 
- Package Attributes inherited from Path
Path next
 Internal linked list implementation.
 
bool pooled
 True if the path is currently pooled.
 

Constructor & Destructor Documentation

ABPath ( )

Default constructor.

Do not use this. Instead use the static Construct method which can handle path pooling.

Member Function Documentation

override void CalculateStep ( long  targetTick)
virtual

Calculates the path until completed or until the time has passed targetTick.

Usually a check is only done every 500 nodes if the time has passed targetTick. Time/Ticks are got from System.DateTime.UtcNow.Ticks.

Basic outline of what the function does for the standard path (Pathfinding.ABPath).

while the end has not been found and no error has ocurred
check if we have reached the end
if so, exit and return the path
open the current node, i.e loop through its neighbours, mark them as visited and put them on a heap
check if there are still nodes left to process (or have we searched the whole graph)
if there are none, flag error and exit
pop the next node of the heap and set it as current
check if the function has exceeded the time limit
if so, return and wait for the function to get called again

Implements Path.

Reimplemented in MultiTargetPath, RandomPath, FloodPathTracer, and XPath.

override void Cleanup ( )
virtual

Always called after the path has been calculated.

Guaranteed to be called before other paths have been calculated on the same thread. Use for cleaning up things like node tagging and similar.

Reimplemented from Path.

Reimplemented in MultiTargetPath.

virtual void CompletePathIfStartIsValidTarget ( )
protectedvirtual

Checks if the start node is the target and complete the path if that is the case.

This is necessary so that subclasses (e.g XPath) can override this behaviour.

If the start node is a valid target point, this method should set CompleteState to Complete and trace the path.

Reimplemented in XPath.

void CompleteWith ( GraphNode  node)
private

Completes the path using the specified target node.

This method assumes that the node is a target node of the path not just any random node.

static ABPath Construct ( Vector3  start,
Vector3  end,
OnPathDelegate  callback = null 
)
static

Construct a path with a start and end point.

The delegate will be called when the path has been calculated. Do not confuse it with the Seeker callback as they are sent at different times. If you are using a Seeker to start the path you can set callback to null.

Returns
The constructed path object
override string DebugString ( PathLog  logMode)
virtual

Returns a debug string for this path.

Reimplemented from Path.

Reimplemented in MultiTargetPath.

virtual bool EndPointGridGraphSpecialCase ( GraphNode  closestWalkableEndNode)
protectedvirtual

Applies a special case for grid nodes.

Assume the closest walkable node is a grid node. We will now apply a special case only for grid graphs. In tile based games, an obstacle often occupies a whole node. When a path is requested to the position of an obstacle (single unwalkable node) the closest walkable node will be one of the 8 nodes surrounding that unwalkable node but that node is not neccessarily the one that is most optimal to walk to so in this special case we mark all nodes around the unwalkable node as targets and when we search and find any one of them we simply exit and set that first node we found to be the 'real' end node because that will be the optimal node (this does not apply in general unless the heuristic is set to None, but for a single unwalkable node it does). This also applies if the nearest node cannot be traversed for some other reason like restricted tags.

Returns
True if the workaround was applied. If this happens the endPoint, endNode, hTarget and hTargetNode fields will be modified.

Image below shows paths when this special case is applied. The path goes from the white sphere to the blue orange box.

Image below shows paths when this special case has been disabled

Reimplemented in XPath.

override uint GetConnectionSpecialCost ( GraphNode  a,
GraphNode  b,
uint  currentCost 
)
virtual

May be called by graph nodes to get a special cost for some connections.

Nodes may call it when PathNode.flag2 is set to true, for example mesh nodes, which have a very large area can be marked on the start and end nodes, this method will be called to get the actual cost for moving from the start position to its neighbours instead of as would otherwise be the case, from the start node's position to its neighbours. The position of a node and the actual start point on the node can vary quite a lot.

The default behaviour of this method is to return the previous cost of the connection, essentiall making no change at all.

This method should return the same regardless of the order of a and b. That is f(a,b) == f(b,a) should hold.

Parameters
aMoving from this node
bMoving to this node
currentCostThe cost of moving between the nodes. Return this value if there is no meaningful special cost to return.

Reimplemented from Path.

Vector3 GetMovementVector ( Vector3  point)

Returns in which direction to move from a point on the path.

A simple and quite slow (well, compared to more optimized algorithms) algorithm first finds the closest path segment (from vectorPath) and then returns the direction to the next point from there. The direction is not normalized.

Returns
Direction to move from a point, returns Vector3.zero if vectorPath is null or has a length of 0
override void Initialize ( )
virtual

Initializes the path.

Sets up the open list and adds the first node to it

Implements Path.

Reimplemented in MultiTargetPath, RandomPath, and FloodPathTracer.

override void Prepare ( )
virtual

Prepares the path.

Searches for start and end nodes and does some simple checking if a path is at all possible

Implements Path.

Reimplemented in MultiTargetPath, and RandomPath.

override void Reset ( )
virtual

Reset all values to their default values.

All inheriting path types must implement this function, resetting ALL their variables to enable recycling of paths. Call this base function in inheriting types with base.Reset ();

Reimplemented from Path.

Reimplemented in RandomPath, FloodPathTracer, and XPath.

void ResetCosts ( Path  p)

Resets End Node Costs.

Costs are updated on the end node at the start of the search to better reflect the end point passed to the path, the previous ones are saved in endNodeCosts and are reset in this function which is called after the path search is complete

void SetFlagOnSurroundingGridNodes ( GridNode  gridNode,
int  flag,
bool  flagState 
)
private

Helper method to set PathNode.flag1 to a specific value for all nodes adjacent to a grid node.

void Setup ( Vector3  start,
Vector3  end,
OnPathDelegate  callbackDelegate 
)
protected
void UpdateStartEnd ( Vector3  start,
Vector3  end 
)
protected

Sets the start and end points.

Sets originalStartPoint, originalEndPoint, startPoint, endPoint, startIntPoint and hTarget (to end )

Member Data Documentation

bool calculatePartial

Calculate partial path if the target node cannot be reached.

If the target node cannot be reached, the node which was closest (given by heuristic) will be chosen as target node and a partial path will be returned. This only works if a heuristic is used (which is the default). If a partial path is found, CompleteState is set to Partial.

Note
It is not required by other path types to respect this setting
Warning
This feature is currently a work in progress and may not work in the current version
GraphNode endHint

Hints can be set to enable faster Get Nearest Node queries.

Only applies to some graph types

GraphNode endNode

End node of the path.

int [] endNodeCosts
protected

Saved original costs for the end node.

See Also
ResetCosts
Vector3 endPoint

End point of the path.

This is the closest point on the endNode to originalEndPoint

GridNode gridSpecialCaseNode
private

Used in EndPointGridGraphSpecialCase.

Vector3 originalEndPoint

End Point exactly as in the path request.

Vector3 originalStartPoint

Start Point exactly as in the path request.

PathNode partialBestTarget
protected

Current best target for the partial path.

This is the node with the lowest H score.

Warning
This feature is currently a work in progress and may not work in the current version
bool recalcStartEndCosts = true

Defines if start and end nodes will have their connection costs recalculated for this path.

These connection costs will be more accurate and based on the exact start point and target point, however it should not be used when connection costs are not the default ones (all build in graph generators currently generate default connection costs).

See Also
Int3.costMagnitude
Since
Added in 3.0.8.3
Bug:
Does not do anything in 3.2 and up due to incompabilities with multithreading. Will be enabled again in later versions.
GraphNode startHint

Hints can be set to enable faster Get Nearest Node queries.

Only applies to some graph types

Int3 startIntPoint

Start point in integer coordinates.

GraphNode startNode

Start node of the path.

Vector3 startPoint

Start point of the path.

This is the closest point on the startNode to originalStartPoint

Property Documentation

virtual bool hasEndPoint
getprotected

Determines if a search for an end node should be done.

Set by different path types.

Since
Added in 3.0.8.3

The documentation for this class was generated from the following file: