Line data Source code
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 4 : 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 62989 : virtual const_iterator find(const KeyPress &key) const
35 : {
36 62989 : const_iterator f(begin());
37 62989 : const_iterator e(end());
38 :
39 328165 : while (f != e) {
40 134197 : if (*f == key)
41 1609 : return f;
42 :
43 132588 : ++f;
44 : }
45 :
46 61380 : return e;
47 : }
48 :
49 255 : virtual iterator find(const KeyPress &key)
50 : {
51 255 : iterator f(begin());
52 255 : iterator e(end());
53 :
54 509 : while (f != e) {
55 352 : if (*f == key)
56 225 : return f;
57 :
58 127 : ++f;
59 : }
60 :
61 30 : return e;
62 : }
63 :
64 : public:
65 44 : void clear()
66 : {
67 44 : super::clear();
68 44 : }
69 :
70 230 : void set(const KeyPress &key)
71 : {
72 230 : if (find(key) == end())
73 30 : push_back(key);
74 230 : }
75 :
76 25 : void unset(const KeyPress &key)
77 : {
78 25 : iterator p(find(key));
79 :
80 25 : if (p != end())
81 25 : erase(p);
82 25 : }
83 :
84 0 : void toggle(const KeyPress &key)
85 : {
86 0 : iterator p(this->find(key));
87 :
88 0 : if (p != end())
89 0 : erase(p);
90 : else
91 0 : push_back(key);
92 0 : }
93 :
94 62989 : bool operator[](const KeyPress &key) const
95 : {
96 62989 : return find(key) != end();
97 : }
98 : };
99 :
100 : class InputHandler
101 : {
102 : public:
103 1 : InputHandler()
104 1 : {
105 1 : }
106 1 : virtual ~InputHandler()
107 1 : {
108 1 : }
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 1166 : virtual void step(float dtime) {}
132 :
133 0 : 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 :
|