]> git.lizzy.rs Git - minetest.git/blob - src/game.h
Change error_message from wstring to string
[minetest.git] / src / game.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 #ifndef GAME_HEADER
21 #define GAME_HEADER
22
23 #include "irrlichttypes_extrabloated.h"
24 #include <string>
25 #include "keycode.h"
26 #include <list>
27
28 class KeyList : protected std::list<KeyPress>
29 {
30         typedef std::list<KeyPress> super;
31         typedef super::iterator iterator;
32         typedef super::const_iterator const_iterator;
33
34         virtual const_iterator find(const KeyPress &key) const
35         {
36                 const_iterator f(begin());
37                 const_iterator e(end());
38
39                 while (f != e) {
40                         if (*f == key)
41                                 return f;
42
43                         ++f;
44                 }
45
46                 return e;
47         }
48
49         virtual iterator find(const KeyPress &key)
50         {
51                 iterator f(begin());
52                 iterator e(end());
53
54                 while (f != e) {
55                         if (*f == key)
56                                 return f;
57
58                         ++f;
59                 }
60
61                 return e;
62         }
63
64 public:
65         void clear()
66         {
67                 super::clear();
68         }
69
70         void set(const KeyPress &key)
71         {
72                 if (find(key) == end())
73                         push_back(key);
74         }
75
76         void unset(const KeyPress &key)
77         {
78                 iterator p(find(key));
79
80                 if (p != end())
81                         erase(p);
82         }
83
84         void toggle(const KeyPress &key)
85         {
86                 iterator p(this->find(key));
87
88                 if (p != end())
89                         erase(p);
90                 else
91                         push_back(key);
92         }
93
94         bool operator[](const KeyPress &key) const
95         {
96                 return find(key) != end();
97         }
98 };
99
100 class InputHandler
101 {
102 public:
103         InputHandler()
104         {
105         }
106         virtual ~InputHandler()
107         {
108         }
109
110         virtual bool isKeyDown(const KeyPress &keyCode) = 0;
111         virtual bool wasKeyDown(const KeyPress &keyCode) = 0;
112
113         virtual v2s32 getMousePos() = 0;
114         virtual void setMousePos(s32 x, s32 y) = 0;
115
116         virtual bool getLeftState() = 0;
117         virtual bool getRightState() = 0;
118
119         virtual bool getLeftClicked() = 0;
120         virtual bool getRightClicked() = 0;
121         virtual void resetLeftClicked() = 0;
122         virtual void resetRightClicked() = 0;
123
124         virtual bool getLeftReleased() = 0;
125         virtual bool getRightReleased() = 0;
126         virtual void resetLeftReleased() = 0;
127         virtual void resetRightReleased() = 0;
128
129         virtual s32 getMouseWheel() = 0;
130
131         virtual void step(float dtime) {}
132
133         virtual void clear() {}
134 };
135
136 class ChatBackend;  /* to avoid having to include chat.h */
137 struct SubgameSpec;
138
139 void the_game(bool *kill,
140                 bool random_input,
141                 InputHandler *input,
142                 IrrlichtDevice *device,
143                 const std::string &map_dir,
144                 const std::string &playername,
145                 const std::string &password,
146                 const std::string &address, // If "", local server is used
147                 u16 port,
148                 std::string &error_message,
149                 ChatBackend &chat_backend,
150                 const SubgameSpec &gamespec, // Used for local game
151                 bool simple_singleplayer_mode);
152
153 #endif
154