]> git.lizzy.rs Git - dragonfireclient.git/commitdiff
Clean up ClientEvent hudadd/hudchange internals
authorsfan5 <sfan5@live.de>
Fri, 5 Mar 2021 11:54:53 +0000 (12:54 +0100)
committersfan5 <sfan5@live.de>
Sat, 6 Mar 2021 22:02:10 +0000 (23:02 +0100)
src/client/clientevent.h
src/client/game.cpp
src/network/clientpackethandler.cpp

index 9bd31efce0eaaa7ac2aff53c88f16fa887935175..2215aecbd31fecceaff5080aea62d94bf1067f4c 100644 (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
                {
index 60ecb7d3e5c680291d00c03aa178bd19d2e4de35..27eaec3b892ad3aee3f5aad6a2eb2efbcb391b4d 100644 (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)
index 44bd81dac7205c2610f229c3f7d4a58f0da54df3..c8a16073265ef649010ddefc833f62a18a3e774d 100644 (file)
@@ -1041,9 +1041,6 @@ void Client::handleCommand_DeleteParticleSpawner(NetworkPacket* pkt)
 
 void Client::handleCommand_HudAdd(NetworkPacket* pkt)
 {
-       std::string datastring(pkt->getString(0), pkt->getSize());
-       std::istringstream is(datastring, std::ios_base::binary);
-
        u32 server_id;
        u8 type;
        v2f pos;
@@ -1070,22 +1067,23 @@ void Client::handleCommand_HudAdd(NetworkPacket* pkt)
        } catch(PacketError &e) {};
 
        ClientEvent *event = new ClientEvent();
-       event->type             = CE_HUDADD;
-       event->hudadd.server_id = server_id;
-       event->hudadd.type      = type;
-       event->hudadd.pos       = new v2f(pos);
-       event->hudadd.name      = new std::string(name);
-       event->hudadd.scale     = new v2f(scale);
-       event->hudadd.text      = new std::string(text);
-       event->hudadd.number    = number;
-       event->hudadd.item      = item;
-       event->hudadd.dir       = dir;
-       event->hudadd.align     = new v2f(align);
-       event->hudadd.offset    = new v2f(offset);
-       event->hudadd.world_pos = new v3f(world_pos);
-       event->hudadd.size      = new v2s32(size);
-       event->hudadd.z_index   = z_index;
-       event->hudadd.text2     = new std::string(text2);
+       event->type              = CE_HUDADD;
+       event->hudadd            = new ClientEventHudAdd();
+       event->hudadd->server_id = server_id;
+       event->hudadd->type      = type;
+       event->hudadd->pos       = pos;
+       event->hudadd->name      = name;
+       event->hudadd->scale     = scale;
+       event->hudadd->text      = text;
+       event->hudadd->number    = number;
+       event->hudadd->item      = item;
+       event->hudadd->dir       = dir;
+       event->hudadd->align     = align;
+       event->hudadd->offset    = offset;
+       event->hudadd->world_pos = world_pos;
+       event->hudadd->size      = size;
+       event->hudadd->z_index   = z_index;
+       event->hudadd->text2     = text2;
        m_client_event_queue.push(event);
 }
 
@@ -1126,14 +1124,15 @@ void Client::handleCommand_HudChange(NetworkPacket* pkt)
                *pkt >> intdata;
 
        ClientEvent *event = new ClientEvent();
-       event->type              = CE_HUDCHANGE;
-       event->hudchange.id      = server_id;
-       event->hudchange.stat    = (HudElementStat)stat;
-       event->hudchange.v2fdata = new v2f(v2fdata);
-       event->hudchange.v3fdata = new v3f(v3fdata);
-       event->hudchange.sdata   = new std::string(sdata);
-       event->hudchange.data    = intdata;
-       event->hudchange.v2s32data = new v2s32(v2s32data);
+       event->type                 = CE_HUDCHANGE;
+       event->hudchange            = new ClientEventHudChange();
+       event->hudchange->id        = server_id;
+       event->hudchange->stat      = static_cast<HudElementStat>(stat);
+       event->hudchange->v2fdata   = v2fdata;
+       event->hudchange->v3fdata   = v3fdata;
+       event->hudchange->sdata     = sdata;
+       event->hudchange->data      = intdata;
+       event->hudchange->v2s32data = v2s32data;
        m_client_event_queue.push(event);
 }