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

Classes

struct  GraphUpdateLock
 Prevents pathfinding from running while held. More...
 

Public Member Functions

void AbortThreads ()
 Calls 'Abort' on each of the threads.
 
void DestroyNode (GraphNode node)
 Destroyes the given node.
 
int GetNewNodeIndex ()
 Returns a new global node index.
 
void InitializeNode (GraphNode node)
 Initializes temporary path data for a node.
 
void JoinThreads ()
 Calls 'Join' on each of the threads to block until they have completed.
 
GraphUpdateLock PausePathfinding (bool block)
 Prevents pathfinding threads from starting to calculate any new paths.
 
void TickNonMultithreaded ()
 

Package Functions

 PathProcessor (AstarPath astar, PathReturnQueue returnQueue, int processors, bool multithreaded)
 

Package Attributes

readonly ThreadControlQueue queue
 

Properties

bool IsUsingMultithreading [get]
 Returns whether or not multithreading is used.
 
int NumThreads [get]
 Number of parallel pathfinders.
 

Events

System.Action< PathOnPathPostSearch
 
System.Action< PathOnPathPreSearch
 
System.Action OnQueueUnblocked
 

Private Member Functions

IEnumerator CalculatePaths (PathThreadInfo threadInfo)
 Main pathfinding method.
 
void CalculatePathsThreaded (PathThreadInfo threadInfo)
 Main pathfinding method (multithreaded).
 
int Lock (bool block)
 
void Unlock (int id)
 

Private Attributes

readonly AstarPath astar
 
readonly List< int > locks = new List<int>()
 
int nextLockID = 0
 
int nextNodeIndex = 1
 Holds the next node index which has not been used by any previous node.
 
readonly Stack< int > nodeIndexPool = new Stack<int>()
 Holds indices for nodes that have been destroyed.
 
readonly PathReturnQueue returnQueue
 
IEnumerator threadCoroutine
 When no multithreading is used, the IEnumerator is stored here.
 
readonly PathThreadInfo[] threadInfos
 
readonly Thread[] threads
 References to each of the pathfinding threads.
 

Constructor & Destructor Documentation

PathProcessor ( AstarPath  astar,
PathReturnQueue  returnQueue,
int  processors,
bool  multithreaded 
)
package

Member Function Documentation

void AbortThreads ( )

Calls 'Abort' on each of the threads.

IEnumerator CalculatePaths ( PathThreadInfo  threadInfo)
private

Main pathfinding method.

This method will calculate the paths in the pathfinding queue.

See Also
CalculatePathsThreaded
StartPath
void CalculatePathsThreaded ( PathThreadInfo  threadInfo)
private

Main pathfinding method (multithreaded).

This method will calculate the paths in the pathfinding queue when multithreading is enabled.

See Also
CalculatePaths
StartPath
A* Pro Feature:
This is an A* Pathfinding Project Pro feature only. This function/class/variable might not exist in the Free version of the A* Pathfinding Project or the functionality might be limited
The Pro version can be bought here
void DestroyNode ( GraphNode  node)

Destroyes the given node.

This is to be called after the node has been disconnected from the graph so that it cannot be reached from any other nodes. It should only be called during graph updates, that is when the pathfinding threads are either not running or paused.

Warning
This method should not be called by user code. It is used internally by the system.
int GetNewNodeIndex ( )

Returns a new global node index.

Warning
This method should not be called directly. It is used by the GraphNode constructor.
void InitializeNode ( GraphNode  node)

Initializes temporary path data for a node.

Warning
This method should not be called directly. It is used by the GraphNode constructor.
void JoinThreads ( )

Calls 'Join' on each of the threads to block until they have completed.

int Lock ( bool  block)
private
GraphUpdateLock PausePathfinding ( bool  block)

Prevents pathfinding threads from starting to calculate any new paths.

Parameters
blockIf true, this call will block until all pathfinding threads are paused. otherwise the threads will be paused as soon as they are done with what they are currently doing.
Returns
A lock object. You need to call Unlock on that object to allow pathfinding to resume.
Note
In most cases this should not be called from user code.
void TickNonMultithreaded ( )
void Unlock ( int  id)
private

Member Data Documentation

readonly AstarPath astar
private
readonly List<int> locks = new List<int>()
private
int nextLockID = 0
private
int nextNodeIndex = 1
private

Holds the next node index which has not been used by any previous node.

See Also
nodeIndexPool
readonly Stack<int> nodeIndexPool = new Stack<int>()
private

Holds indices for nodes that have been destroyed.

To avoid trashing a lot of memory structures when nodes are frequently deleted and created, node indices are reused.

readonly ThreadControlQueue queue
package
readonly PathReturnQueue returnQueue
private
IEnumerator threadCoroutine
private

When no multithreading is used, the IEnumerator is stored here.

When no multithreading is used, a coroutine is used instead. It is not directly called with StartCoroutine but a separate function has just a while loop which increments the main IEnumerator. This is done so other functions can step the thread forward at any time, without having to wait for Unity to update it.

See Also
CalculatePaths
CalculatePathsHandler
readonly PathThreadInfo [] threadInfos
private
readonly Thread [] threads
private

References to each of the pathfinding threads.

Property Documentation

bool IsUsingMultithreading
get

Returns whether or not multithreading is used.

int NumThreads
get

Number of parallel pathfinders.

Returns the number of concurrent processes which can calculate paths at once. When using multithreading, this will be the number of threads, if not using multithreading it is always 1 (since only 1 coroutine is used).

See Also
threadInfos
IsUsingMultithreading

Event Documentation

System.Action<Path> OnPathPostSearch
System.Action<Path> OnPathPreSearch
System.Action OnQueueUnblocked

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