A* Pathfinding Project  4.2.5
The A* Pathfinding Project for Unity 3D
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 between two points.
Many other path types inherit from this type.

See also
Seeker.StartPath
Searching for paths
Get Started With The A* Pathfinding Project

Public Attributes

bool calculatePartial
 Calculate partial path if the target node cannot be reached. More...
 
GraphNode endNode
 End node of the path. More...
 
Vector3 endPoint
 End point of the path. More...
 
Vector3 originalEndPoint
 End Point exactly as in the path request. More...
 
Vector3 originalStartPoint
 Start Point exactly as in the path request. More...
 
Int3 startIntPoint
 Start point in integer coordinates. More...
 
GraphNode startNode
 Start node of the path. More...
 
Vector3 startPoint
 Start point of the path. More...
 
- Public Attributes inherited from Path
OnPathDelegate callback
 Callback to call when the path is complete. More...
 
float duration
 How long it took to calculate this path in milliseconds. More...
 
int enabledTags = -1
 Which graph tags are traversable. More...
 
Heuristic heuristic
 Determines which heuristic to use. More...
 
float heuristicScale = 1F
 Scale of the heuristic values. More...
 
OnPathDelegate immediateCallback
 Immediate callback to call when the path is complete. More...
 
NNConstraint nnConstraint = PathNNConstraint.Default
 Constraint for how to search for nodes. More...
 
List< GraphNodepath
 Holds the path as a Node array. More...
 
ITraversalProvider traversalProvider
 Provides additional traversal information to a path request. More...
 
List< Vector3 > vectorPath
 Holds the (possibly post processed) path as a Vector3 list. More...
 

Protected Member Functions

override void CalculateStep (long targetTick)
 Calculates the path until completed or until the time has passed targetTick. More...
 
override void Cleanup ()
 Always called after the path has been calculated. More...
 
virtual void CompletePathIfStartIsValidTarget ()
 Checks if the start node is the target and complete the path if that is the case. More...
 
virtual bool EndPointGridGraphSpecialCase (GraphNode closestWalkableEndNode)
 Applies a special case for grid nodes. More...
 
override void Initialize ()
 Initializes the path. More...
 
override void Prepare ()
 Prepares the path. More...
 
override void Reset ()
 Reset all values to their default values. More...
 
void UpdateStartEnd (Vector3 start, Vector3 end)
 Sets the start and end points. More...
 
- 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. More...
 
void DebugStringSuffix (PathLog logMode, System.Text.StringBuilder text)
 Writes text shared for all overrides of DebugString to the string builder. More...
 
virtual void OnEnterPool ()
 Called when the path enters the pool. More...
 
void PrepareBase (PathHandler pathHandler)
 Prepares low level path variables for calculation. More...
 
virtual void ReturnPath ()
 Calls callback to return the calculated path. More...
 
virtual void Trace (PathNode from)
 Traces the calculated path from the end node to the start. More...
 

Protected Attributes

int [] endNodeCosts
 Saved original costs for the end node. More...
 
PathNode partialBestTarget
 Current best target for the partial path. More...
 
- Protected Attributes inherited from Path
PathCompleteState completeState
 Backing field for CompleteState. More...
 
PathNode currentR
 The node currently being processed. More...
 
bool hasBeenReset
 True if the Reset function has been called. More...
 
Int3 hTarget
 Target to use for H score calculations. More...
 
GraphNode hTargetNode
 Target to use for H score calculation. More...
 
int [] internalTagPenalties
 The tag penalties that are actually used. More...
 
int [] manualTagPenalties
 Tag penalties set by other scripts. More...
 
PathHandler pathHandler
 Data for the thread calculating this path. More...
 

Package Functions

override string DebugString (PathLog logMode)
 Returns a debug string for this path. More...
 
override uint GetConnectionSpecialCost (GraphNode a, GraphNode b, uint currentCost)
 May be called by graph nodes to get a special cost for some connections. More...
 
- Package Functions inherited from Path
uint CalculateHScore (GraphNode node)
 Estimated cost from the specified node to the target. More...
 
bool CanTraverse (GraphNode node)
 Returns if the node can be traversed. More...
 
void FailWithError (string msg)
 Causes the path to fail and sets errorLog to msg. More...
 
Int3 GetHTarget ()
 
uint GetTraversalCost (GraphNode node)
 
void Log (string msg)
 Appends a message to the errorLog. More...
 
void LogError (string msg)
 Logs an error. More...
 
void ReleaseSilent (System.Object o)
 Releases the path silently (pooling). More...
 

Properties

virtual bool hasEndPoint [get]
 Determines if a search for an end node should be done. More...
 
- Properties inherited from Path
PathCompleteState CompleteState [get, protected set]
 Current state of the path. More...
 
bool error [get]
 If the path failed, this is true. More...
 
string errorLog [get, private set]
 Additional info on why a path failed. More...
 
virtual bool FloodingPath [get]
 True for paths that want to search all nodes and not jump over nodes as optimizations. More...
 
PathHandler IPathInternals. PathHandler [get]
 
ushort pathID [get, private set]
 ID of this path. More...
 
PathState PipelineState [get, private set]
 Returns the state of the path in the pathfinding pipeline. More...
 
bool IPathInternals. Pooled [get, set]
 True if the path is currently pooled. More...
 
bool recycled [get]
 True if the path is currently recycled (i.e in the path pool). More...
 
int [] tagPenalties [get, set]
 Penalties for each tag. More...
 
- Properties inherited from IPathInternals
PathHandler PathHandler [get]
 
