From 6c14025b2d416105915440e114de927c26e925ac Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Fri, 23 Mar 2012 20:23:03 +0200 Subject: Add event manager and use it to trigger sounds --- src/event.h | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/event.h (limited to 'src/event.h') diff --git a/src/event.h b/src/event.h new file mode 100644 index 000000000..032cb2381 --- /dev/null +++ b/src/event.h @@ -0,0 +1,72 @@ +/* +Minetest-c55 +Copyright (C) 2012 celeron55, Perttu Ahola + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef EVENT_HEADER +#define EVENT_HEADER + +class MtEvent +{ +public: + virtual ~MtEvent(){}; + //virtual MtEvent* clone(){ return new IEvent; } + virtual const char* getType() const = 0; + + MtEvent* checkIs(const std::string &type) + { + if(type == getType()) + return this; + return NULL; + } +}; + +// An event with no parameters and customizable name +class SimpleTriggerEvent: public MtEvent +{ + const char *type; +public: + SimpleTriggerEvent(const char *type): + type(type) + {} + const char* getType() const + {return type;} +}; + +class MtEventReceiver +{ +public: + virtual ~MtEventReceiver(){}; + virtual void onEvent(MtEvent *e) = 0; +}; + +typedef void (*event_receive_func)(MtEvent *e, void *data); + +class MtEventManager +{ +public: + virtual ~MtEventManager(){}; + virtual void put(MtEvent *e) = 0; + virtual void reg(const char *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; +}; + +#endif + -- cgit v1.2.3