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 #include "irrlichttypes.h"
23 
24 class MtEvent
25 {
26 public:
27 	enum Type : u8
28 	{
29 		VIEW_BOBBING_STEP = 0,
30 		CAMERA_PUNCH_LEFT,
31 		CAMERA_PUNCH_RIGHT,
32 		PLAYER_FALLING_DAMAGE,
33 		PLAYER_DAMAGE,
34 		NODE_DUG,
35 		PLAYER_JUMP,
36 		PLAYER_REGAIN_GROUND,
37 		TYPE_MAX,
38 	};
39 
40 	virtual ~MtEvent() = default;
41 	virtual Type getType() const = 0;
42 };
43 
44 // An event with no parameters and customizable name
45 class SimpleTriggerEvent : public MtEvent
46 {
47 	Type type;
48 
49 public:
SimpleTriggerEvent(Type type)50 	SimpleTriggerEvent(Type type) : type(type) {}
getType()51 	Type getType() const override { return type; }
52 };
53 
54 class MtEventReceiver
55 {
56 public:
57 	virtual ~MtEventReceiver() = default;
58 	virtual void onEvent(MtEvent *e) = 0;
59 };
60 
61 typedef void (*event_receive_func)(MtEvent *e, void *data);
62 
63 class MtEventManager
64 {
65 public:
66 	virtual ~MtEventManager() = default;
67 	virtual void put(MtEvent *e) = 0;
68 	virtual void reg(MtEvent::Type type, event_receive_func f, void *data) = 0;
69 	// If data==NULL, every occurence of f is deregistered.
70 	virtual void dereg(MtEvent::Type type, event_receive_func f, void *data) = 0;
71 };
72