bool Pooled [get, set]
 

Private Member Functions

void CompleteWith (GraphNode node)
 Completes the path using the specified target node. More...
 
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. More...
 

Private Attributes

GridNode gridSpecialCaseNode
 Used in EndPointGridGraphSpecialCase. More...
 

Static Private Attributes

static readonly NNConstraint NNConstraintNone = NNConstraint.None
 Cached NNConstraint.None to reduce allocations. More...
 

Constructors

 ABPath ()
 Default constructor. More...
 
static ABPath Construct (Vector3 start, Vector3 end, OnPathDelegate callback=null)
 Construct a path with a start and end point. More...
 
static ABPath FakePath (List< Vector3 > vectorPath, List< GraphNode > nodePath=null)
 Creates a fake path. More...
 
void Setup (Vector3 start, Vector3 end, OnPathDelegate callbackDelegate)
 

Additional Inherited Members

- Public Member Functions inherited from Path
void BlockUntilCalculated ()
 Blocks until this path has been calculated and returned. More...
 
void Claim (System.Object o)
 Claim this path (pooling). More...
 
void Error ()
 Aborts the path because of an error. More...
 
PathState GetState ()
 Returns the state of the path in the pathfinding pipeline. More...
 
uint GetTagPenalty (int tag)
 Returns penalty for the given tag. More...
 
float GetTotalLength ()
 Total Length of the path. More...
 
bool IsDone ()
 Returns if this path is done calculating. More...
 
void Release (System.Object o, bool silent=false)
 Releases a path claim (pooling). More...
 
IEnumerator WaitForPath ()
 Waits until this path has been calculated and returned. More...
 
- Package Attributes inherited from Path
Path next
 Internal linked list implementation. More...
 
int searchedNodes
 Number of nodes this path has searched. More...
 

Constructor & Destructor Documentation

◆ ABPath()

ABPath ( )

Default constructor.

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

Member Function Documentation

◆ CalculateStep()

override void CalculateStep ( long  targetTick)
protectedvirtual

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 occurred
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.

◆ Cleanup()

override void Cleanup ( )
protectedvirtual

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.

◆ CompletePathIfStartIsValidTarget()

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.

◆ CompleteWith()

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.

◆ Construct()

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

◆ DebugString()

override string DebugString ( PathLog  logMode)
packagevirtual

Returns a debug string for this path.

Reimplemented from Path.

Reimplemented in MultiTargetPath.

◆ EndPointGridGraphSpecialCase()

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 orange box.

Image below shows paths when this special case has been disabled

Reimplemented in XPath.

◆ FakePath()

static ABPath FakePath ( List< Vector3 >  vectorPath,
List< GraphNode nodePath = null 
)
static

Creates a fake path.

Creates a path that looks almost exactly like it would if the pathfinding system had calculated it.

This is useful if you want your agents to follow some known path that cannot be calculated using the pathfinding system for some reason.

var path = ABPath.FakePath(new List<Vector3> { new Vector3(1, 2, 3), new Vector3(4, 5, 6) });
ai.SetPath(path);

You can use it to combine existing paths like this:

var a = Vector3.zero;
var b = new Vector3(1, 2, 3);
var c = new Vector3(2, 3, 4);
var path1 = ABPath.Construct(a, b);
var path2 = ABPath.Construct(b, c);
path1.BlockUntilCalculated();
path2.BlockUntilCalculated();
// Combine the paths
// Note: Skip the first element in the second path as that will likely be the last element in the first path
var newVectorPath = path1.vectorPath.Concat(path2.vectorPath.Skip(1)).ToList();
var newNodePath = path1.path.Concat(path2.path.Skip(1)).ToList();
var combinedPath = ABPath.FakePath(newVectorPath, newNodePath);

◆ GetConnectionSpecialCost()

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

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.

◆ Initialize()

override void Initialize ( )
protectedvirtual

Initializes the path.

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

Implements Path.

Reimplemented in MultiTargetPath, RandomPath, and FloodPathTracer.

◆ Prepare()

override void Prepare ( )
protectedvirtual

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.

◆ Reset()

override void Reset ( )
protectedvirtual

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 MultiTargetPath, RandomPath, FloodPathTracer, and XPath.

◆ SetFlagOnSurroundingGridNodes()

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.

◆ Setup()

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

◆ UpdateStartEnd()

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

◆ calculatePartial

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

◆ endNode

GraphNode endNode

End node of the path.

◆ endNodeCosts

int [] endNodeCosts
protected

Saved original costs for the end node.

See also
ResetCosts

◆ endPoint

Vector3 endPoint

End point of the path.

This is the closest point on the endNode to originalEndPoint

◆ gridSpecialCaseNode

GridNode gridSpecialCaseNode
private

Used in EndPointGridGraphSpecialCase.

◆ NNConstraintNone

readonly NNConstraint NNConstraintNone = NNConstraint.None
staticprivate

Cached NNConstraint.None to reduce allocations.

◆ originalEndPoint

Vector3 originalEndPoint

End Point exactly as in the path request.

◆ originalStartPoint

Vector3 originalStartPoint

Start Point exactly as in the path request.

◆ partialBestTarget

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

◆ startIntPoint

Int3 startIntPoint

Start point in integer coordinates.

◆ startNode

GraphNode startNode

Start node of the path.

◆ startPoint

Vector3 startPoint

Start point of the path.

This is the closest point on the startNode to originalStartPoint

Property Documentation

◆ hasEndPoint

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: