summaryrefslogtreecommitdiff
path: root/src/client.h
diff options
context:
space:
mode:
authorLoïc Blot <nerzhul@users.noreply.github.com>2017-08-28 20:02:23 +0200
committerGitHub <noreply@github.com>2017-08-28 20:02:23 +0200
commit5f38fe33f89e87b56ab95370c2f07fe6117b5eb0 (patch)
treee2a497bb99f37ce6baae56d2979a2ae957829dc2 /src/client.h
parent6fd8a27c91b09f51693243586af3615f962d1730 (diff)
downloadminetest-5f38fe33f89e87b56ab95370c2f07fe6117b5eb0.tar.gz
minetest-5f38fe33f89e87b56ab95370c2f07fe6117b5eb0.tar.bz2
minetest-5f38fe33f89e87b56ab95370c2f07fe6117b5eb0.zip
Clientevent refactor (#6320)
* Refactor clientevent structure * Move structure outside of client header * Create client events on heap not stack, this remove the ClientEvent object copy * Use clientEventHandler to route events
Diffstat (limited to 'src/client.h')
-rw-r--r--src/client.h141
1 files changed, 4 insertions, 137 deletions
diff --git a/src/client.h b/src/client.h
index 2ee81ea09..6f2d3371d 100644
--- a/src/client.h
+++ b/src/client.h
@@ -41,6 +41,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define CLIENT_CHAT_MESSAGE_LIMIT_PER_10S 10.0f
+struct ClientEvent;
struct MeshMakeData;
struct ChatMessage;
class MapBlockMesh;
@@ -68,137 +69,6 @@ enum LocalClientState {
LC_Ready
};
-enum ClientEventType
-{
- CE_NONE,
- CE_PLAYER_DAMAGE,
- CE_PLAYER_FORCE_MOVE,
- CE_DEATHSCREEN,
- CE_SHOW_FORMSPEC,
- CE_SHOW_LOCAL_FORMSPEC,
- CE_SPAWN_PARTICLE,
- CE_ADD_PARTICLESPAWNER,
- CE_DELETE_PARTICLESPAWNER,
- CE_HUDADD,
- CE_HUDRM,
- CE_HUDCHANGE,
- CE_SET_SKY,
- CE_OVERRIDE_DAY_NIGHT_RATIO,
- CE_CLOUD_PARAMS,
-};
-
-struct ClientEvent
-{
- ClientEventType type;
- union{
- //struct{
- //} none;
- struct{
- u8 amount;
- } player_damage;
- struct{
- f32 pitch;
- f32 yaw;
- } player_force_move;
- struct{
- bool set_camera_point_target;
- f32 camera_point_target_x;
- f32 camera_point_target_y;
- f32 camera_point_target_z;
- } deathscreen;
- struct{
- std::string *formspec;
- std::string *formname;
- } show_formspec;
- //struct{
- //} textures_updated;
- struct{
- v3f *pos;
- v3f *vel;
- v3f *acc;
- f32 expirationtime;
- f32 size;
- bool collisiondetection;
- bool collision_removal;
- bool vertical;
- std::string *texture;
- struct TileAnimationParams animation;
- u8 glow;
- } spawn_particle;
- struct{
- u16 amount;
- f32 spawntime;
- v3f *minpos;
- v3f *maxpos;
- v3f *minvel;
- v3f *maxvel;
- v3f *minacc;
- v3f *maxacc;
- f32 minexptime;
- f32 maxexptime;
- f32 minsize;
- f32 maxsize;
- bool collisiondetection;
- bool collision_removal;
- u16 attached_id;
- bool vertical;
- std::string *texture;
- u32 id;
- struct TileAnimationParams animation;
- u8 glow;
- } add_particlespawner;
- struct{
- u32 id;
- } delete_particlespawner;
- struct{
- u32 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;
- } hudadd;
- struct{
- u32 id;
- } hudrm;
- struct{
- u32 id;
- HudElementStat stat;
- v2f *v2fdata;
- std::string *sdata;
- u32 data;
- v3f *v3fdata;
- v2s32 * v2s32data;
- } hudchange;
- struct{
- video::SColor *bgcolor;
- std::string *type;
- std::vector<std::string> *params;
- bool clouds;
- } set_sky;
- struct{
- bool do_override;
- float ratio_f;
- } override_day_night_ratio;
- struct {
- f32 density;
- u32 color_bright;
- u32 color_ambient;
- f32 height;
- f32 thickness;
- f32 speed_x;
- f32 speed_y;
- } cloud_params;
- };
-};
-
/*
Packet counter
*/
@@ -450,7 +320,7 @@ public:
bool hasClientEvents() const { return !m_client_event_queue.empty(); }
// Get event from queue. If queue is empty, it triggers an assertion failure.
- ClientEvent getClientEvent();
+ ClientEvent * getClientEvent();
bool accessDenied() const { return m_access_denied; }
@@ -530,10 +400,7 @@ public:
ClientScripting *getScript() { return m_script; }
const bool moddingEnabled() const { return m_modding_enabled; }
- inline void pushToEventQueue(const ClientEvent &event)
- {
- m_client_event_queue.push(event);
- }
+ void pushToEventQueue(ClientEvent *event);
void showGameChat(bool show = true);
void showGameHud(bool show = true);
@@ -662,7 +529,7 @@ private:
bool m_access_denied = false;
bool m_access_denied_reconnect = false;
std::string m_access_denied_reason = "";
- std::queue<ClientEvent> m_client_event_queue;
+ std::queue<ClientEvent *> m_client_event_queue;
bool m_itemdef_received = false;
bool m_nodedef_received = false;
ClientMediaDownloader *m_media_downloader;