Fix nitro in network

This commit is contained in:
Benau 2018-06-29 12:17:24 +08:00
parent 16cebffa3a
commit 75c8864e8f
5 changed files with 16 additions and 20 deletions

View File

@ -2073,10 +2073,11 @@ void Kart::updateNitro(int ticks)
m_min_nitro_ticks = 1; m_min_nitro_ticks = 1;
} }
bool rewinding = RewindManager::get()->isRewinding();
bool increase_speed = (m_min_nitro_ticks > 0 && isOnGround()); bool increase_speed = (m_min_nitro_ticks > 0 && isOnGround());
if (!increase_speed && m_min_nitro_ticks <= 0) if (!increase_speed && m_min_nitro_ticks <= 0)
{ {
if (m_nitro_sound->getStatus() == SFXBase::SFX_PLAYING) if (m_nitro_sound->getStatus() == SFXBase::SFX_PLAYING && !rewinding)
m_nitro_sound->stop(); m_nitro_sound->stop();
return; return;
} }
@ -2085,7 +2086,7 @@ void Kart::updateNitro(int ticks)
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)
{ {
if(m_nitro_sound->getStatus() == SFXBase::SFX_PLAYING) if(m_nitro_sound->getStatus() == SFXBase::SFX_PLAYING && !rewinding)
m_nitro_sound->stop(); m_nitro_sound->stop();
m_collected_energy = 0; m_collected_energy = 0;
return; return;
@ -2093,7 +2094,7 @@ void Kart::updateNitro(int ticks)
if (increase_speed) if (increase_speed)
{ {
if(m_nitro_sound->getStatus() != SFXBase::SFX_PLAYING) if(m_nitro_sound->getStatus() != SFXBase::SFX_PLAYING && !rewinding)
m_nitro_sound->play(); m_nitro_sound->play();
m_max_speed->increaseMaxSpeed(MaxSpeed::MS_INCREASE_NITRO, m_max_speed->increaseMaxSpeed(MaxSpeed::MS_INCREASE_NITRO,
m_kart_properties->getNitroMaxSpeedIncrease(), m_kart_properties->getNitroMaxSpeedIncrease(),
@ -2103,7 +2104,7 @@ void Kart::updateNitro(int ticks)
} }
else else
{ {
if(m_nitro_sound->getStatus() == SFXBase::SFX_PLAYING) if(m_nitro_sound->getStatus() == SFXBase::SFX_PLAYING && !rewinding)
m_nitro_sound->stop(); m_nitro_sound->stop();
} }
} // updateNitro } // updateNitro

View File

@ -251,7 +251,7 @@ protected:
RaceManager::KartType m_type; RaceManager::KartType m_type;
/** To prevent using nitro in too short bursts */ /** To prevent using nitro in too short bursts */
int m_min_nitro_ticks; int8_t m_min_nitro_ticks;
void updatePhysics(int ticks); void updatePhysics(int ticks);
void handleMaterialSFX(); void handleMaterialSFX();

View File

@ -92,7 +92,7 @@ KartProperties::KartProperties(const std::string &filename)
m_color = video::SColor(255, 0, 0, 0); m_color = video::SColor(255, 0, 0, 0);
m_shape = 32; // close enough to a circle. m_shape = 32; // close enough to a circle.
m_engine_sfx_type = "engine_small"; m_engine_sfx_type = "engine_small";
m_nitro_min_consumption = 0.53f; m_nitro_min_consumption = 64;
// The default constructor for stk_config uses filename="" // The default constructor for stk_config uses filename=""
if (filename != "") if (filename != "")
{ {
@ -1001,15 +1001,6 @@ float KartProperties::getNitroDuration() const
} // getNitroDuration } // getNitroDuration
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
/** Returns minimum time during which nitro is consumed when pressing nitro
* key, to prevent using nitro in very short bursts
*/
int KartProperties::getNitroMinConsumptionTicks() const
{
return stk_config->time2Ticks(m_nitro_min_consumption);
}
// ----------------------------------------------------------------------------
float KartProperties::getNitroEngineForce() const float KartProperties::getNitroEngineForce() const
{ {
return m_cached_characteristic->getNitroEngineForce(); return m_cached_characteristic->getNitroEngineForce();

View File

@ -147,7 +147,7 @@ private:
/** Minimum time during which nitro is consumed when pressing /** Minimum time during which nitro is consumed when pressing
* the nitro key (to prevent using in very small bursts) * the nitro key (to prevent using in very small bursts)
*/ */
float m_nitro_min_consumption; int8_t m_nitro_min_consumption;
/** Type of the kart (for the properties) */ /** Type of the kart (for the properties) */
std::string m_kart_type; std::string m_kart_type;
@ -476,9 +476,6 @@ public:
float getNitroMaxSpeedIncrease() const; float getNitroMaxSpeedIncrease() const;
float getNitroFadeOutTime() const; float getNitroFadeOutTime() const;
float getNitroMax() const; float getNitroMax() const;
int getNitroMinConsumptionTicks() const;
// ------------------------------------------------------------------------
float getSlipstreamDurationFactor() const; float getSlipstreamDurationFactor() const;
float getSlipstreamBaseSpeed() const; float getSlipstreamBaseSpeed() const;
float getSlipstreamLength() const; float getSlipstreamLength() const;
@ -509,6 +506,12 @@ public:
float getSkidReduceTurnMin() const; float getSkidReduceTurnMin() const;
float getSkidReduceTurnMax() const; float getSkidReduceTurnMax() const;
bool getSkidEnabled() const; bool getSkidEnabled() const;
// ------------------------------------------------------------------------
/** Returns minimum time during which nitro is consumed when pressing nitro
* key, to prevent using nitro in very short bursts
*/
int8_t getNitroMinConsumptionTicks() const
{ return m_nitro_min_consumption; }
/* <characteristics-end kpdefs> */ /* <characteristics-end kpdefs> */

View File

@ -108,7 +108,7 @@ BareNetworkString* KartRewinder::saveState()
// ----------------------------- // -----------------------------
getAttachment()->saveState(buffer); getAttachment()->saveState(buffer);
getPowerup()->saveState(buffer); getPowerup()->saveState(buffer);
buffer->addFloat(getEnergy()); buffer->addUInt8(m_min_nitro_ticks).addFloat(getEnergy());
// 4) Max speed info // 4) Max speed info
// ------------------ // ------------------
@ -173,6 +173,7 @@ void KartRewinder::restoreState(BareNetworkString *buffer, int count)
// ------------------------------ // ------------------------------
getAttachment()->rewindTo(buffer); getAttachment()->rewindTo(buffer);
getPowerup()->rewindTo(buffer); getPowerup()->rewindTo(buffer);
m_min_nitro_ticks = buffer->getUInt8();
float nitro = buffer->getFloat(); float nitro = buffer->getFloat();
setEnergy(nitro); setEnergy(nitro);