A* Pathfinding Project  4.3.5
The A* Pathfinding Project for Unity 3D
GraphNode Class Referenceabstract

Base class for all nodes. More...

Detailed Description

Base class for all nodes.

Public Member Functions

abstract void AddConnection (GraphNode node, uint cost)
 Add a connection from this node to the specified node. More...
 
abstract void ClearConnections (bool alsoReverse)
 Remove all connections from this node. More...
 
virtual bool ContainsConnection (GraphNode node)
 Checks if this node has a connection to the specified node. More...
 
virtual void DeserializeNode (GraphSerializationContext ctx)
 Deserializes the node data from a byte array. More...
 
virtual void DeserializeReferences (GraphSerializationContext ctx)
 Used to deserialize references to other nodes e.g connections. More...
 
void Destroy ()
 Destroys the node. More...
 
abstract void GetConnections (System.Action< GraphNode > action)
 Calls the delegate with all connections from this node. More...
 
virtual int GetGizmoHashCode ()
 Hash code used for checking if the gizmos need to be updated. More...
 
virtual bool GetPortal (GraphNode other, List< Vector3 > left, List< Vector3 > right, bool backwards)
 Add a portal from this node to the specified node. More...
 
abstract void Open (Path path, PathNode pathNode, PathHandler handler)
 Open the node. More...
 
virtual Vector3 RandomPointOnSurface ()
 A random point on the surface of the node. More...
 
void RecalculateConnectionCosts ()
 Recalculates a node's connection costs. More...
 
abstract void RemoveConnection (GraphNode node)
 Removes any connection from this node to the specified node. More...
 
virtual void SerializeNode (GraphSerializationContext ctx)
 Serialized the node data to a byte array. More...
 
virtual void SerializeReferences (GraphSerializationContext ctx)
 Used to serialize references to other nodes e.g connections. More...
 
void SetConnectivityDirty ()
 Inform the system that the node's connectivity has changed. More...
 
virtual float SurfaceArea ()
 The surface area of the node in square world units. More...
 
virtual void UpdateRecursiveG (Path path, PathNode pathNode, PathHandler handler)
 

Public Attributes

const uint MaxGraphIndex = FlagsGraphMask >> FlagsGraphOffset
 Max number of graphs-1. More...
 
const uint MaxHierarchicalNodeIndex = HierarchicalIndexMask >> FlagsHierarchicalIndexOffset
 
Int3 position
 Position of the node in world space. More...
 

Protected Member Functions

 GraphNode ()
 
 GraphNode (AstarPath astar)
 

Protected Attributes

uint flags
 Bitpacked field holding several pieces of data. More...
 

Properties

uint Area [get]
 Connected component that contains the node. More...
 
bool Destroyed [get]
 
uint Flags [get, set]
 Holds various bitpacked variables. More...
 
NavGraph Graph [get]
 Graph which this node belongs to. More...
 
uint GraphIndex [get, set]
 Graph which contains this node. More...
 
int HierarchicalNodeIndex [get, set]
 Hierarchical Node that contains this node. More...
 
bool IsHierarchicalNodeDirty [get, set]
 Some internal bookkeeping. More...
 
int NodeIndex [get, set]
 Internal unique index. More...
 
uint Penalty [get, set]
 Penalty cost for walking on this node. More...
 
uint Tag [get, set]
 Node tag. More...
 
bool TemporaryFlag1 [get, set]
 Temporary flag for internal purposes. More...
 
bool TemporaryFlag2 [get, set]
 Temporary flag for internal purposes. More...
 
bool Walkable [get, set]
 True if the node is traversable. More...
 

Private Attributes

const int DestroyedNodeIndex = NodeIndexMask - 1
 
const uint FlagsGraphMask = (256u-1) << FlagsGraphOffset
 Mask of graph index bits. More...
 
const int FlagsGraphOffset = 24
 Start of graph index bits. More...
 
