Change handleAcceleration into handleAccelerationAndBraking
This commit is contained in:
parent
07ad8977dd
commit
1f514727d5
@ -367,10 +367,9 @@ void SkiddingAI::update(int ticks)
|
|||||||
if(!commands_set)
|
if(!commands_set)
|
||||||
{
|
{
|
||||||
/*Response handling functions*/
|
/*Response handling functions*/
|
||||||
handleAcceleration(ticks);
|
handleAccelerationAndBraking(ticks);
|
||||||
handleSteering(dt);
|
handleSteering(dt);
|
||||||
handleRescue(dt);
|
handleRescue(dt);
|
||||||
handleBraking();
|
|
||||||
// If a bomb is attached, nitro might already be set.
|
// If a bomb is attached, nitro might already be set.
|
||||||
if(!m_controls->getNitro())
|
if(!m_controls->getNitro())
|
||||||
handleNitroAndZipper(item_skill);
|
handleNitroAndZipper(item_skill);
|
||||||
@ -1973,12 +1972,13 @@ void SkiddingAI::computeNearestKarts()
|
|||||||
} // computeNearestKarts
|
} // computeNearestKarts
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
/** Determines if the AI should accelerate or not.
|
/** Determines if the AI should accelerate or not, and if not if it should brake.
|
||||||
* \param dt Time step size.
|
* \param ticks Time step size.
|
||||||
|
* //TODO : make acceleration steering aware
|
||||||
*/
|
*/
|
||||||
void SkiddingAI::handleAcceleration(int ticks)
|
void SkiddingAI::handleAccelerationAndBraking(int ticks)
|
||||||
{
|
{
|
||||||
//Do not accelerate until we have delayed the start enough
|
// Step 0 (start only) : do not accelerate until we have delayed the start enough
|
||||||
if( m_start_delay > 0 )
|
if( m_start_delay > 0 )
|
||||||
{
|
{
|
||||||
m_start_delay -= ticks;
|
m_start_delay -= ticks;
|
||||||
@ -1986,6 +1986,24 @@ void SkiddingAI::handleAcceleration(int ticks)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Step 1 : determine the appropriate max speed for the curve we are in
|
||||||
|
// (this is also calculated in straights, as there is always a
|
||||||
|
// curve lurking at its end)
|
||||||
|
|
||||||
|
// FIXME - requires fixing of the turn radius bugs
|
||||||
|
|
||||||
|
float max_turn_speed =
|
||||||
|
m_kart->getSpeedForTurnRadius(m_current_curve_radius)*1.5f;
|
||||||
|
|
||||||
|
// A kart will not brake when the speed is already slower than this
|
||||||
|
// value. This prevents a kart from going too slow (or even backwards)
|
||||||
|
// in tight curves.
|
||||||
|
const float MIN_SPEED = 5.0f;
|
||||||
|
|
||||||
|
// Step 2 : handle braking (there are some cases who need braking besides
|
||||||
|
// a too great speed, like overtaking the leader in FTL)
|
||||||
|
handleBraking(max_turn_speed, MIN_SPEED);
|
||||||
|
|
||||||
if( m_controls->getBrake())
|
if( m_controls->getBrake())
|
||||||
{
|
{
|
||||||
m_controls->setAccel(0.0f);
|
m_controls->setAccel(0.0f);
|
||||||
@ -2018,7 +2036,7 @@ void SkiddingAI::handleAcceleration(int ticks)
|
|||||||
|
|
||||||
m_controls->setAccel(stk_config->m_ai_acceleration);
|
m_controls->setAccel(stk_config->m_ai_acceleration);
|
||||||
|
|
||||||
} // handleAcceleration
|
} // handleAccelerationAndBraking
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@ -2029,7 +2047,7 @@ void SkiddingAI::handleAcceleration(int ticks)
|
|||||||
* it will brake in order to make it easier to re-align itself), and
|
* it will brake in order to make it easier to re-align itself), and
|
||||||
* estimated curve radius (brake to avoid being pushed out of a curve).
|
* estimated curve radius (brake to avoid being pushed out of a curve).
|
||||||
*/
|
*/
|
||||||
void SkiddingAI::handleBraking()
|
void SkiddingAI::handleBraking(float max_turn_speed, float min_speed)
|
||||||
{
|
{
|
||||||
m_controls->setBrake(false);
|
m_controls->setBrake(false);
|
||||||
// In follow the leader mode, the kart should brake if they are ahead of
|
// In follow the leader mode, the kart should brake if they are ahead of
|
||||||
@ -2052,15 +2070,10 @@ void SkiddingAI::handleBraking()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// A kart will not brake when the speed is already slower than this
|
|
||||||
// value. This prevents a kart from going too slow (or even backwards)
|
|
||||||
// in tight curves.
|
|
||||||
const float MIN_SPEED = 5.0f;
|
|
||||||
|
|
||||||
// If the kart is not facing roughly in the direction of the track, brake
|
// If the kart is not facing roughly in the direction of the track, brake
|
||||||
// so that it is easier for the kart to turn in the right direction.
|
// so that it is easier for the kart to turn in the right direction.
|
||||||
if(m_current_track_direction==DriveNode::DIR_UNDEFINED &&
|
if(m_current_track_direction==DriveNode::DIR_UNDEFINED &&
|
||||||
m_kart->getSpeed() > MIN_SPEED)
|
m_kart->getSpeed() > min_speed)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
if(m_ai_debug)
|
if(m_ai_debug)
|
||||||
@ -2074,11 +2087,8 @@ void SkiddingAI::handleBraking()
|
|||||||
if(m_current_track_direction==DriveNode::DIR_LEFT ||
|
if(m_current_track_direction==DriveNode::DIR_LEFT ||
|
||||||
m_current_track_direction==DriveNode::DIR_RIGHT )
|
m_current_track_direction==DriveNode::DIR_RIGHT )
|
||||||
{
|
{
|
||||||
float max_turn_speed =
|
if(m_kart->getSpeed() > max_turn_speed &&
|
||||||
m_kart->getSpeedForTurnRadius(m_current_curve_radius);
|
m_kart->getSpeed()>min_speed &&
|
||||||
|
|
||||||
if(m_kart->getSpeed() > 1.5f*max_turn_speed &&
|
|
||||||
m_kart->getSpeed()>MIN_SPEED &&
|
|
||||||
fabsf(m_controls->getSteer()) > 0.95f )
|
fabsf(m_controls->getSteer()) > 0.95f )
|
||||||
{
|
{
|
||||||
m_controls->setBrake(true);
|
m_controls->setBrake(true);
|
||||||
|
@ -251,7 +251,7 @@ private:
|
|||||||
*specific action (more like, associated with inaction).
|
*specific action (more like, associated with inaction).
|
||||||
*/
|
*/
|
||||||
void handleRaceStart();
|
void handleRaceStart();
|
||||||
void handleAcceleration(int ticks);
|
void handleAccelerationAndBraking(int ticks);
|
||||||
void handleSteering(float dt);
|
void handleSteering(float dt);
|
||||||
int computeSkill(SkillType type);
|
int computeSkill(SkillType type);
|
||||||
void handleItems(const float dt, const Vec3 *aim_point,
|
void handleItems(const float dt, const Vec3 *aim_point,
|
||||||
@ -264,7 +264,7 @@ private:
|
|||||||
void handleSwitch(int item_skill, const std::vector<const Item *> &items_to_collect,
|
void handleSwitch(int item_skill, const std::vector<const Item *> &items_to_collect,
|
||||||
const std::vector<const Item *> &items_to_avoid);
|
const std::vector<const Item *> &items_to_avoid);
|
||||||
void handleRescue(const float dt);
|
void handleRescue(const float dt);
|
||||||
void handleBraking();
|
void handleBraking(float max_turn_speed, float min_speed);
|
||||||
void handleNitroAndZipper(int item_skill);
|
void handleNitroAndZipper(int item_skill);
|
||||||
void computeNearestKarts();
|
void computeNearestKarts();
|
||||||
void handleItemCollectionAndAvoidance(Vec3 *aim_point,
|
void handleItemCollectionAndAvoidance(Vec3 *aim_point,
|
||||||
|
Loading…
Reference in New Issue
Block a user