]> git.lizzy.rs Git - minetest.git/blob - src/mtevent.h
Add keybind to swap items between hands
[minetest.git] / src / mtevent.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 #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:
50         SimpleTriggerEvent(Type type) : type(type) {}
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 occurrence of f is deregistered.
70         virtual void dereg(MtEvent::Type type, event_receive_func f, void *data) = 0;
71 };