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

Describes a single node for the LayerGridGraph. More...

Detailed Description

Describes a single node for the LayerGridGraph.

Works almost the same as a grid node, except that it also stores to which layer the connections go to

Public Member Functions

 LevelGridNode (AstarPath astar)
 
override void ClearConnections (bool alsoReverse)
 Remove all connections from this node.
 
override void DeserializeNode (GraphSerializationContext ctx)
 
override void FloodFill (Stack< GraphNode > stack, uint region)
 
bool GetConnection (int i)
 Is there a grid connection in that direction.
 
override void GetConnections (System.Action< GraphNode > del)
 Calls the delegate with all connections from this node.
 
int GetConnectionValue (int dir)
 Which layer a grid connection goes to.
 
override int GetGizmoHashCode ()
 Hash code used for checking if the gizmos need to be updated.
 
override GridNodeBase GetNeighbourAlongDirection (int direction)
 Adjacent grid node in the specified direction.
 
override bool GetPortal (GraphNode other, List< Vector3 > left, List< Vector3 > right, bool backwards)
 Add a portal from this node to the specified node.
 
bool HasAnyGridConnections ()
 Does this node have any grid connections.
 
override void Open (Path path, PathNode pathNode, PathHandler handler)
 Open the node.
 
void ResetAllGridConnections ()
 Removes all grid connections from this node.
 
override void SerializeNode (GraphSerializationContext ctx)
 
void SetConnectionValue (int dir, int value)
 Set which layer a grid connection goes to.
 
void SetPosition (Int3 position)
 
override void UpdateRecursiveG (Path path, PathNode pathNode, PathHandler handler)
 
- Public Member Functions inherited from GridNodeBase
override void AddConnection (GraphNode node, uint cost)
 Add a connection from this node to the specified node.
 
override void ClearConnections (bool alsoReverse)
 Remove all connections from this node.
 
override bool ContainsConnection (GraphNode node)
 Checks if this node has a connection to the specified node.
 
override void DeserializeReferences (GraphSerializationContext ctx)
 Used to deserialize references to other nodes e.g connections.
 
override void FloodFill (System.Collections.Generic.Stack< GraphNode > stack, uint region)
 
override void GetConnections (System.Action< GraphNode > del)
 Calls the delegate with all connections from this node.
 
override int GetGizmoHashCode ()
 Hash code used for checking if the gizmos need to be updated.
 
override void Open (Path path, PathNode pathNode, PathHandler handler)
 Open the node.
 
override Vector3 RandomPointOnSurface ()
 A random point on the surface of the node.
 
override void RemoveConnection (GraphNode node)
 Removes any connection from this node to the specified node.
 
override void SerializeReferences (GraphSerializationContext ctx)
 Used to serialize references to other nodes e.g connections.
 
override float SurfaceArea ()
 The surface area of the node in square world units.
 
override void UpdateRecursiveG (Path path, PathNode pathNode, PathHandler handler)
 
- Public Member Functions inherited from GraphNode
virtual void RecalculateConnectionCosts ()
 Recalculates all connection costs from this node.
 
void UpdateG (Path path, PathNode pathNode)
 

Static Public Member Functions

static LayerGridGraph GetGridGraph (uint graphIndex)
 
static void SetGridGraph (int graphIndex, LayerGridGraph graph)
 

Public Attributes

const int ConnectionMask = 0xFF
 
ulong gridConnections
 
const int MaxLayerCount = ConnectionMask
 
const int NoConnection = 0xFF
 
- Public Attributes inherited from GridNodeBase
Connection[] connections
 
- Public Attributes inherited from GraphNode
const uint MaxAreaIndex = FlagsAreaMask >> FlagsAreaOffset
 
const uint MaxGraphIndex = FlagsGraphMask >> FlagsGraphOffset
 Max number of graphs-1.
 
Int3 position
 Position of the node in world space.
 

Static Protected Attributes

static LayerGridGraph[] gridGraphs
 

Properties

override bool HasConnectionsToAllEightNeighbours [get]
 
int LayerCoordinateInGrid [get, set]
 Layer coordinate of the node in the grid.
 
- Properties inherited from GridNodeBase
abstract bool HasConnectionsToAllEightNeighbours [get]
 True if the node has grid connections to all its 8 neighbours.
 
int NodeInGridIndex [get, set]
 The index of the node in the grid.
 
bool TmpWalkable [get, set]
 Temporary variable used internally when updating the graph.
 
bool WalkableErosion [get, set]
 Stores walkability before erosion is applied.
 
