Skip to content

Commit

Permalink
Fix issues with earlier CSM HUD commit (#6940)
Browse files Browse the repository at this point in the history
The CSM HUD PR caused some strange behavior including aborts due to parts of it using some slightly hacky code, the event refactor changing how events are processed and a minor oversight.
  • Loading branch information
red-001 authored and nerzhul committed Jan 26, 2018
1 parent 3a5959a commit 4f688d5
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 15 deletions.
5 changes: 5 additions & 0 deletions src/client.h
Expand Up @@ -422,6 +422,11 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
return m_csm_noderange_limit;
}

inline std::unordered_map<u32, u32> &getHUDTranslationMap()
{
return m_hud_server_to_client;
}

bool joinModChannel(const std::string &channel);
bool leaveModChannel(const std::string &channel);
bool sendModChannelMessage(const std::string &channel, const std::string &message);
Expand Down
2 changes: 1 addition & 1 deletion src/client/clientevent.h
Expand Up @@ -116,7 +116,7 @@ struct ClientEvent
} delete_particlespawner;
struct
{
u32 id;
u32 server_id;
u8 type;
v2f *pos;
std::string *name;
Expand Down
17 changes: 7 additions & 10 deletions src/game.cpp
Expand Up @@ -2562,12 +2562,12 @@ 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 id = event->hudadd.id;

HudElement *e = player->getHud(id);

if (e != NULL) {
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()) {
delete event->hudadd.pos;
delete event->hudadd.name;
delete event->hudadd.scale;
Expand All @@ -2579,7 +2579,7 @@ void Game::handleClientEvent_HudAdd(ClientEvent *event, CameraOrientation *cam)
return;
}

e = new HudElement;
HudElement *e = new HudElement;
e->type = (HudElementType)event->hudadd.type;
e->pos = *event->hudadd.pos;
e->name = *event->hudadd.name;
Expand All @@ -2592,10 +2592,7 @@ void Game::handleClientEvent_HudAdd(ClientEvent *event, CameraOrientation *cam)
e->offset = *event->hudadd.offset;
e->world_pos = *event->hudadd.world_pos;
e->size = *event->hudadd.size;

u32 new_id = player->addHud(e);
//if this isn't true our huds aren't consistent
sanity_check(new_id == id);
hud_server_to_client[server_id] = player->addHud(e);

delete event->hudadd.pos;
delete event->hudadd.name;
Expand Down
6 changes: 2 additions & 4 deletions src/network/clientpackethandler.cpp
Expand Up @@ -1062,12 +1062,10 @@ void Client::handleCommand_HudAdd(NetworkPacket* pkt)
try {
*pkt >> size;
} catch(SerializationError &e) {};
u32 client_id = getEnv().getLocalPlayer()->getFreeHudID();
m_hud_server_to_client[server_id] = client_id;

ClientEvent *event = new ClientEvent();
event->type = CE_HUDADD;
event->hudadd.id = client_id;
event->hudadd.server_id = server_id;
event->hudadd.type = type;
event->hudadd.pos = new v2f(pos);
event->hudadd.name = new std::string(name);
Expand All @@ -1089,7 +1087,7 @@ void Client::handleCommand_HudRemove(NetworkPacket* pkt)

*pkt >> server_id;

std::unordered_map<u32, u32>::const_iterator i = m_hud_server_to_client.find(server_id);
auto i = m_hud_server_to_client.find(server_id);
if (i != m_hud_server_to_client.end()) {
int client_id = i->second;
m_hud_server_to_client.erase(i);
Expand Down

0 comments on commit 4f688d5

Please sign in to comment.