Always include terrain-based slowdown fraction in a state update

(otherwise the client would reset this value to 1.0 in each rewind).
This commit is contained in:
hiker 2018-06-04 08:54:49 +10:00
parent b15de8c3dc
commit c751db865f

View File

@ -269,7 +269,7 @@ void MaxSpeed::SpeedDecrease::rewindTo(BareNetworkString *buffer,
{
reset();
}
} // restoreState
} // rewindTo
// ----------------------------------------------------------------------------
/** Returns how much increased speed time is left over in the given category.
@ -354,7 +354,15 @@ void MaxSpeed::saveState(BareNetworkString *buffer) const
for(unsigned int i=MS_DECREASE_MIN, b=1; i<MS_DECREASE_MAX; i++, b <<= 1)
{
if (active_slowdown & b)
// Terrain slowodn is not fully stored in the state, since it can
// be computed from the raycast. But the current slowdown fraction
// must be stored (otherwise on a rewind the current slowdown would
// be start from 1.0 again).
if (i == MS_DECREASE_TERRAIN)
{
buffer->addFloat(m_speed_decrease[i].m_current_fraction);
}
else if (active_slowdown & b)
m_speed_decrease[i].saveState(buffer);
}
@ -389,6 +397,13 @@ void MaxSpeed::rewindTo(BareNetworkString *buffer)
for(unsigned int i=MS_DECREASE_MIN, b=1; i<MS_DECREASE_MAX; i++, b <<= 1)
{
// Terrain slowodn is not fully stored in the state, since it can
// be computed from the raycast. But the current slowdown fraction
// must be stored (otherwise on a rewind the current slowdown would
// be start from 1.0 again).
if (i == MS_DECREASE_TERRAIN)
m_speed_decrease[i].m_current_fraction = buffer->getFloat();
else
m_speed_decrease[i].rewindTo(buffer, (active_slowdown & b) == b);
}