const int FlagsHierarchicalIndexOffset = 1
 Start of hierarchical node index bits. More...
 
const uint FlagsTagMask = (32-1) << FlagsTagOffset
 Mask of tag bits. More...
 
const int FlagsTagOffset = 19
 Start of tag bits. More...
 
const uint FlagsWalkableMask = 1 << FlagsWalkableOffset
 Mask of the walkable bit. More...
 
const int FlagsWalkableOffset = 0
 Position of the walkable bit. More...
 
const uint HierarchicalDirtyMask = 1 << HierarchicalDirtyOffset
 Mask of the IsHierarchicalNodeDirty bit. More...
 
const int HierarchicalDirtyOffset = 18
 Start of IsHierarchicalNodeDirty bits. More...
 
const uint HierarchicalIndexMask = (131072-1) << FlagsHierarchicalIndexOffset
 Mask of hierarchical node index bits. More...
 
int nodeIndex
 Internal unique index. More...
 
const int NodeIndexMask = 0xFFFFFFF
 
uint penalty
 Penalty cost for walking on this node. More...
 
const int TemporaryFlag1Mask = 0x10000000
 
const int TemporaryFlag2Mask = 0x20000000
 

Constructor & Destructor Documentation

◆ GraphNode() [1/2]

GraphNode ( )
protected

◆ GraphNode() [2/2]

GraphNode ( AstarPath  astar)
protected

Member Function Documentation

◆ AddConnection()

abstract void AddConnection ( GraphNode  node,
uint  cost 
)
pure virtual

Add a connection from this node to the specified node.

If the connection already exists, the cost will simply be updated and no extra connection added.

Note
Only adds a one-way connection. Consider calling the same function on the other node to get a two-way connection.
AstarPath.active.AddWorkItem(new AstarWorkItem(ctx => {
// Connect two nodes
var node1 = AstarPath.active.GetNearest(transform.position, NNConstraint.None).node;
var node2 = AstarPath.active.GetNearest(transform.position + Vector3.right, NNConstraint.None).node;
var cost = (uint)(node2.position - node1.position).costMagnitude;
node1.AddConnection(node2, cost);
node2.AddConnection(node1, cost);
node1.ContainsConnection(node2); // True
node1.RemoveConnection(node2);
node2.RemoveConnection(node1);
}));

Implemented in MeshNode, GridNodeBase, and PointNode.

◆ ClearConnections()

abstract void ClearConnections ( bool  alsoReverse)
pure virtual

Remove all connections from this node.

Parameters
alsoReverseif true, neighbours will be requested to remove connections to this node.

Implemented in LevelGridNode, MeshNode, GridNodeBase, GridNode, and PointNode.

◆ ContainsConnection()

virtual bool ContainsConnection ( GraphNode  node)
virtual

Checks if this node has a connection to the specified node.

AstarPath.active.AddWorkItem(new AstarWorkItem(ctx => {
// Connect two nodes
var node1 = AstarPath.active.GetNearest(transform.position, NNConstraint.None).node;
var node2 = AstarPath.active.GetNearest(transform.position + Vector3.right, NNConstraint.None).node;
var cost = (uint)(node2.position - node1.position).costMagnitude;
node1.AddConnection(node2, cost);
node2.AddConnection(node1, cost);
node1.ContainsConnection(node2); // True
node1.RemoveConnection(node2);
node2.RemoveConnection(node1);
}));

Reimplemented in MeshNode, GridNodeBase, and PointNode.

◆ DeserializeNode()

virtual void DeserializeNode ( GraphSerializationContext  ctx)
virtual

Deserializes the node data from a byte array.

Reimplemented in LevelGridNode, GridNode, TriangleMeshNode, and PointNode.

◆ DeserializeReferences()

virtual void DeserializeReferences ( GraphSerializationContext  ctx)
virtual

Used to deserialize references to other nodes e.g connections.

