# PathFollower/Compute

PathFollower:Compute( )

# Description

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

# Arguments

NextBot from

The nextbot we're generating for

Vector to

To point

# Arguments

function generator=nil

A funtion that allows you to alter the path generation. See example below for the default function.

# Returns

• 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.

# Examples

## 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
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 )```