Revision Difference
PathFollower:Compute#510774
<function name="Compute" parent="PathFollower" type="classfunc">⤶
<description>Compute shortest path from bot to 'goal' via A* algorithm.</description>⤶
<realm>Server</realm>⤶
<args>⤶
<arg name="from" type="NextBot">The nextbot we're generating for</arg>⤶
<arg name="to" type="Vector">To point</arg>⤶
<arg name="generator" type="function" default="nil">A funtion that allows you to alter the path generation. See example below for the default function.</arg>⤶
</args>⤶
<rets>⤶
<ret name="" type="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.</ret>⤶
</rets>⤶
</function>⤶
⤶
<example>⤶
<description>The default path generator. You **do not have** to provide the PathFollower.Compute any generator functions if you want to use the default generator.</description>⤶
<code>⤶
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 &gt; 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 &gt;= self.loco:GetStepHeight() ) then⤶
if ( deltaZ &gt;= 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 &lt; -self.loco:GetDeathDropHeight() ) then⤶
// too far to drop⤶
return -1⤶
end⤶
⤶
return cost⤶
end⤶
end )⤶
</code>⤶
⤶
</example>