int XCoordinateInGrid [get]
 X coordinate of the node in the grid.
 
int ZCoordinateInGrid [get]
 Z coordinate of the node in the grid.
 
- Properties inherited from GraphNode
uint Area [get, set]
 
bool Destroyed [get]
 
uint Flags [get, set]
 Holds various bitpacked variables.
 
uint GraphIndex [get, set]
 
int NodeIndex [get]
 Internal unique index.
 
uint Penalty [get, set]
 Penalty cost for walking on this node.
 
uint Tag [get, set]
 
bool Walkable [get, set]
 True if the node is traversable.
 

Private Attributes

const int ConnectionStride = 8
 

Static Private Attributes

static LayerGridGraph[] _gridGraphs = new LayerGridGraph[0]
 
static System.Version V3_9_0 = new System.Version(3, 9, 0)
 

Additional Inherited Members

- Protected Member Functions inherited from GridNodeBase
 GridNodeBase (AstarPath astar)
 
- Protected Attributes inherited from GridNodeBase
ushort gridFlags
 
int nodeInGridIndex
 Bitfield containing the x and z coordinates of the node as well as the layer (for layered grid graphs).
 
const int NodeInGridIndexLayerOffset = 24
 
const int NodeInGridIndexMask = 0xFFFFFF
 
- Package Functions inherited from GraphNode
void Destroy ()
 Destroys the node.
 

Constructor & Destructor Documentation

Member Function Documentation

override void ClearConnections ( bool  alsoReverse)
virtual

Remove all connections from this node.

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

Implements GraphNode.

override void DeserializeNode ( GraphSerializationContext  ctx)
virtual

Reimplemented from GraphNode.

override void FloodFill ( Stack< GraphNode stack,
uint  region 
)
virtual

Reimplemented from GraphNode.

bool GetConnection ( int  i)

Is there a grid connection in that direction.

override void GetConnections ( System.Action< GraphNode del)
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

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

Implements GraphNode.

int GetConnectionValue ( int  dir)

Which layer a grid connection goes to.

Parameters
dirDirection for the connection.
Returns
The layer of the connected node or NoConnection if there is no connection in that direction.
override 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 from GraphNode.

static LayerGridGraph GetGridGraph ( uint  graphIndex)
static
override GridNodeBase GetNeighbourAlongDirection ( int  direction)
virtual

Adjacent grid node in the specified direction.

This will return null if the node does not have a connection to a node in that direction.

The dir parameter corresponds to directions in the grid as:

Z
|
|
6 2 5
\ | /
-- 3 - X - 1 ----- X
/ | \
7 0 4
|
|
See Also
GetConnections

Implements GridNodeBase.

override 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 from GraphNode.

bool HasAnyGridConnections ( )

Does this node have any grid connections.

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

Open the node.

Implements GraphNode.

void ResetAllGridConnections ( )

Removes all grid connections from this node.

override void SerializeNode ( GraphSerializationContext  ctx)
virtual

Reimplemented from GraphNode.

void SetConnectionValue ( int  dir,
int  value 
)

Set which layer a grid connection goes to.

Parameters
dirDirection for the connection.
valueThe layer of the connected node or NoConnection if there should be no connection in that direction.
static void SetGridGraph ( int  graphIndex,
LayerGridGraph  graph 
)
static
void SetPosition ( Int3  position)
override void UpdateRecursiveG ( Path  path,
PathNode  pathNode,
PathHandler  handler 
)
virtual

Reimplemented from GraphNode.

Member Data Documentation

LayerGridGraph [] _gridGraphs = new LayerGridGraph[0]
staticprivate
const int ConnectionMask = 0xFF
const int ConnectionStride = 8
private
ulong gridConnections
LayerGridGraph [] gridGraphs
staticprotected
const int MaxLayerCount = ConnectionMask
const int NoConnection = 0xFF
System.Version V3_9_0 = new System.Version(3, 9, 0)
staticprivate

Property Documentation

override bool HasConnectionsToAllEightNeighbours
get
int LayerCoordinateInGrid
getset

Layer coordinate of the node in the grid.

If there are multiple nodes in the same (x,z) cell, then they will be stored in different layers. Together with NodeInGridIndex, you can look up the node in the nodes array

int index = node.NodeInGridIndex + node.LayerCoordinateInGrid * graph.width * graph.depth;
Assert(node == graph.nodes[index]);
See Also
XCoordInGrid
ZCoordInGrid
NodeInGridIndex

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