1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-07-22 17:18:39 +00:00

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
This commit is contained in:
Loïc Blot 2018-03-30 18:32:52 +02:00 committed by GitHub
parent 2c490dddc0
commit ce873108aa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 249 additions and 185 deletions

View file

@ -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;
};