# PathFollower:Compute

boolean PathFollower:Compute( NextBot bot, Vector goal, function generator = nil )

# Description

Compute shortest path from bot to 'goal' via A* algorithm.

# Arguments

1 NextBot bot
The nextbot we're generating for. This can also be a nextbot player (player.CreateNextbot).
2 Vector goal
The target location, the goal.
3 function generator = nil
A function that allows you to alter the path generation. See example below for the default function.
Function argument(s):
1 CNavArea area - The area to move to.
2 CNavArea fromArea - The area to move from.
4 Entity elevator - Will probably be always NULL
5 number length - Precomputed length between `area` and `fromArea`.
Function return value(s):
1 number cost - The cost of movement between `area` and `fromArea`.

# Returns

1 boolean
• If returns true, path was found to the goal position.
• If returns false, path may either be invalid (use IsValid() to check), or valid but doesn't reach all the way to the goal.

## Example

The default path generator. You do not have to provide the `PathFollower.Compute` any generator functions if you want to use the default generator.

path:Compute( self, pos, function( area, fromArea, ladder, elevator, length ) if ( !IsValid( fromArea ) ) then -- first area in path, no cost return 0 else if ( !self.loco:IsAreaTraversable( area ) ) then -- our locomotor says we can't move here return -1 end -- compute distance traveled along path so far local dist = 0 if ( IsValid( ladder ) ) then dist = ladder:GetLength() elseif ( length > 0 ) then -- optimization to avoid recomputing length dist = length else dist = ( area:GetCenter() - fromArea:GetCenter() ):GetLength() end local cost = dist + fromArea:GetCostSoFar() -- check height change local deltaZ = fromArea:ComputeAdjacentConnectionHeightChange( area ) if ( deltaZ >= self.loco:GetStepHeight() ) then if ( deltaZ >= self.loco:GetMaxJumpHeight() ) then -- too high to reach return -1 end -- jumping is slower than flat ground local jumpPenalty = 5 cost = cost + jumpPenalty * dist elseif ( deltaZ < -self.loco:GetDeathDropHeight() ) then -- too far to drop return -1 end return cost end end )