Add mini-skid for BattleAI when attacking targets
This commit is contained in:
parent
df9dc5ff34
commit
2bc9362ac6
@ -66,7 +66,7 @@ protected:
|
||||
float normalizeAngle(float angle);
|
||||
virtual void update (float delta) ;
|
||||
virtual void setSteering (float angle, float dt);
|
||||
virtual bool canSkid(float steer_fraction) { return false; }
|
||||
virtual bool canSkid(float steer_fraction) = 0;
|
||||
// ------------------------------------------------------------------------
|
||||
/** This can be called to detect if the kart is stuck (i.e. repeatedly
|
||||
* hitting part of the track). */
|
||||
|
@ -75,6 +75,7 @@ void BattleAI::reset()
|
||||
//-----------------------------------------------------------------------------
|
||||
void BattleAI::update(float dt)
|
||||
{
|
||||
m_mini_skid = false;
|
||||
ArenaAI::update(dt);
|
||||
} // update
|
||||
|
||||
@ -129,6 +130,16 @@ void BattleAI::findClosestKart(bool use_difficulty)
|
||||
{
|
||||
m_closest_kart = m_world->getKart(closest_kart_num);
|
||||
checkPosition(m_closest_kart_point, &m_closest_kart_pos_data);
|
||||
|
||||
// Do a mini-skid to closest kart only when firing target,
|
||||
// not straight ahead, not too far, in front of it
|
||||
// and with suitable difficulties.
|
||||
if (m_closest_kart_pos_data.angle > 0.2f &&
|
||||
m_closest_kart_pos_data.distance < 20.f &&
|
||||
!m_closest_kart_pos_data.behind &&
|
||||
(m_cur_difficulty == RaceManager::DIFFICULTY_HARD ||
|
||||
m_cur_difficulty == RaceManager::DIFFICULTY_BEST))
|
||||
m_mini_skid = true;
|
||||
}
|
||||
} // findClosestKart
|
||||
|
||||
|
@ -36,10 +36,13 @@ private:
|
||||
/** Keep a pointer to world. */
|
||||
ThreeStrikesBattle *m_world;
|
||||
|
||||
bool m_mini_skid;
|
||||
|
||||
virtual void findClosestKart(bool use_difficulty);
|
||||
virtual void findTarget();
|
||||
virtual int getCurrentNode() const;
|
||||
virtual bool isWaiting() const;
|
||||
virtual bool canSkid(float steer_fraction) { return m_mini_skid; }
|
||||
public:
|
||||
BattleAI(AbstractKart *kart,
|
||||
StateManager::ActivePlayer *player = NULL);
|
||||
|
@ -74,23 +74,24 @@ private:
|
||||
*that can be done, and end up setting their respective m_controls
|
||||
*variable.
|
||||
*/
|
||||
void handleSteering(float dt);
|
||||
void handleRescue(const float DELTA);
|
||||
void handleSteering(float dt);
|
||||
void handleRescue(const float DELTA);
|
||||
|
||||
void checkCrashes(const int STEPS, const Vec3& pos);
|
||||
void findNonCrashingPoint(Vec3 *result);
|
||||
int calcSteps();
|
||||
void checkCrashes(const int STEPS, const Vec3& pos);
|
||||
void findNonCrashingPoint(Vec3 *result);
|
||||
int calcSteps();
|
||||
virtual bool canSkid(float steer_fraction) { return false; }
|
||||
public:
|
||||
EndController(AbstractKart *kart,
|
||||
StateManager::ActivePlayer* player,
|
||||
Controller *prev_controller);
|
||||
~EndController();
|
||||
virtual void update (float delta) ;
|
||||
virtual void reset ();
|
||||
EndController(AbstractKart *kart,
|
||||
StateManager::ActivePlayer* player,
|
||||
Controller *prev_controller);
|
||||
~EndController();
|
||||
virtual void update (float delta) ;
|
||||
virtual void reset ();
|
||||
/** Returns if the original controller of the kart was a player
|
||||
* controller. This way e.g. highscores can still be assigned
|
||||
* to the right player. */
|
||||
virtual bool isPlayerController () const {return getPlayer()!=NULL;}
|
||||
virtual bool isPlayerController () const { return getPlayer() != NULL; }
|
||||
virtual void action (PlayerAction action, int value);
|
||||
virtual void newLap (int lap);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user