Jump to content

Additional control over NavAgent


St0neD0es
 Share

Recommended Posts

There are some members of the NavAgent class that are useful but protected such as m_velocity would be ideal to have exposed by public function along with destination member.

Also the ability to control the rate of which an agent must rotate before fully accelerating should be controllable. A larger value would give the object a larger turning circle, wheras a lower value or 0 would indicate that no actual rotation is required, but instead the model immediately faces the direction of the new destination and starts accelerating.

If I can think of anything else I'll let you know but thats all for now :) Thanks

  • Like 1
Link to comment
Share on other sites

The parameters for nav agents can use are defined in DetourCrowd.h:

/// Configuration parameters for a crowd agent.
/// @ingroup crowd
struct dtCrowdAgentParams
{
	float radius;						///< Agent radius. [Limit: >= 0]
	float height;						///< Agent height. [Limit: > 0]
	float maxAcceleration;				///< Maximum allowed acceleration. [Limit: >= 0]
	float maxSpeed;						///< Maximum allowed speed. [Limit: >= 0]

	/// Defines how close a collision element must be before it is considered for steering behaviors. [Limits: > 0]
	float collisionQueryRange;

	float pathOptimizationRange;		///< The path visibility optimization range. [Limit: > 0]

	/// How aggresive the agent manager should be at avoiding collisions with this agent. [Limit: >= 0]
	float separationWeight;

	/// Flags that impact steering behavior. (See: #UpdateFlags)
	unsigned char updateFlags;

	/// The index of the avoidance configuration to use for the agent. 
	/// [Limits: 0 <= value <= #DT_CROWD_MAX_OBSTAVOIDANCE_PARAMS]
	unsigned char obstacleAvoidanceType;	

	/// The index of the query filter used by this agent.
	unsigned char queryFilterType;

	/// User defined data attached to the agent.
	void* userData;
};

I don't think Detour actually has any concept of rotation. I think adjusting max acceleration is the only way to make a larger turning radius. My system just rotates thing in the direction they were last moving, with a smooth blend/transition between angles so they don't jitter.

My job is to make tools you love, with the features you want, and performance you can't live without.

Link to comment
Share on other sites

Here are the obstacle avoidance parameters. I don't know what any of these do, I just use the default values:

struct dtObstacleAvoidanceParams
{
	float velBias;
	float weightDesVel;
	float weightCurVel;
	float weightSide;
	float weightToi;
	float horizTime;
	unsigned char gridSize;	///< grid
	unsigned char adaptiveDivs;	///< adaptive
	unsigned char adaptiveRings;	///< adaptive
	unsigned char adaptiveDepth;	///< adaptive
};

 

My job is to make tools you love, with the features you want, and performance you can't live without.

Link to comment
Share on other sites

And I guess these are the update flags, although I have never used them:

/// Crowd agent update flags.
/// @ingroup crowd
/// @see dtCrowdAgentParams::updateFlags
enum UpdateFlags
{
	DT_CROWD_ANTICIPATE_TURNS = 1,
	DT_CROWD_OBSTACLE_AVOIDANCE = 2,
	DT_CROWD_SEPARATION = 4,
	DT_CROWD_OPTIMIZE_VIS = 8,			///< Use #dtPathCorridor::optimizePathVisibility() to optimize the agent path.
	DT_CROWD_OPTIMIZE_TOPO = 16,		///< Use dtPathCorridor::optimizePathTopology() to optimize the agent path.
};

 

My job is to make tools you love, with the features you want, and performance you can't live without.

Link to comment
Share on other sites

Okay thank you for posting all this, I'll take a look into this and get back to you when I can. I'll be looking more to fine tune movement a bit later I guess, for now I'm trying to get the basics of each aspect of my framework down :)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...