1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Fix hud_change and hud_remove after hud_add (#10997)

This commit is contained in:
savilli 2021-02-26 23:21:20 +03:00 committed by GitHub
parent b5eda416ce
commit 3edb1ddb81
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 35 additions and 40 deletions

View file

@ -856,6 +856,9 @@ private:
Hud *hud = nullptr;
Minimap *mapper = nullptr;
// Map server hud ids to client hud ids
std::unordered_map<u32, u32> m_hud_server_to_client;
GameRunData runData;
Flags m_flags;
@ -2602,12 +2605,11 @@ void Game::handleClientEvent_HandleParticleEvent(ClientEvent *event,
void Game::handleClientEvent_HudAdd(ClientEvent *event, CameraOrientation *cam)
{
LocalPlayer *player = client->getEnv().getLocalPlayer();
auto &hud_server_to_client = client->getHUDTranslationMap();
u32 server_id = event->hudadd.server_id;
// ignore if we already have a HUD with that ID
auto i = hud_server_to_client.find(server_id);
if (i != hud_server_to_client.end()) {
auto i = m_hud_server_to_client.find(server_id);
if (i != m_hud_server_to_client.end()) {
delete event->hudadd.pos;
delete event->hudadd.name;
delete event->hudadd.scale;
@ -2635,7 +2637,7 @@ void Game::handleClientEvent_HudAdd(ClientEvent *event, CameraOrientation *cam)
e->size = *event->hudadd.size;
e->z_index = event->hudadd.z_index;
e->text2 = *event->hudadd.text2;
hud_server_to_client[server_id] = player->addHud(e);
m_hud_server_to_client[server_id] = player->addHud(e);
delete event->hudadd.pos;
delete event->hudadd.name;
@ -2651,18 +2653,28 @@ void Game::handleClientEvent_HudAdd(ClientEvent *event, CameraOrientation *cam)
void Game::handleClientEvent_HudRemove(ClientEvent *event, CameraOrientation *cam)
{
LocalPlayer *player = client->getEnv().getLocalPlayer();
HudElement *e = player->removeHud(event->hudrm.id);
delete e;
auto i = m_hud_server_to_client.find(event->hudrm.id);
if (i != m_hud_server_to_client.end()) {
HudElement *e = player->removeHud(i->second);
delete e;
m_hud_server_to_client.erase(i);
}
}
void Game::handleClientEvent_HudChange(ClientEvent *event, CameraOrientation *cam)
{
LocalPlayer *player = client->getEnv().getLocalPlayer();
u32 id = event->hudchange.id;
HudElement *e = player->getHud(id);
HudElement *e = nullptr;
if (e == NULL) {
auto i = m_hud_server_to_client.find(event->hudchange.id);
if (i != m_hud_server_to_client.end()) {
e = player->getHud(i->second);
}
if (e == nullptr) {
delete event->hudchange.v3fdata;
delete event->hudchange.v2fdata;
delete event->hudchange.sdata;