Various code improvements

* Camera: Fix division by 0 after view bobbing
* Remove ignored constness
* Connection: Improve window size range limits
This commit is contained in:
SmallJoker 2021-09-27 17:45:44 +02:00 committed by GitHub
parent 918fbe3ec1
commit d51d0f3a5a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 40 additions and 47 deletions

@ -378,7 +378,8 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, f32 tool_r
// Smoothen and invert the above // Smoothen and invert the above
fall_bobbing = sin(fall_bobbing * 0.5 * M_PI) * -1; fall_bobbing = sin(fall_bobbing * 0.5 * M_PI) * -1;
// Amplify according to the intensity of the impact // Amplify according to the intensity of the impact
fall_bobbing *= (1 - rangelim(50 / player->camera_impact, 0, 1)) * 5; if (player->camera_impact > 0.0f)
fall_bobbing *= (1 - rangelim(50 / player->camera_impact, 0, 1)) * 5;
fall_bobbing *= m_cache_fall_bobbing_amount; fall_bobbing *= m_cache_fall_bobbing_amount;
} }

@ -334,13 +334,13 @@ public:
// disconnect client when CSM failed. // disconnect client when CSM failed.
const std::string &accessDeniedReason() const { return m_access_denied_reason; } const std::string &accessDeniedReason() const { return m_access_denied_reason; }
const bool itemdefReceived() const bool itemdefReceived() const
{ return m_itemdef_received; } { return m_itemdef_received; }
const bool nodedefReceived() const bool nodedefReceived() const
{ return m_nodedef_received; } { return m_nodedef_received; }
const bool mediaReceived() const bool mediaReceived() const
{ return !m_media_downloader; } { return !m_media_downloader; }
const bool activeObjectsReceived() const bool activeObjectsReceived() const
{ return m_activeobjects_received; } { return m_activeobjects_received; }
u16 getProtoVersion() u16 getProtoVersion()

@ -84,7 +84,7 @@ public:
void showTranslatedStatusText(const char *str); void showTranslatedStatusText(const char *str);
inline void clearStatusText() { m_statustext.clear(); } inline void clearStatusText() { m_statustext.clear(); }
const bool isChatVisible() bool isChatVisible()
{ {
return m_flags.show_chat && m_recent_chat_count != 0 && m_profiler_current_page == 0; return m_flags.show_chat && m_recent_chat_count != 0 && m_profiler_current_page == 0;
} }

@ -229,7 +229,7 @@ public:
return m_selected_item; return m_selected_item;
} }
const u16 getSelectedAmount() const u16 getSelectedAmount() const
{ {
return m_selected_amount; return m_selected_amount;
} }