Use the GraphSerializationContext.GetNodeIdentifier and GraphSerializationContext.GetNodeFromIdentifier methods for serialization and deserialization respectively.

Nodes must override this method and serialize their connections. Graph generators do not need to call this method, it will be called automatically on all nodes at the correct time by the serializer.

Reimplemented in MeshNode, GridNodeBase, and PointNode.

◆ Destroy()

void Destroy ( )

Destroys the node.

Cleans up any temporary pathfinding data used for this node. The graph is responsible for calling this method on nodes when they are destroyed, including when the whole graph is destoyed. Otherwise memory leaks might present themselves.

Once called the Destroyed property will return true and subsequent calls to this method will not do anything.

Note
Assumes the current active AstarPath instance is the same one that created this node.
Warning
Should only be called by graph classes on their own nodes

◆ GetConnections()

abstract void GetConnections ( System.Action< GraphNode action)
pure virtual

Calls the delegate with all connections from this node.

node.GetConnections(connectedTo => {
Debug.DrawLine((Vector3)node.position, (Vector3)connectedTo.position, Color.red);
});

You can add all connected nodes to a list like this

var connections = new List<GraphNode>();
node.GetConnections(connections.Add);

Implemented in LevelGridNode, MeshNode, GridNodeBase, GridNode, and PointNode.

◆ GetGizmoHashCode()

virtual int GetGizmoHashCode ( )
virtual

Hash code used for checking if the gizmos need to be updated.

Will change when the gizmos for the node might change.

Reimplemented in LevelGridNode, MeshNode, PointNode, and GridNodeBase.

◆ GetPortal()

virtual bool GetPortal ( GraphNode  other,
List< Vector3 >  left,
List< Vector3 >  right,
bool  backwards 
)
virtual

Add a portal from this node to the specified node.

This function should add a portal to the left and right lists which is connecting the two nodes (this and other).

Parameters
otherThe node which is on the other side of the portal (strictly speaking it does not actually have to be on the other side of the portal though).
leftList of portal points on the left side of the funnel
rightList of portal points on the right side of the funnel
backwardsIf this is true, the call was made on a node with the other node as the node before this one in the path. In this case you may choose to do nothing since a similar call will be made to the other node with this node referenced as other (but then with backwards = true). You do not have to care about switching the left and right lists, that is done for you already.
Returns
True if the call was deemed successful. False if some unknown case was encountered and no portal could be added. If both calls to node1.GetPortal (node2,...) and node2.GetPortal (node1,...) return false, the funnel modifier will fall back to adding to the path the positions of the node.

The default implementation simply returns false.

This function may add more than one portal if necessary.

See also
http://digestingduck.blogspot.se/2010/03/simple-stupid-funnel-algorithm.html

Reimplemented in LevelGridNode, GridNode, and NodeLink3Node.

◆ Open()

abstract void Open ( Path  path,
PathNode  pathNode,
PathHandler  handler 
)
pure virtual

Open the node.

Used internally for the A* algorithm.

Implemented in LevelGridNode, GridNode, TriangleMeshNode, GridNodeBase, and PointNode.

◆ RandomPointOnSurface()

virtual Vector3 RandomPointOnSurface ( )
virtual

A random point on the surface of the node.

For point nodes and other nodes which do not have a surface, this will always return the position of the node.

Reimplemented in TriangleMeshNode, and GridNodeBase.

◆ RecalculateConnectionCosts()

void RecalculateConnectionCosts ( )

Recalculates a node's connection costs.

Deprecated:
This method is deprecated because it never did anything, you can safely remove any calls to this method.

◆ RemoveConnection()

abstract void RemoveConnection ( GraphNode  node)
pure virtual

Removes any connection from this node to the specified node.

If no such connection exists, nothing will be done.

