Skip to content

Commit 3edb1dd

Browse files
authoredFeb 26, 2021
Fix hud_change and hud_remove after hud_add (#10997)
1 parent b5eda41 commit 3edb1dd

File tree

3 files changed

+35
-40
lines changed

3 files changed

+35
-40
lines changed
 

Diff for: ‎src/client/client.h

-8
Original file line numberDiff line numberDiff line change
@@ -415,11 +415,6 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
415415
return m_csm_restriction_flags & flag;
416416
}
417417

418-
inline std::unordered_map<u32, u32> &getHUDTranslationMap()
419-
{
420-
return m_hud_server_to_client;
421-
}
422-
423418
bool joinModChannel(const std::string &channel) override;
424419
bool leaveModChannel(const std::string &channel) override;
425420
bool sendModChannelMessage(const std::string &channel,
@@ -556,9 +551,6 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
556551
// Relation of client id to object id
557552
std::unordered_map<int, u16> m_sounds_to_objects;
558553

559-
// Map server hud ids to client hud ids
560-
std::unordered_map<u32, u32> m_hud_server_to_client;
561-
562554
// Privileges
563555
std::unordered_set<std::string> m_privileges;
564556

Diff for: ‎src/client/game.cpp

+21-9
Original file line numberDiff line numberDiff line change
@@ -856,6 +856,9 @@ class Game {
856856
Hud *hud = nullptr;
857857
Minimap *mapper = nullptr;
858858

859+
// Map server hud ids to client hud ids
860+
std::unordered_map<u32, u32> m_hud_server_to_client;
861+
859862
GameRunData runData;
860863
Flags m_flags;
861864

@@ -2602,12 +2605,11 @@ void Game::handleClientEvent_HandleParticleEvent(ClientEvent *event,
26022605
void Game::handleClientEvent_HudAdd(ClientEvent *event, CameraOrientation *cam)
26032606
{
26042607
LocalPlayer *player = client->getEnv().getLocalPlayer();
2605-
auto &hud_server_to_client = client->getHUDTranslationMap();
26062608

26072609
u32 server_id = event->hudadd.server_id;
26082610
// ignore if we already have a HUD with that ID
2609-
auto i = hud_server_to_client.find(server_id);
2610-
if (i != hud_server_to_client.end()) {
2611+
auto i = m_hud_server_to_client.find(server_id);
2612+
if (i != m_hud_server_to_client.end()) {
26112613
delete event->hudadd.pos;
26122614
delete event->hudadd.name;
26132615
delete event->hudadd.scale;
@@ -2635,7 +2637,7 @@ void Game::handleClientEvent_HudAdd(ClientEvent *event, CameraOrientation *cam)
26352637
e->size = *event->hudadd.size;
26362638
e->z_index = event->hudadd.z_index;
26372639
e->text2 = *event->hudadd.text2;
2638-
hud_server_to_client[server_id] = player->addHud(e);
2640+
m_hud_server_to_client[server_id] = player->addHud(e);
26392641

26402642
delete event->hudadd.pos;
26412643
delete event->hudadd.name;
@@ -2651,18 +2653,28 @@ void Game::handleClientEvent_HudAdd(ClientEvent *event, CameraOrientation *cam)
26512653
void Game::handleClientEvent_HudRemove(ClientEvent *event, CameraOrientation *cam)
26522654
{
26532655
LocalPlayer *player = client->getEnv().getLocalPlayer();
2654-
HudElement *e = player->removeHud(event->hudrm.id);
2655-
delete e;
2656+
2657+
auto i = m_hud_server_to_client.find(event->hudrm.id);
2658+
if (i != m_hud_server_to_client.end()) {
2659+
HudElement *e = player->removeHud(i->second);
2660+
delete e;
2661+
m_hud_server_to_client.erase(i);
2662+
}
2663+
26562664
}
26572665

26582666
void Game::handleClientEvent_HudChange(ClientEvent *event, CameraOrientation *cam)
26592667
{
26602668
LocalPlayer *player = client->getEnv().getLocalPlayer();
26612669

2662-
u32 id = event->hudchange.id;
2663-
HudElement *e = player->getHud(id);
2670+
HudElement *e = nullptr;
2671+
2672+
auto i = m_hud_server_to_client.find(event->hudchange.id);
2673+
if (i != m_hud_server_to_client.end()) {
2674+
e = player->getHud(i->second);
2675+
}
26642676

2665-
if (e == NULL) {
2677+
if (e == nullptr) {
26662678
delete event->hudchange.v3fdata;
26672679
delete event->hudchange.v2fdata;
26682680
delete event->hudchange.sdata;

Diff for: ‎src/network/clientpackethandler.cpp

+14-23
Original file line numberDiff line numberDiff line change
@@ -1095,16 +1095,10 @@ void Client::handleCommand_HudRemove(NetworkPacket* pkt)
10951095

10961096
*pkt >> server_id;
10971097

1098-
auto i = m_hud_server_to_client.find(server_id);
1099-
if (i != m_hud_server_to_client.end()) {
1100-
int client_id = i->second;
1101-
m_hud_server_to_client.erase(i);
1102-
1103-
ClientEvent *event = new ClientEvent();
1104-
event->type = CE_HUDRM;
1105-
event->hudrm.id = client_id;
1106-
m_client_event_queue.push(event);
1107-
}
1098+
ClientEvent *event = new ClientEvent();
1099+
event->type = CE_HUDRM;
1100+
event->hudrm.id = server_id;
1101+
m_client_event_queue.push(event);
11081102
}
11091103

11101104
void Client::handleCommand_HudChange(NetworkPacket* pkt)
@@ -1131,19 +1125,16 @@ void Client::handleCommand_HudChange(NetworkPacket* pkt)
11311125
else
11321126
*pkt >> intdata;
11331127

1134-
std::unordered_map<u32, u32>::const_iterator i = m_hud_server_to_client.find(server_id);
1135-
if (i != m_hud_server_to_client.end()) {
1136-
ClientEvent *event = new ClientEvent();
1137-
event->type = CE_HUDCHANGE;
1138-
event->hudchange.id = i->second;
1139-
event->hudchange.stat = (HudElementStat)stat;
1140-
event->hudchange.v2fdata = new v2f(v2fdata);
1141-
event->hudchange.v3fdata = new v3f(v3fdata);
1142-
event->hudchange.sdata = new std::string(sdata);
1143-
event->hudchange.data = intdata;
1144-
event->hudchange.v2s32data = new v2s32(v2s32data);
1145-
m_client_event_queue.push(event);
1146-
}
1128+
ClientEvent *event = new ClientEvent();
1129+
event->type = CE_HUDCHANGE;
1130+
event->hudchange.id = server_id;
1131+
event->hudchange.stat = (HudElementStat)stat;
1132+
event->hudchange.v2fdata = new v2f(v2fdata);
1133+
event->hudchange.v3fdata = new v3f(v3fdata);
1134+
event->hudchange.sdata = new std::string(sdata);
1135+
event->hudchange.data = intdata;
1136+
event->hudchange.v2s32data = new v2s32(v2s32data);
1137+
m_client_event_queue.push(event);
11471138
}
11481139

11491140
void Client::handleCommand_HudSetFlags(NetworkPacket* pkt)

0 commit comments

Comments
 (0)
Please sign in to comment.