@ -995,7 +995,7 @@ const InventoryList *Inventory::getList(const std::string &name) const
return m_lists[i]; return m_lists[i];
} }
const s32 Inventory::getListIndex(const std::string &name) const s32 Inventory::getListIndex(const std::string &name) const
{ {
for(u32 i=0; i<m_lists.size(); i++) for(u32 i=0; i<m_lists.size(); i++)
{ {

@ -336,7 +336,7 @@ public:
} }
private: private:
// -1 if not found // -1 if not found
const s32 getListIndex(const std::string &name) const; s32 getListIndex(const std::string &name) const;
std::vector<InventoryList*> m_lists; std::vector<InventoryList*> m_lists;
IItemDefManager *m_itemdef; IItemDefManager *m_itemdef;

@ -578,7 +578,7 @@ u16 Channel::getOutgoingSequenceNumber(bool& successful)
// ugly cast but this one is required in order to tell compiler we // ugly cast but this one is required in order to tell compiler we
// know about difference of two unsigned may be negative in general // know about difference of two unsigned may be negative in general
// but we already made sure it won't happen in this case // but we already made sure it won't happen in this case
if (((u16)(next_outgoing_seqnum - lowest_unacked_seqnumber)) > window_size) { if (((u16)(next_outgoing_seqnum - lowest_unacked_seqnumber)) > m_window_size) {
successful = false; successful = false;
return 0; return 0;
} }
@ -588,7 +588,7 @@ u16 Channel::getOutgoingSequenceNumber(bool& successful)
// know about difference of two unsigned may be negative in general // know about difference of two unsigned may be negative in general
// but we already made sure it won't happen in this case // but we already made sure it won't happen in this case
if ((next_outgoing_seqnum + (u16)(SEQNUM_MAX - lowest_unacked_seqnumber)) > if ((next_outgoing_seqnum + (u16)(SEQNUM_MAX - lowest_unacked_seqnumber)) >
window_size) { m_window_size) {
successful = false; successful = false;
return 0; return 0;
} }
@ -666,7 +666,7 @@ void Channel::UpdateTimers(float dtime)
//packet_too_late = current_packet_too_late; //packet_too_late = current_packet_too_late;
packets_successful = current_packet_successful; packets_successful = current_packet_successful;
if (current_bytes_transfered > (unsigned int) (window_size*512/2)) { if (current_bytes_transfered > (unsigned int) (m_window_size*512/2)) {
reasonable_amount_of_data_transmitted = true; reasonable_amount_of_data_transmitted = true;
} }
current_packet_loss = 0; current_packet_loss = 0;
@ -681,37 +681,25 @@ void Channel::UpdateTimers(float dtime)
if (packets_successful > 0) { if (packets_successful > 0) {
successful_to_lost_ratio = packet_loss/packets_successful; successful_to_lost_ratio = packet_loss/packets_successful;
} else if (packet_loss > 0) { } else if (packet_loss > 0) {
window_size = std::max( setWindowSize(m_window_size - 10);
(window_size - 10),
MIN_RELIABLE_WINDOW_SIZE);
done = true; done = true;
} }
if (!done) { if (!done) {
if ((successful_to_lost_ratio < 0.01f) && if (successful_to_lost_ratio < 0.01f) {
(window_size < MAX_RELIABLE_WINDOW_SIZE)) {
/* don't even think about increasing if we didn't even /* don't even think about increasing if we didn't even
* use major parts of our window */ * use major parts of our window */
if (reasonable_amount_of_data_transmitted) if (reasonable_amount_of_data_transmitted)
window_size = std::min( setWindowSize(m_window_size + 100);
(window_size + 100), } else if (successful_to_lost_ratio < 0.05f) {
MAX_RELIABLE_WINDOW_SIZE);
} else if ((successful_to_lost_ratio < 0.05f) &&
(window_size < MAX_RELIABLE_WINDOW_SIZE)) {
/* don't even think about increasing if we didn't even /* don't even think about increasing if we didn't even
* use major parts of our window */ * use major parts of our window */
if (reasonable_amount_of_data_transmitted) if (reasonable_amount_of_data_transmitted)
window_size = std::min( setWindowSize(m_window_size + 50);
(window_size + 50),
MAX_RELIABLE_WINDOW_SIZE);
} else if (successful_to_lost_ratio > 0.15f) { } else if (successful_to_lost_ratio > 0.15f) {
window_size = std::max( setWindowSize(m_window_size - 100);
(window_size - 100),
MIN_RELIABLE_WINDOW_SIZE);
} else if (successful_to_lost_ratio > 0.1f) { } else if (successful_to_lost_ratio > 0.1f) {
window_size = std::max( setWindowSize(m_window_size - 50);
(window_size - 50),
MIN_RELIABLE_WINDOW_SIZE);
} }
} }
} }

