diff options
author | Loïc Blot <nerzhul@users.noreply.github.com> | 2018-03-30 18:32:52 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-30 18:32:52 +0200 |
commit | ce873108aa91d19104f46c5acd3350385e7a4541 (patch) | |
tree | 58672a3c803469de71c9ae270beb9a052ba5559a /src/event.h | |
parent | 2c490dddc037d7d1cf211bbf28309e31b0abdadd (diff) | |
download | minetest-ce873108aa91d19104f46c5acd3350385e7a4541.tar.gz minetest-ce873108aa91d19104f46c5acd3350385e7a4541.tar.bz2 minetest-ce873108aa91d19104f46c5acd3350385e7a4541.zip |
Client eventmanager refactor (#7179)
* Drop EventManager from GameDef & do some client cleanups
* EventManager is only used by Client. Don't expose it on Server & GameDef for nothing
* Drop Client::event() in favor of direct calls to getEventManager
* Cleanup some event put from new + put to put(new)
* MtEvent: add Type(u8) enum
* This will enhance event performance & ensure stricter type
* Drop MtEvent::checkIs (unused)
* clang-tidy reported fixes
* Code style
* Move event_manager.h to the client directory as it's only used by client
Add EventManager unittests + switch to unordered_map as order is not important here
Drop a unused function
Diffstat (limited to 'src/event.h')
-rw-r--r-- | src/event.h | 43 |
1 files changed, 23 insertions, 20 deletions
diff --git a/src/event.h b/src/event.h index 488152855..ae200978c 100644 --- a/src/event.h +++ b/src/event.h @@ -19,31 +19,36 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once +#import "irrlichttypes.h" + class MtEvent { public: - virtual ~MtEvent() = default; - //virtual MtEvent* clone(){ return new IEvent; } - virtual const char* getType() const = 0; - - MtEvent* checkIs(const std::string &type) + enum Type : u8 { - if(type == getType()) - return this; - return NULL; - } + VIEW_BOBBING_STEP = 0, + CAMERA_PUNCH_LEFT, + CAMERA_PUNCH_RIGHT, + PLAYER_FALLING_DAMAGE, + PLAYER_DAMAGE, + NODE_DUG, + PLAYER_JUMP, + PLAYER_REGAIN_GROUND, + TYPE_MAX, + }; + + virtual ~MtEvent() = default; + virtual Type getType() const = 0; }; // An event with no parameters and customizable name -class SimpleTriggerEvent: public MtEvent +class SimpleTriggerEvent : public MtEvent { - const char *type; + Type type; + public: - SimpleTriggerEvent(const char *type): - type(type) - {} - const char* getType() const - {return type;} + SimpleTriggerEvent(Type type) : type(type) {} + Type getType() const override { return type; } }; class MtEventReceiver @@ -60,9 +65,7 @@ class MtEventManager public: virtual ~MtEventManager() = default; virtual void put(MtEvent *e) = 0; - virtual void reg(const char *type, event_receive_func f, void *data) = 0; + virtual void reg(MtEvent::Type type, event_receive_func f, void *data) = 0; // If data==NULL, every occurence of f is deregistered. - virtual void dereg(const char *type, event_receive_func f, void *data) = 0; - virtual void reg(MtEventReceiver *r, const char *type) = 0; - virtual void dereg(MtEventReceiver *r, const char *type) = 0; + virtual void dereg(MtEvent::Type type, event_receive_func f, void *data) = 0; }; |