Use a required minimal amount of nitro each time the key is used. May need some playtesting to balance but the base is there and shouldn't penalize normal use
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@13275 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
2ff62c4d97
commit
bfad6cc851
@ -81,6 +81,8 @@
|
|||||||
# include <math.h>
|
# include <math.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const float MIN_NITRO_TIME_THRESHOLD = 2.0f;
|
||||||
|
|
||||||
/** The kart constructor.
|
/** The kart constructor.
|
||||||
* \param ident The identifier for the kart model to use.
|
* \param ident The identifier for the kart model to use.
|
||||||
* \param position The position (or rank) for this kart (between 1 and
|
* \param position The position (or rank) for this kart (between 1 and
|
||||||
@ -121,6 +123,8 @@ Kart::Kart (const std::string& ident, unsigned int world_kart_id,
|
|||||||
m_stars_effect = NULL;
|
m_stars_effect = NULL;
|
||||||
m_jump_time = 0;
|
m_jump_time = 0;
|
||||||
m_is_jumping = false;
|
m_is_jumping = false;
|
||||||
|
m_min_nitro_time = 0.0f;
|
||||||
|
|
||||||
m_view_blocked_by_plunger = 0;
|
m_view_blocked_by_plunger = 0;
|
||||||
m_has_caught_nolok_bubblegum = false;
|
m_has_caught_nolok_bubblegum = false;
|
||||||
|
|
||||||
@ -293,6 +297,8 @@ void Kart::reset()
|
|||||||
if(m_body)
|
if(m_body)
|
||||||
World::getWorld()->getPhysics()->addKart(this);
|
World::getWorld()->getPhysics()->addKart(this);
|
||||||
|
|
||||||
|
m_min_nitro_time = 0.0f;
|
||||||
|
|
||||||
// Reset star effect in case that it is currently being shown.
|
// Reset star effect in case that it is currently being shown.
|
||||||
m_stars_effect->reset();
|
m_stars_effect->reset();
|
||||||
m_max_speed->reset();
|
m_max_speed->reset();
|
||||||
@ -1530,18 +1536,40 @@ void Kart::handleZipper(const Material *material, bool play_sound)
|
|||||||
*/
|
*/
|
||||||
void Kart::updateNitro(float dt)
|
void Kart::updateNitro(float dt)
|
||||||
{
|
{
|
||||||
if(!m_controls.m_nitro || !isOnGround()) return;
|
if (m_controls.m_nitro && m_min_nitro_time <= 0.0f)
|
||||||
|
{
|
||||||
|
m_min_nitro_time = MIN_NITRO_TIME_THRESHOLD;
|
||||||
|
}
|
||||||
|
if (m_min_nitro_time > 0.0f)
|
||||||
|
{
|
||||||
|
m_min_nitro_time -= dt;
|
||||||
|
|
||||||
|
// when pressing the key, don't allow the min time to go under zero.
|
||||||
|
// If it went under zero, it would be reset
|
||||||
|
if (m_controls.m_nitro && m_min_nitro_time <= 0.0f)
|
||||||
|
m_min_nitro_time = 0.1f;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool increase_speed = (m_controls.m_nitro && isOnGround());
|
||||||
|
if (!increase_speed && m_min_nitro_time <= 0.0f)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
m_collected_energy -= dt * m_kart_properties->getNitroConsumption();
|
m_collected_energy -= dt * m_kart_properties->getNitroConsumption();
|
||||||
if(m_collected_energy<0)
|
if (m_collected_energy < 0)
|
||||||
{
|
{
|
||||||
m_collected_energy = 0;
|
m_collected_energy = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_max_speed->increaseMaxSpeed(MaxSpeed::MS_INCREASE_NITRO,
|
|
||||||
m_kart_properties->getNitroMaxSpeedIncrease(),
|
if (increase_speed)
|
||||||
m_kart_properties->getNitroEngineForce(),
|
{
|
||||||
m_kart_properties->getNitroDuration(),
|
m_max_speed->increaseMaxSpeed(MaxSpeed::MS_INCREASE_NITRO,
|
||||||
m_kart_properties->getNitroFadeOutTime() );
|
m_kart_properties->getNitroMaxSpeedIncrease(),
|
||||||
|
m_kart_properties->getNitroEngineForce(),
|
||||||
|
m_kart_properties->getNitroDuration(),
|
||||||
|
m_kart_properties->getNitroFadeOutTime() );
|
||||||
|
}
|
||||||
} // updateNitro
|
} // updateNitro
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
@ -208,6 +208,9 @@ private:
|
|||||||
SFXBase *m_goo_sound;
|
SFXBase *m_goo_sound;
|
||||||
float m_time_last_crash;
|
float m_time_last_crash;
|
||||||
|
|
||||||
|
/** To prevent using nitro in too short bursts */
|
||||||
|
float m_min_nitro_time;
|
||||||
|
|
||||||
void updatePhysics(float dt);
|
void updatePhysics(float dt);
|
||||||
void handleMaterialSFX(const Material *material);
|
void handleMaterialSFX(const Material *material);
|
||||||
void handleMaterialGFX();
|
void handleMaterialGFX();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user