Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Fix issues with earlier CSM HUD commit (#6940)
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.