mirror of
https://github.com/minetest/minetest.git
synced 2024-08-19 04:54:18 +02:00
Clean up ClientEvent hudadd/hudchange internals
This commit is contained in:
parent
dd228fd92e
commit
593d5f4465
@ -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
|
||||
{
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user