1
0
mirror of https://github.com/luanti-org/luanti.git synced 2025-10-12 16:15:20 +02:00

Clean up ClientEvent hudadd/hudchange internals

This commit is contained in:
sfan5
2021-03-05 12:54:53 +01:00
parent dd228fd92e
commit 593d5f4465
3 changed files with 94 additions and 137 deletions

View File

@@ -52,6 +52,31 @@ enum ClientEventType : u8
CLIENTEVENT_MAX,
};
struct ClientEventHudAdd
{
u32 server_id;
u8 type;
v2f pos, scale;
std::string name;
std::string text, text2;
u32 number, item, dir;
v2f align, offset;
v3f world_pos;
v2s32 size;
s16 z_index;
};
struct ClientEventHudChange
{
u32 id;
HudElementStat stat;
v2f v2fdata;
std::string sdata;
u32 data;
v3f v3fdata;
v2s32 v2s32data;
};
struct ClientEvent
{
ClientEventType type;
@@ -93,38 +118,12 @@ struct ClientEvent
{
u32 id;
} delete_particlespawner;
struct
{
u32 server_id;
u8 type;
v2f *pos;
std::string *name;
v2f *scale;
std::string *text;
u32 number;
u32 item;
u32 dir;
v2f *align;
v2f *offset;
v3f *world_pos;
v2s32 *size;
s16 z_index;
std::string *text2;
} hudadd;
ClientEventHudAdd *hudadd;
struct
{
u32 id;
} hudrm;
struct
{
u32 id;
HudElementStat stat;
v2f *v2fdata;
std::string *sdata;
u32 data;
v3f *v3fdata;
v2s32 *v2s32data;
} hudchange;
ClientEventHudChange *hudchange;
SkyboxParams *set_sky;
struct
{

View File

@@ -2643,48 +2643,32 @@ void Game::handleClientEvent_HudAdd(ClientEvent *event, CameraOrientation *cam)
{
LocalPlayer *player = client->getEnv().getLocalPlayer();
u32 server_id = event->hudadd.server_id;
u32 server_id = event->hudadd->server_id;
// ignore if we already have a HUD with that ID
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;
delete event->hudadd.text;
delete event->hudadd.align;
delete event->hudadd.offset;
delete event->hudadd.world_pos;
delete event->hudadd.size;
delete event->hudadd.text2;
delete event->hudadd;
return;
}
HudElement *e = new HudElement;
e->type = (HudElementType)event->hudadd.type;
e->pos = *event->hudadd.pos;
e->name = *event->hudadd.name;
e->scale = *event->hudadd.scale;
e->text = *event->hudadd.text;
e->number = event->hudadd.number;
e->item = event->hudadd.item;
e->dir = event->hudadd.dir;
e->align = *event->hudadd.align;
e->offset = *event->hudadd.offset;
e->world_pos = *event->hudadd.world_pos;
e->size = *event->hudadd.size;
e->z_index = event->hudadd.z_index;
e->text2 = *event->hudadd.text2;
e->type = static_cast<HudElementType>(event->hudadd->type);
e->pos = event->hudadd->pos;
e->name = event->hudadd->name;
e->scale = event->hudadd->scale;
e->text = event->hudadd->text;
e->number = event->hudadd->number;
e->item = event->hudadd->item;
e->dir = event->hudadd->dir;
e->align = event->hudadd->align;
e->offset = event->hudadd->offset;
e->world_pos = event->hudadd->world_pos;
e->size = event->hudadd->size;
e->z_index = event->hudadd->z_index;
e->text2 = event->hudadd->text2;
m_hud_server_to_client[server_id] = player->addHud(e);
delete event->hudadd.pos;
delete event->hudadd.name;
delete event->hudadd.scale;
delete event->hudadd.text;
delete event->hudadd.align;
delete event->hudadd.offset;
delete event->hudadd.world_pos;
delete event->hudadd.size;
delete event->hudadd.text2;
delete event->hudadd;
}
void Game::handleClientEvent_HudRemove(ClientEvent *event, CameraOrientation *cam)
@@ -2706,77 +2690,52 @@ void Game::handleClientEvent_HudChange(ClientEvent *event, CameraOrientation *ca
HudElement *e = nullptr;
auto i = m_hud_server_to_client.find(event->hudchange.id);
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;
delete event->hudchange.v2s32data;
delete event->hudchange;
return;
}
switch (event->hudchange.stat) {
case HUD_STAT_POS:
e->pos = *event->hudchange.v2fdata;
break;
#define CASE_SET(statval, prop, dataprop) \
case statval: \
e->prop = event->hudchange->dataprop; \
break
case HUD_STAT_NAME:
e->name = *event->hudchange.sdata;
break;
switch (event->hudchange->stat) {
CASE_SET(HUD_STAT_POS, pos, v2fdata);
case HUD_STAT_SCALE:
e->scale = *event->hudchange.v2fdata;
break;
CASE_SET(HUD_STAT_NAME, name, sdata);
case HUD_STAT_TEXT:
e->text = *event->hudchange.sdata;
break;
CASE_SET(HUD_STAT_SCALE, scale, v2fdata);
case HUD_STAT_NUMBER:
e->number = event->hudchange.data;
break;
CASE_SET(HUD_STAT_TEXT, text, sdata);
case HUD_STAT_ITEM:
e->item = event->hudchange.data;
break;
CASE_SET(HUD_STAT_NUMBER, number, data);
case HUD_STAT_DIR:
e->dir = event->hudchange.data;
break;
CASE_SET(HUD_STAT_ITEM, item, data);
case HUD_STAT_ALIGN:
e->align = *event->hudchange.v2fdata;
break;
CASE_SET(HUD_STAT_DIR, dir, data);
case HUD_STAT_OFFSET:
e->offset = *event->hudchange.v2fdata;
break;
CASE_SET(HUD_STAT_ALIGN, align, v2fdata);
case HUD_STAT_WORLD_POS:
e->world_pos = *event->hudchange.v3fdata;
break;
CASE_SET(HUD_STAT_OFFSET, offset, v2fdata);
case HUD_STAT_SIZE:
e->size = *event->hudchange.v2s32data;
break;
CASE_SET(HUD_STAT_WORLD_POS, world_pos, v3fdata);
case HUD_STAT_Z_INDEX:
e->z_index = event->hudchange.data;
break;
CASE_SET(HUD_STAT_SIZE, size, v2s32data);
case HUD_STAT_TEXT2:
e->text2 = *event->hudchange.sdata;
break;
CASE_SET(HUD_STAT_Z_INDEX, z_index, data);
CASE_SET(HUD_STAT_TEXT2, text2, sdata);
}
delete event->hudchange.v3fdata;
delete event->hudchange.v2fdata;
delete event->hudchange.sdata;
delete event->hudchange.v2s32data;
#undef CASE_SET
delete event->hudchange;
}
void Game::handleClientEvent_SetSky(ClientEvent *event, CameraOrientation *cam)