mirror of
https://github.com/minetest/minetest.git
synced 2024-11-10 01:33:46 +01:00
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.
This commit is contained in:
parent
3a5959ae6b
commit
4f688d5616
@ -422,6 +422,11 @@ public:
|
|||||||
return m_csm_noderange_limit;
|
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 joinModChannel(const std::string &channel);
|
||||||
bool leaveModChannel(const std::string &channel);
|
bool leaveModChannel(const std::string &channel);
|
||||||
bool sendModChannelMessage(const std::string &channel, const std::string &message);
|
bool sendModChannelMessage(const std::string &channel, const std::string &message);
|
||||||
|
@ -116,7 +116,7 @@ struct ClientEvent
|
|||||||
} delete_particlespawner;
|
} delete_particlespawner;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
u32 id;
|
u32 server_id;
|
||||||
u8 type;
|
u8 type;
|
||||||
v2f *pos;
|
v2f *pos;
|
||||||
std::string *name;
|
std::string *name;
|
||||||
|
17
src/game.cpp
17
src/game.cpp
@ -2562,12 +2562,12 @@ void Game::handleClientEvent_HandleParticleEvent(ClientEvent *event,
|
|||||||
void Game::handleClientEvent_HudAdd(ClientEvent *event, CameraOrientation *cam)
|
void Game::handleClientEvent_HudAdd(ClientEvent *event, CameraOrientation *cam)
|
||||||
{
|
{
|
||||||
LocalPlayer *player = client->getEnv().getLocalPlayer();
|
LocalPlayer *player = client->getEnv().getLocalPlayer();
|
||||||
|
auto hud_server_to_client = client->getHUDTranslationMap();
|
||||||
|
|
||||||
u32 id = event->hudadd.id;
|
u32 server_id = event->hudadd.server_id;
|
||||||
|
// ignore if we already have a HUD with that ID
|
||||||
HudElement *e = player->getHud(id);
|
auto i = hud_server_to_client.find(server_id);
|
||||||
|
if (i != hud_server_to_client.end()) {
|
||||||
if (e != NULL) {
|
|
||||||
delete event->hudadd.pos;
|
delete event->hudadd.pos;
|
||||||
delete event->hudadd.name;
|
delete event->hudadd.name;
|
||||||
delete event->hudadd.scale;
|
delete event->hudadd.scale;
|
||||||
@ -2579,7 +2579,7 @@ void Game::handleClientEvent_HudAdd(ClientEvent *event, CameraOrientation *cam)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
e = new HudElement;
|
HudElement *e = new HudElement;
|
||||||
e->type = (HudElementType)event->hudadd.type;
|
e->type = (HudElementType)event->hudadd.type;
|
||||||
e->pos = *event->hudadd.pos;
|
e->pos = *event->hudadd.pos;
|
||||||
e->name = *event->hudadd.name;
|
e->name = *event->hudadd.name;
|
||||||
@ -2592,10 +2592,7 @@ void Game::handleClientEvent_HudAdd(ClientEvent *event, CameraOrientation *cam)
|
|||||||
e->offset = *event->hudadd.offset;
|
e->offset = *event->hudadd.offset;
|
||||||
e->world_pos = *event->hudadd.world_pos;
|
e->world_pos = *event->hudadd.world_pos;
|
||||||
e->size = *event->hudadd.size;
|
e->size = *event->hudadd.size;
|
||||||
|
hud_server_to_client[server_id] = player->addHud(e);
|
||||||
u32 new_id = player->addHud(e);
|
|
||||||
//if this isn't true our huds aren't consistent
|
|
||||||
sanity_check(new_id == id);
|
|
||||||
|
|
||||||
delete event->hudadd.pos;
|
delete event->hudadd.pos;
|
||||||
delete event->hudadd.name;
|
delete event->hudadd.name;
|
||||||
|
@ -1062,12 +1062,10 @@ void Client::handleCommand_HudAdd(NetworkPacket* pkt)
|
|||||||
try {
|
try {
|
||||||
*pkt >> size;
|
*pkt >> size;
|
||||||
} catch(SerializationError &e) {};
|
} catch(SerializationError &e) {};
|
||||||
u32 client_id = getEnv().getLocalPlayer()->getFreeHudID();
|
|
||||||
m_hud_server_to_client[server_id] = client_id;
|
|
||||||
|
|
||||||
ClientEvent *event = new ClientEvent();
|
ClientEvent *event = new ClientEvent();
|
||||||
event->type = CE_HUDADD;
|
event->type = CE_HUDADD;
|
||||||
event->hudadd.id = client_id;
|
event->hudadd.server_id = server_id;
|
||||||
event->hudadd.type = type;
|
event->hudadd.type = type;
|
||||||
event->hudadd.pos = new v2f(pos);
|
event->hudadd.pos = new v2f(pos);
|
||||||
event->hudadd.name = new std::string(name);
|
event->hudadd.name = new std::string(name);
|
||||||
@ -1089,7 +1087,7 @@ void Client::handleCommand_HudRemove(NetworkPacket* pkt)
|
|||||||
|
|
||||||
*pkt >> server_id;
|
*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()) {
|
if (i != m_hud_server_to_client.end()) {
|
||||||
int client_id = i->second;
|
int client_id = i->second;
|
||||||
m_hud_server_to_client.erase(i);
|
m_hud_server_to_client.erase(i);
|
||||||
|
Loading…
Reference in New Issue
Block a user