forked from Mirrorlandia_minetest/minetest
Fix rtt >= 0.0f assertion and free_move crash
This commit is contained in:
parent
6b72d8d090
commit
1d1cf000c0
@ -1167,7 +1167,7 @@ SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Control(Channel *chan
|
|||||||
|
|
||||||
// a overflow is quite unlikely but as it'd result in major
|
// a overflow is quite unlikely but as it'd result in major
|
||||||
// rtt miscalculation we handle it here
|
// rtt miscalculation we handle it here
|
||||||
float rtt;
|
float rtt = 0.0f;
|
||||||
if (current_time > p.absolute_send_time) {
|
if (current_time > p.absolute_send_time) {
|
||||||
rtt = (current_time - p.absolute_send_time) / 1000.0f;
|
rtt = (current_time - p.absolute_send_time) / 1000.0f;
|
||||||
} else if (p.totaltime > 0) {
|
} else if (p.totaltime > 0) {
|
||||||
@ -1176,7 +1176,8 @@ SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Control(Channel *chan
|
|||||||
|
|
||||||
// Let peer calculate stuff according to it
|
// Let peer calculate stuff according to it
|
||||||
// (avg_rtt and resend_timeout)
|
// (avg_rtt and resend_timeout)
|
||||||
dynamic_cast<UDPPeer *>(peer)->reportRTT(rtt);
|
if (rtt != 0.0f)
|
||||||
|
dynamic_cast<UDPPeer *>(peer)->reportRTT(rtt);
|
||||||
}
|
}
|
||||||
// put bytes for max bandwidth calculation
|
// put bytes for max bandwidth calculation
|
||||||
channel->UpdateBytesSent(p.data.getSize(), 1);
|
channel->UpdateBytesSent(p.data.getSize(), 1);
|
||||||
|
@ -76,22 +76,18 @@ Player::Player(const char *name, IItemDefManager *idef):
|
|||||||
hud_hotbar_itemcount = HUD_HOTBAR_ITEMCOUNT_DEFAULT;
|
hud_hotbar_itemcount = HUD_HOTBAR_ITEMCOUNT_DEFAULT;
|
||||||
|
|
||||||
m_player_settings.readGlobalSettings();
|
m_player_settings.readGlobalSettings();
|
||||||
g_settings->registerChangedCallback("free_move", &Player::settingsChangedCallback,
|
// Register player setting callbacks
|
||||||
&m_player_settings);
|
for (const std::string &name : m_player_settings.setting_names)
|
||||||
g_settings->registerChangedCallback("fast_move", &Player::settingsChangedCallback,
|
g_settings->registerChangedCallback(name,
|
||||||
&m_player_settings);
|
|
||||||
g_settings->registerChangedCallback("continuous_forward",
|
|
||||||
&Player::settingsChangedCallback, &m_player_settings);
|
&Player::settingsChangedCallback, &m_player_settings);
|
||||||
g_settings->registerChangedCallback("always_fly_fast",
|
|
||||||
&Player::settingsChangedCallback, &m_player_settings);
|
|
||||||
g_settings->registerChangedCallback("aux1_descends",
|
|
||||||
&Player::settingsChangedCallback, &m_player_settings);
|
|
||||||
g_settings->registerChangedCallback(
|
|
||||||
"noclip", &Player::settingsChangedCallback, &m_player_settings);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Player::~Player()
|
Player::~Player()
|
||||||
{
|
{
|
||||||
|
// m_player_settings becomes invalid, remove callbacks
|
||||||
|
for (const std::string &name : m_player_settings.setting_names)
|
||||||
|
g_settings->deregisterChangedCallback(name,
|
||||||
|
&Player::settingsChangedCallback, &m_player_settings);
|
||||||
clearHud();
|
clearHud();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,6 +93,10 @@ struct PlayerSettings
|
|||||||
bool aux1_descends = false;
|
bool aux1_descends = false;
|
||||||
bool noclip = false;
|
bool noclip = false;
|
||||||
|
|
||||||
|
const std::string setting_names[6] = {
|
||||||
|
"free_move", "fast_move", "continuous_forward", "always_fly_fast",
|
||||||
|
"aux1_descends", "noclip"
|
||||||
|
};
|
||||||
void readGlobalSettings();
|
void readGlobalSettings();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user