Garry's Mod Wiki

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&#x27;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 &amp;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 &amp;gt;= self.loco:GetStepHeight() ) then⤶ if ( deltaZ &amp;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 &amp;lt; -self.loco:GetDeathDropHeight() ) then⤶ // too far to drop⤶ return -1⤶ end⤶ ⤶ return cost⤶ end⤶ end )⤶ </code>⤶ ⤶ </example>