PathFollower/Compute

From Garry's Mod
Jump to: navigation, search
 PathFollower:Compute( )

Contents

Description

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

Arguments

NextBot from

The nextbot we're generating for

Arguments

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

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.

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


Personal tools
Navigation