@ -420,34 +420,38 @@ public:
void UpdateTimers(float dtime); void UpdateTimers(float dtime);
const float getCurrentDownloadRateKB() float getCurrentDownloadRateKB()
{ MutexAutoLock lock(m_internal_mutex); return cur_kbps; }; { MutexAutoLock lock(m_internal_mutex); return cur_kbps; };
const float getMaxDownloadRateKB() float getMaxDownloadRateKB()
{ MutexAutoLock lock(m_internal_mutex); return max_kbps; }; { MutexAutoLock lock(m_internal_mutex); return max_kbps; };
const float getCurrentLossRateKB() float getCurrentLossRateKB()
{ MutexAutoLock lock(m_internal_mutex); return cur_kbps_lost; }; { MutexAutoLock lock(m_internal_mutex); return cur_kbps_lost; };
const float getMaxLossRateKB() float getMaxLossRateKB()
{ MutexAutoLock lock(m_internal_mutex); return max_kbps_lost; }; { MutexAutoLock lock(m_internal_mutex); return max_kbps_lost; };
const float getCurrentIncomingRateKB() float getCurrentIncomingRateKB()
{ MutexAutoLock lock(m_internal_mutex); return cur_incoming_kbps; }; { MutexAutoLock lock(m_internal_mutex); return cur_incoming_kbps; };
const float getMaxIncomingRateKB() float getMaxIncomingRateKB()
{ MutexAutoLock lock(m_internal_mutex); return max_incoming_kbps; }; { MutexAutoLock lock(m_internal_mutex); return max_incoming_kbps; };
const float getAvgDownloadRateKB() float getAvgDownloadRateKB()
{ MutexAutoLock lock(m_internal_mutex); return avg_kbps; }; { MutexAutoLock lock(m_internal_mutex); return avg_kbps; };
const float getAvgLossRateKB() float getAvgLossRateKB()
{ MutexAutoLock lock(m_internal_mutex); return avg_kbps_lost; }; { MutexAutoLock lock(m_internal_mutex); return avg_kbps_lost; };
const float getAvgIncomingRateKB() float getAvgIncomingRateKB()
{ MutexAutoLock lock(m_internal_mutex); return avg_incoming_kbps; }; { MutexAutoLock lock(m_internal_mutex); return avg_incoming_kbps; };
const unsigned int getWindowSize() const { return window_size; }; u16 getWindowSize() const { return m_window_size; };
void setWindowSize(long size)
{
m_window_size = (u16)rangelim(size, MIN_RELIABLE_WINDOW_SIZE, MAX_RELIABLE_WINDOW_SIZE);
}
void setWindowSize(unsigned int size) { window_size = size; };
private: private:
std::mutex m_internal_mutex; std::mutex m_internal_mutex;
int window_size = MIN_RELIABLE_WINDOW_SIZE; u16 m_window_size = MIN_RELIABLE_WINDOW_SIZE;
u16 next_incoming_seqnum = SEQNUM_INITIAL; u16 next_incoming_seqnum = SEQNUM_INITIAL;
@ -765,7 +769,7 @@ public:
Address GetPeerAddress(session_t peer_id); Address GetPeerAddress(session_t peer_id);
float getPeerStat(session_t peer_id, rtt_stat_type type); float getPeerStat(session_t peer_id, rtt_stat_type type);
float getLocalStat(rate_stat_type type); float getLocalStat(rate_stat_type type);
const u32 GetProtocolID() const { return m_protocol_id; }; u32 GetProtocolID() const { return m_protocol_id; };
const std::string getDesc(); const std::string getDesc();
void DisconnectPeer(session_t peer_id); void DisconnectPeer(session_t peer_id);

@ -41,7 +41,7 @@ public:
u32 getSize() const { return m_datasize; } u32 getSize() const { return m_datasize; }
session_t getPeerId() const { return m_peer_id; } session_t getPeerId() const { return m_peer_id; }
u16 getCommand() { return m_command; } u16 getCommand() { return m_command; }
const u32 getRemainingBytes() const { return m_datasize - m_read_offset; } u32 getRemainingBytes() const { return m_datasize - m_read_offset; }
const char *getRemainingString() { return getString(m_read_offset); } const char *getRemainingString() { return getString(m_read_offset); }
// Returns a c-string without copying. // Returns a c-string without copying.

@ -84,7 +84,7 @@ RemotePlayer::RemotePlayer(const char *name, IItemDefManager *idef):
} }
const RemotePlayerChatResult RemotePlayer::canSendChatMessage() RemotePlayerChatResult RemotePlayer::canSendChatMessage()
{ {
// Rate limit messages // Rate limit messages
u32 now = time(NULL); u32 now = time(NULL);

@ -47,7 +47,7 @@ public:
PlayerSAO *getPlayerSAO() { return m_sao; } PlayerSAO *getPlayerSAO() { return m_sao; }
void setPlayerSAO(PlayerSAO *sao) { m_sao = sao; } void setPlayerSAO(PlayerSAO *sao) { m_sao = sao; }
const RemotePlayerChatResult canSendChatMessage(); RemotePlayerChatResult canSendChatMessage();
void setHotbarItemcount(s32 hotbar_itemcount) void setHotbarItemcount(s32 hotbar_itemcount)
{ {