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