SuperTuxKart
|
A base class for AI that use navmesh to work. More...
#include <arena_ai.hpp>
Public Member Functions | |
ArenaAI (AbstractKart *kart) | |
virtual void | update (int ticks) OVERRIDE |
This is the main entry point for the AI. | |
virtual void | reset () OVERRIDE |
Resets the AI when a race is restarted. | |
virtual void | newLap (int lap) OVERRIDE |
Callback whenever a new lap is triggered. | |
![]() | |
AIBaseController (AbstractKart *kart) | |
virtual void | reset () OVERRIDE |
virtual bool | disableSlipstreamBonus () const OVERRIDE |
Certain AI levels will not receive a slipstream bonus in order to be not as hard. | |
virtual void | crashed (const Material *m) OVERRIDE |
This is called when the kart crashed with the terrain. | |
virtual void | crashed (const AbstractKart *k) OVERRIDE |
virtual void | handleZipper (bool play_sound) OVERRIDE |
virtual void | finishedRace (float time) OVERRIDE |
Called whan this controller's kart finishes the last lap. | |
virtual void | collectedItem (const ItemState &item, float previous_energy=0) OVERRIDE |
virtual void | setPosition (int p) OVERRIDE |
virtual bool | isPlayerController () const OVERRIDE |
This function checks if this player is not an AI, i.e. | |
virtual bool | isLocalPlayerController () const OVERRIDE |
This function checks if this is a local player. | |
virtual bool | action (PlayerAction action, int value, bool dry_run=false) OVERRIDE |
Default: ignore actions. | |
virtual void | skidBonusTriggered () OVERRIDE |
virtual bool | saveState (BareNetworkString *buffer) const OVERRIDE |
virtual void | rewindTo (BareNetworkString *buffer) OVERRIDE |
void | setNetworkAI (bool val) |
virtual void | update (int ticks) OVERRIDE |
![]() | |
Controller (AbstractKart *kart) | |
Constructor, saves the kart pointer and a pointer to the KartControl of the kart. | |
virtual void | reset ()=0 |
virtual void | update (int ticks)=0 |
virtual void | handleZipper (bool play_sound)=0 |
virtual void | collectedItem (const ItemState &item, float previous_energy=0)=0 |
virtual void | crashed (const AbstractKart *k)=0 |
virtual void | crashed (const Material *m)=0 |
virtual void | setPosition (int p)=0 |
virtual bool | isLocalPlayerController () const =0 |
This function checks if this is a local player. | |
virtual bool | isPlayerController () const =0 |
This function checks if this player is not an AI, i.e. | |
virtual bool | disableSlipstreamBonus () const =0 |
virtual bool | saveState (BareNetworkString *buffer) const =0 |
virtual void | rewindTo (BareNetworkString *buffer)=0 |
virtual void | rumble (float strength_low, float strength_high, uint16_t duration) |
virtual void | setControllerName (const std::string &name) |
Sets the controller name for this controller. | |
const std::string & | getControllerName () const |
Returns the name of this controller. | |
virtual bool | action (PlayerAction action, int value, bool dry_run=false)=0 |
Default: ignore actions. | |
virtual void | newLap (int lap)=0 |
Callback whenever a new lap is triggered. | |
virtual void | skidBonusTriggered ()=0 |
virtual void | finishedRace (float time)=0 |
Called whan this controller's kart finishes the last lap. | |
virtual KartControl * | getControls () |
Get a pointer on the kart controls. | |
void | setControls (KartControl *kc) |
virtual bool | canGetAchievements () const |
Only local players can get achievements. | |
virtual core::stringw | getName (bool include_handicap_string=true) const |
Display name of the controller. | |
AbstractKart * | getKart () const |
Returns the kart controlled by this controller. | |
Protected Member Functions | |
void | tryCollectItem (Vec3 *aim_point, int *target_node) const |
Try to collect item in arena, if no suitable item is found, like they are swapped, it will follow closest kart instead. | |
virtual void | findClosestKart (bool consider_difficulty, bool find_sta)=0 |
Find the closest kart around this AI, implemented by sub-class. | |
![]() | |
void | setControllerName (const std::string &name) OVERRIDE |
In debug mode when the user specified –ai-debug on the command line set the name of the controller as on-screen text, so that the different AI controllers can be distinguished. | |
float | steerToPoint (const Vec3 &point) |
Computes the steering angle to reach a certain point. | |
float | normalizeAngle (float angle) |
Normalises an angle to be between -pi and _ pi. | |
bool | isStuck () const |
This can be called to detect if the kart is stuck (i.e. | |
void | determineTurnRadius (const Vec3 &end, Vec3 *center, float *radius) const |
Determine the center point and radius of a circle given two points on the circle and the tangent at the first point. | |
virtual void | setSteering (float angle, float dt) |
Converts the steering angle to a lr steering in the range of -1 to 1. | |
virtual bool | canSkid (float steer_fraction)=0 |
Return true if AI can skid now. | |
Protected Attributes | |
ItemManager * | m_item_manager |
ArenaGraph * | m_graph |
Pointer to the ArenaGraph. | |
AbstractKart * | m_closest_kart |
Pointer to the closest kart around this kart. | |
int | m_closest_kart_node |
The ArenaNode at which the closest kart located on. | |
Vec3 | m_closest_kart_point |
The closest kart location. | |
RaceManager::Difficulty | m_cur_difficulty |
Holds the current difficulty. | |
irr::scene::ISceneNode * | m_debug_sphere |
For debugging purpose: a sphere indicating where the AI is targeting at. | |
irr::scene::ISceneNode * | m_debug_sphere_next |
For debugging purpose: a sphere indicating where the first turning corner is located. | |
int | m_target_node |
The ArenaNode at which the target point located on. | |
Vec3 | m_target_point |
The coordinates of target point. | |
bool | m_mini_skid |
True if AI can skid, currently only do when close to target, see doSkiddingTest(). | |
![]() | |
bool | m_enabled_network_ai |
float | m_kart_length |
Length of the kart, storing it here saves many function calls. | |
float | m_kart_width |
Cache width of kart. | |
Track * | m_track |
Keep a pointer to the track to reduce calls. | |
const AIProperties * | m_ai_properties |
A pointer to the AI properties for this kart. | |
![]() | |
AbstractKart * | m_kart |
Pointer to the kart that is controlled by this controller. | |
KartControl * | m_controls |
A pointer to the main controller, from which the kart takes it commands. | |
std::string | m_controller_name |
The name of the controller, mainly used for debugging purposes. | |
Private Member Functions | |
void | configSpeed () |
Configure a suitable speed depends on current turn radius. | |
void | configSteering () |
This function config the steering (m_steering_angle) of AI. | |
void | checkIfStuck (const float dt) |
Determine whether AI is stuck, by checking if it stays on the same node for a long period of time (see m_on_node), or isStuck() is true. | |
void | determinePath (int forward, std::vector< int > *path) |
Determine if the path to target needs to be changed to avoid bad items, it will also set the turn radius based on the new path if necessary. | |
void | doSkiddingTest () |
Determine if AI should skid: When it's close to target, but not straight ahead, in front of it, same steering side and with suitable difficulties which are in expert and supertux only. | |
void | doUTurn (const float dt) |
Make AI reverse so that it faces in front of the last target point. | |
bool | gettingUnstuck (int ticks) |
Function to let AI get unstuck. | |
bool | updateAimingPosition (Vec3 *target_point) |
Update aiming position, use path finding if necessary. | |
void | useItems (const float dt) |
Determine how AI should use its item, different m_cur_difficulty will have a corresponding strategy. | |
virtual bool | canSkid (float steer_fraction) OVERRIDE |
Return true if AI can skid now. | |
virtual void | findTarget ()=0 |
Find a suitable target for this frame, implemented by sub-class. | |
virtual bool | forceBraking () |
If true, AI will always try to brake for this frame. | |
virtual int | getCurrentNode () const =0 |
Return the current ArenaNode the AI located on. | |
virtual float | getKartDistance (const AbstractKart *kart) const =0 |
Return the distance based on graph distance matrix to any kart. | |
virtual bool | ignorePathFinding () |
If true, AI will drive directly to target without path finding. | |
virtual bool | isWaiting () const =0 |
If true, AI will stop moving. | |
virtual bool | isKartOnRoad () const =0 |
If true, AI stays on the ArenaNode correctly, otherwise RescueAnimation will be done after sometime. | |
virtual void | resetAfterStop () |
Overridden if any action is needed to be done when AI stopped moving or changed driving direction. | |
Private Attributes | |
Vec3 | m_target_point_lc |
Local coordinates of current target point. | |
Vec3 | m_reverse_point |
Save the last target point before reversing, so AI will end reversing until facing in front of it. | |
bool | m_is_stuck |
Indicates that the kart is currently stuck, and m_ticks_since_reversing is counting down. | |
bool | m_is_uturn |
Indicates that the kart need a uturn to reach a node behind, and m_time_since_uturn is counting down. | |
std::set< int > | m_on_node |
Holds the unique node ai has driven through, useful to tell if AI is stuck by determine the size of this set. | |
float | m_time_since_last_shot |
Time an item has been collected and not used. | |
float | m_ticks_since_reversing |
This is a timer that counts down when the kart is reversing to get unstuck. | |
float | m_time_since_driving |
This is a timer that counts down when the kart is starting to drive. | |
float | m_time_since_uturn |
This is a timer that counts down when the kart is doing u-turn. | |
int | m_ticks_since_off_road |
This is a timer that counts when the kart start going off road. | |
float | m_turn_radius |
Used to determine braking and nitro usage. | |
float | m_steering_angle |
Used to determine if skidding can be done. | |
Vec3 | m_current_forward_point |
The point in front of the AI which distance is m_kart_length, used to compensate the time difference between steering when finding next node. | |
int | m_current_forward_node |
The ArenaNode at which the forward point located on. | |
Additional Inherited Members | |
![]() | |
static void | enableDebug () |
static void | setTestAI (int n) |
static int | getTestAI () |
![]() | |
static bool | m_ai_debug = false |
static int | m_test_ai = 0 |
Stores the '–test-ai=n' command line parameter: It indicates which fraction of the AIs are going to be the test AI: 1 means only to use the TestAI, 2 means every second AI will be test etc. | |
A base class for AI that use navmesh to work.
|
inlineprivatevirtual |
|
private |
|
private |
Determine if the path to target needs to be changed to avoid bad items, it will also set the turn radius based on the new path if necessary.
forward | Forward node of current AI position. | |
[in,out] | path | Default path to follow, will be changed if needed. |
|
protectedpure virtual |
Find the closest kart around this AI, implemented by sub-class.
consider_difficulty | If take current difficulty into account. |
find_sta | If find SpareTireAI only. |
|
privatepure virtual |
Find a suitable target for this frame, implemented by sub-class.
Implemented in BattleAI, SoccerAI, and SpareTireAI.
|
inlineprivatevirtual |
If true, AI will always try to brake for this frame.
Reimplemented in SoccerAI.
|
privatepure virtual |
|
privatepure virtual |
Return the distance based on graph distance matrix to any kart.
kart | AbstractKart to check. |
|
private |
Function to let AI get unstuck.
dt | Time step size. |
|
inlineprivatevirtual |
If true, AI will drive directly to target without path finding.
Reimplemented in SoccerAI.
|
privatepure virtual |
If true, AI stays on the ArenaNode correctly, otherwise RescueAnimation will be done after sometime.
|
privatepure virtual |
|
inlinevirtual |
Callback whenever a new lap is triggered.
Used by the AI to trigger a recomputation of the way to use.
Implements Controller.
|
virtual |
Resets the AI when a race is restarted.
Reimplemented from AIBaseController.
Reimplemented in SoccerAI, and SpareTireAI.
|
inlineprivatevirtual |
Overridden if any action is needed to be done when AI stopped moving or changed driving direction.
Reimplemented in SoccerAI.
|
protected |
Try to collect item in arena, if no suitable item is found, like they are swapped, it will follow closest kart instead.
[out] | aim_point | Location of item. |
[out] | target_node | The node which item lied on. |
|
virtual |
This is the main entry point for the AI.
It is called once per frame for each AI and determines the behaviour of the AI, e.g. steering, accelerating/braking, firing.
ticks | Number of physics time steps - should be 1. |
Reimplemented from AIBaseController.
Reimplemented in SoccerAI, and SpareTireAI.
|
private |
Update aiming position, use path finding if necessary.
[out] | target_point | Suitable target point. |
|
private |
Determine how AI should use its item, different m_cur_difficulty will have a corresponding strategy.
dt | Time step size. |