A* Pathfinding Project  3.8 The A* Pathfinding Project for Unity 3D
EuclideanEmbedding Class Reference

Implements heuristic optimizations. More...

## Detailed Description

Implements heuristic optimizations.

heuristic-opt
Game AI Pro - Pathfinding Architecture Optimizations by Steve Rabin and Nathan R. Sturtevant
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

## Public Member Functions

uint GetHeuristic (int nodeIndex1, int nodeIndex2)

void OnDrawGizmos ()

void RecalculateCosts ()

void RecalculatePivots ()

## Public Attributes

bool dirty

HeuristicOptimizationMode mode

Transform pivotPointRoot
All children of this transform will be used as pivot points.

int seed

int spreadOutCount = 1

## Private Member Functions

void ApplyGridGraphEndpointSpecialCase ()
Special case necessary for paths to unwalkable nodes right next to walkable nodes to be able to use good heuristics.

void EnsureCapacity (int index)

void GetClosestWalkableNodesToChildrenRecursively (Transform tr, List< GraphNode > nodes)

uint GetRandom ()
Simple linear congruential generator.

GraphNode PickAnyWalkableNode ()

void PickNRandomNodes (int count, List< GraphNode > buffer)
Pick N random walkable nodes from all nodes in all graphs and add them to the buffer.

## Private Attributes

uint[] costs = new uint[8]
Costs laid out as n*[int],n*[int],n*[int] where n is the number of pivot points.

System.Object lockObj = new object()

int maxNodeIndex

int pivotCount

GraphNode[] pivots

const uint ra = 12820163

const uint rc = 1140671485

uint rval

## Member Function Documentation

 void ApplyGridGraphEndpointSpecialCase ( )
private

Special case necessary for paths to unwalkable nodes right next to walkable nodes to be able to use good heuristics.

This will find all unwalkable nodes in all grid graphs with walkable nodes as neighbours and set the cost to reach them from each of the pivots as the minimum of the cost to reach the neighbours of each node.

ABPath.EndPointGridGraphSpecialCase
 void EnsureCapacity ( int index )
private
 void GetClosestWalkableNodesToChildrenRecursively ( Transform tr, List< GraphNode > nodes )
private
 uint GetHeuristic ( int nodeIndex1, int nodeIndex2 )
 uint GetRandom ( )
private

Simple linear congruential generator.

http://en.wikipedia.org/wiki/Linear_congruential_generator
 void OnDrawGizmos ( )
 GraphNode PickAnyWalkableNode ( )
private
 void PickNRandomNodes ( int count, List< GraphNode > buffer )
private

Pick N random walkable nodes from all nodes in all graphs and add them to the buffer.

Here we select N random nodes from a stream of nodes. Probability of choosing the first N nodes is 1 Probability of choosing node i is min(N/i,1) A selected node will replace a random node of the previously selected ones.

https://en.wikipedia.org/wiki/Reservoir_sampling
 void RecalculateCosts ( )
 void RecalculatePivots ( )

## Member Data Documentation

 uint [] costs = new uint[8]
private

Costs laid out as n*[int],n*[int],n*[int] where n is the number of pivot points.

Each node has n integers which is the cost from that node to the pivot node. They are at around the same place in the array for simplicity and for cache locality.

cost(nodeIndex, pivotIndex) = costs[nodeIndex*pivotCount+pivotIndex]

 bool dirty
 System.Object lockObj = new object()
private
 int maxNodeIndex
private
 int pivotCount
private
 Transform pivotPointRoot

All children of this transform will be used as pivot points.

 GraphNode [] pivots
private
 const uint ra = 12820163
private
 const uint rc = 1140671485
private
 uint rval
private
 int seed
 int spreadOutCount = 1

The documentation for this class was generated from the following file:
• /Users/arong/Unity/a-pathfinding-project/Assets/AstarPathfindingProject/Generators/Utilities/EuclideanEmbedding.cs