Note
This only removes the connection from this node to the other node. You may want to call the same function on the other node to remove its possible connection to this node.
AstarPath.active.AddWorkItem(new AstarWorkItem(ctx => {
// Connect two nodes
var node1 = AstarPath.active.GetNearest(transform.position, NNConstraint.None).node;
var node2 = AstarPath.active.GetNearest(transform.position + Vector3.right, NNConstraint.None).node;
var cost = (uint)(node2.position - node1.position).costMagnitude;
node1.AddConnection(node2, cost);
node2.AddConnection(node1, cost);
node1.ContainsConnection(node2); // True
node1.RemoveConnection(node2);
node2.RemoveConnection(node1);
}));

Implemented in MeshNode, GridNodeBase, and PointNode.

◆ SerializeNode()

virtual void SerializeNode ( GraphSerializationContext  ctx)
virtual

Serialized the node data to a byte array.

Reimplemented in LevelGridNode, GridNode, TriangleMeshNode, and PointNode.

◆ SerializeReferences()

virtual void SerializeReferences ( GraphSerializationContext  ctx)
virtual

Used to serialize references to other nodes e.g connections.

Use the GraphSerializationContext.GetNodeIdentifier and GraphSerializationContext.GetNodeFromIdentifier methods for serialization and deserialization respectively.

Nodes must override this method and serialize their connections. Graph generators do not need to call this method, it will be called automatically on all nodes at the correct time by the serializer.

Reimplemented in MeshNode, GridNodeBase, and PointNode.

◆ SetConnectivityDirty()

void SetConnectivityDirty ( )

Inform the system that the node's connectivity has changed.

This is used for recalculating the connected components of the graph.

See also
Pathfinding.HierarchicalGraph

You must call this method if you change the connectivity or walkability of the node without going through the high level methods such as the Walkable property or the AddConnection method. For example if your manually change the Pathfinding.MeshNode.connections array you need to call this method.

◆ SurfaceArea()

virtual float SurfaceArea ( )
virtual

The surface area of the node in square world units.

Reimplemented in TriangleMeshNode, and GridNodeBase.

◆ UpdateRecursiveG()

virtual void UpdateRecursiveG ( Path  path,
PathNode  pathNode,
PathHandler  handler 
)
virtual

Member Data Documentation

◆ DestroyedNodeIndex

const int DestroyedNodeIndex = NodeIndexMask - 1
private

◆ flags

uint flags
protected

Bitpacked field holding several pieces of data.

See also
Walkable
Area
GraphIndex
Tag

◆ FlagsGraphMask

const uint FlagsGraphMask = (256u-1) << FlagsGraphOffset
private

Mask of graph index bits.

See also
GraphIndex

◆ FlagsGraphOffset

const int FlagsGraphOffset = 24
private

Start of graph index bits.

See also
GraphIndex

◆ FlagsHierarchicalIndexOffset

const int FlagsHierarchicalIndexOffset = 1
private

Start of hierarchical node index bits.

See also
HierarchicalNodeIndex

◆ FlagsTagMask

const uint FlagsTagMask = (32-1) << FlagsTagOffset
private

Mask of tag bits.

See also
Tag

◆ FlagsTagOffset

const int FlagsTagOffset = 19
private

Start of tag bits.

See also
Tag

◆ FlagsWalkableMask

const uint FlagsWalkableMask = 1 << FlagsWalkableOffset
private

Mask of the walkable bit.

See also
Walkable

◆ FlagsWalkableOffset

const int FlagsWalkableOffset = 0
private

Position of the walkable bit.

See also
Walkable

◆ HierarchicalDirtyMask

const uint HierarchicalDirtyMask = 1 << HierarchicalDirtyOffset
private

◆ HierarchicalDirtyOffset

const int HierarchicalDirtyOffset = 18
private

◆ HierarchicalIndexMask

const uint HierarchicalIndexMask = (131072-1) << FlagsHierarchicalIndexOffset
private

Mask of hierarchical node index bits.

See also
HierarchicalNodeIndex

