]> git.lizzy.rs Git - dragonfireclient.git/blob - src/event.h
Getv3intfield: Fix logic of return bool
[dragonfireclient.git] / src / event.h
1 /*
2 Minetest
3 Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19
20 #pragma once
21
22 class MtEvent
23 {
24 public:
25         virtual ~MtEvent() = default;
26         //virtual MtEvent* clone(){ return new IEvent; }
27         virtual const char* getType() const = 0;
28
29         MtEvent* checkIs(const std::string &type)
30         {
31                 if(type == getType())
32                         return this;
33                 return NULL;
34         }
35 };
36
37 // An event with no parameters and customizable name
38 class SimpleTriggerEvent: public MtEvent
39 {
40         const char *type;
41 public:
42         SimpleTriggerEvent(const char *type):
43                 type(type)
44         {}
45         const char* getType() const
46         {return type;}
47 };
48
49 class MtEventReceiver
50 {
51 public:
52         virtual ~MtEventReceiver() = default;
53         virtual void onEvent(MtEvent *e) = 0;
54 };
55
56 typedef void (*event_receive_func)(MtEvent *e, void *data);
57
58 class MtEventManager
59 {
60 public:
61         virtual ~MtEventManager() = default;
62         virtual void put(MtEvent *e) = 0;
63         virtual void reg(const char *type, event_receive_func f, void *data) = 0;
64         // If data==NULL, every occurence of f is deregistered.
65         virtual void dereg(const char *type, event_receive_func f, void *data) = 0;
66         virtual void reg(MtEventReceiver *r, const char *type) = 0;
67         virtual void dereg(MtEventReceiver *r, const char *type) = 0;
68 };