Steering Behaviors

These AI behaviors control the basic motion of NPC objects in a game and make it look realistic.

PandAI is inbuilt with handling the functionality of the seven following basic steering behaviors :

Seek

Flee

Pursue

Evade

Arrival

Wander

Flock

Obstacle Avoidance

Path Follow

Before you start exploring these various behaviors, let me give you a brief introduction on how it is setup and what you need to begin :

All the Steering Behaviors are part of the Behavior class of any AI Character. Hence, to use them you need to get a reference to it via ‘getAiBehaviors()’ function of the AICharacter class.

Once you get this reference, you can use it to call any steering behavior.

aiBehaviors = aiCharacter.getAiBehaviors();
aiBehaviors.seek(targetNodePath);
  • Once you have read this page, you can proceed to explore the individual pages for each AI Behavior for details and even an example demo for each one working.


PRIORITIES :

Every steering behavior can also take a second parameter which is priority. This ranges from 0 to 1 and it defines the behaviors intensity when combined with other behaviors.

aiBehaviors.seek(targetNodePath_1, 0.5);
aiBehaviors.flee(targetNodePath_2, 0.5);

This will cause the AICharacter’s resultant force to be an equal balance of seeking ‘targetNodePath_1’ and fleeing ‘targetNodePath_2’.


HELPER FUNCTIONS :

(For beginners -> Come back to these when you need this functionality)

For the AIWorld class:

void addAiChar(AICharacter aiChar);

void removeAiChar(string name);

void addFlock(Flock *flock);

void flockOff(int ID);

void flockOn(int ID);

Flock getFlock(int ID);

For the AICharacter class:

double getMass();

void setMass(double m);

LVecBase3 getVelocity();

double getMaxForce();

void setMaxForce(double max_force);

NodePath getNodePath();

void setNodePath(NodePath np);

For the AIBehaviors class:

aiBehaviors.behaviorStatus(string AIName)

This function returns the status of an AI Behavior whether it is active, paused, done or disabled. Returns -1 if an invalid string is passed.

  • Note for pathfinding status, use pathfollow as the string name, since pathfinding is a subset of pathfollow.

To remove any AI after their call has been instantiated.

void removeAi(string "AIName");
  • Note for pathfinding removal, use pathfollow as the string name, since pathfinding is a subset of pathfollow.

To pause or resume any AI after their call has been instantiated.

void pauseAi(string "AIName");

void resumeAi(string "AIName");

where AIName refers to:

“all” - removes all the Ai’s

“seek” - removes seek

“flee” - removes flee

“pursue” - removes arrival

“evade” - removes pursuit

“arrival” - removes evade

“wander” - removes wander

“flock” - removes flock

“obstacle_avoidance” - removes obstacle_avoidance

“pathfollow” - removes pathfollow