◆ MaxGraphIndex

const uint MaxGraphIndex = FlagsGraphMask >> FlagsGraphOffset

Max number of graphs-1.

◆ MaxHierarchicalNodeIndex

const uint MaxHierarchicalNodeIndex = HierarchicalIndexMask >> FlagsHierarchicalIndexOffset

◆ nodeIndex

int nodeIndex
private

Internal unique index.

Also stores some bitpacked values such as TemporaryFlag1 and TemporaryFlag2.

◆ NodeIndexMask

const int NodeIndexMask = 0xFFFFFFF
private

◆ penalty

uint penalty
private

Penalty cost for walking on this node.

This can be used to make it harder/slower to walk over certain nodes.

A penalty of 1000 (Int3.Precision) corresponds to the cost of walking one world unit.

See also
Graph Updates during Runtime

◆ position

Int3 position

Position of the node in world space.

Note
The position is stored as an Int3, not a Vector3. You can convert an Int3 to a Vector3 using an explicit conversion.
var v3 = (Vector3)node.position;

◆ TemporaryFlag1Mask

const int TemporaryFlag1Mask = 0x10000000
private

◆ TemporaryFlag2Mask

const int TemporaryFlag2Mask = 0x20000000
private

Property Documentation

◆ Area

uint Area
get

Connected component that contains the node.

This is visualized in the scene view as differently colored nodes (if the graph coloring mode is set to 'Areas'). Each area represents a set of nodes such that there is no valid path between nodes of different colors.

See also
https://en.wikipedia.org/wiki/Connected_component_(graph_theory)
Pathfinding.HierarchicalGraph

◆ Destroyed

bool Destroyed
get

◆ Flags

uint Flags
getset

Holds various bitpacked variables.

Bit 0: Walkable Bits 1 through 17: HierarchicalNodeIndex Bit 18: IsHierarchicalNodeDirty Bits 19 through 23: Tag Bits 24 through 31: GraphIndex

Warning
You should pretty much never modify this property directly. Use the other properties instead.

◆ Graph

NavGraph Graph
get

Graph which this node belongs to.

If you know the node belongs to a particular graph type, you can cast it to that type:

GraphNode node = ...;
GridGraph graph = node.Graph as GridGraph;

Will return null if the node has been destroyed.

◆ GraphIndex

uint GraphIndex
getset

Graph which contains this node.

See also
Pathfinding.AstarData.graphs
Graph

◆ HierarchicalNodeIndex

int HierarchicalNodeIndex
getsetpackage

Hierarchical Node that contains this node.

The graph is divided into clusters of small hierarchical nodes in which there is a path from every node to every other node. This structure is used to speed up connected component calculations which is used to quickly determine if a node is reachable from another node.

See also
Pathfinding.HierarchicalGraph
Warning
This is an internal property and you should most likely not change it.

◆ IsHierarchicalNodeDirty

bool IsHierarchicalNodeDirty
getsetpackage

Some internal bookkeeping.

◆ NodeIndex

int NodeIndex
getset

Internal unique index.

Every node will get a unique index. This index is not necessarily correlated with e.g the position of the node in the graph.

◆ Penalty

uint Penalty
getset

Penalty cost for walking on this node.

This can be used to make it harder/slower to walk over certain nodes. A cost of 1000 (Int3.Precision) corresponds to the cost of moving 1 world unit.

See also
Graph Updates during Runtime

◆ Tag

uint Tag
getset

◆ TemporaryFlag1

bool TemporaryFlag1
getsetpackage

Temporary flag for internal purposes.

May only be used in the Unity thread. Must be reset to false after every use.

◆ TemporaryFlag2

bool TemporaryFlag2
getsetpackage

Temporary flag for internal purposes.

May only be used in the Unity thread. Must be reset to false after every use.

◆ Walkable

bool Walkable
getset

True if the node is traversable.

See also
Graph Updates during Runtime

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