mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-11-04 01:05:48 +01:00 
			
		
		
		
	Clean up ClientEvent hudadd/hudchange internals
This commit is contained in:
		@@ -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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user