Skip to content

Commit 99c9e7a

Browse files
committedJan 20, 2018
Game refactor [4/X]: keycache is now owned by InputHandler
* Make InputHandler own the key cache * Add a helper function InputHandler::cancelPressed to avoid multiple similar calls in game.cpp * Move RandomInputHandler::step definition into cpp file
1 parent f5a006d commit 99c9e7a

File tree

8 files changed

+200
-188
lines changed

8 files changed

+200
-188
lines changed
 

‎build/android/jni/Android.mk

+1
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ LOCAL_SRC_FILES := \
158158
jni/src/gui/guiTable.cpp \
159159
jni/src/guiscalingfilter.cpp \
160160
jni/src/gui/guiVolumeChange.cpp \
161+
jni/src/gui/profilergraph.cpp \
161162
jni/src/httpfetch.cpp \
162163
jni/src/hud.cpp \
163164
jni/src/imagefilters.cpp \

‎src/client/inputhandler.cpp

+110-47
Original file line numberDiff line numberDiff line change
@@ -29,57 +29,51 @@ void KeyCache::populate_nonchanging()
2929

3030
void KeyCache::populate()
3131
{
32-
key[KeyType::FORWARD] = getKeySetting("keymap_forward");
33-
key[KeyType::BACKWARD] = getKeySetting("keymap_backward");
34-
key[KeyType::LEFT] = getKeySetting("keymap_left");
35-
key[KeyType::RIGHT] = getKeySetting("keymap_right");
36-
key[KeyType::JUMP] = getKeySetting("keymap_jump");
37-
key[KeyType::SPECIAL1] = getKeySetting("keymap_special1");
38-
key[KeyType::SNEAK] = getKeySetting("keymap_sneak");
39-
40-
key[KeyType::AUTOFORWARD] = getKeySetting("keymap_autoforward");
41-
42-
key[KeyType::DROP] = getKeySetting("keymap_drop");
43-
key[KeyType::INVENTORY] = getKeySetting("keymap_inventory");
44-
key[KeyType::CHAT] = getKeySetting("keymap_chat");
45-
key[KeyType::CMD] = getKeySetting("keymap_cmd");
46-
key[KeyType::CMD_LOCAL] = getKeySetting("keymap_cmd_local");
47-
key[KeyType::CONSOLE] = getKeySetting("keymap_console");
48-
key[KeyType::MINIMAP] = getKeySetting("keymap_minimap");
49-
key[KeyType::FREEMOVE] = getKeySetting("keymap_freemove");
50-
key[KeyType::FASTMOVE] = getKeySetting("keymap_fastmove");
51-
key[KeyType::NOCLIP] = getKeySetting("keymap_noclip");
52-
key[KeyType::HOTBAR_PREV] = getKeySetting("keymap_hotbar_previous");
53-
key[KeyType::HOTBAR_NEXT] = getKeySetting("keymap_hotbar_next");
54-
key[KeyType::MUTE] = getKeySetting("keymap_mute");
55-
key[KeyType::INC_VOLUME] = getKeySetting("keymap_increase_volume");
56-
key[KeyType::DEC_VOLUME] = getKeySetting("keymap_decrease_volume");
57-
key[KeyType::CINEMATIC] = getKeySetting("keymap_cinematic");
58-
key[KeyType::SCREENSHOT] = getKeySetting("keymap_screenshot");
59-
key[KeyType::TOGGLE_HUD] = getKeySetting("keymap_toggle_hud");
60-
key[KeyType::TOGGLE_CHAT] = getKeySetting("keymap_toggle_chat");
61-
key[KeyType::TOGGLE_FORCE_FOG_OFF]
62-
= getKeySetting("keymap_toggle_force_fog_off");
63-
key[KeyType::TOGGLE_UPDATE_CAMERA]
64-
= getKeySetting("keymap_toggle_update_camera");
65-
key[KeyType::TOGGLE_DEBUG]
66-
= getKeySetting("keymap_toggle_debug");
67-
key[KeyType::TOGGLE_PROFILER]
68-
= getKeySetting("keymap_toggle_profiler");
69-
key[KeyType::CAMERA_MODE]
70-
= getKeySetting("keymap_camera_mode");
71-
key[KeyType::INCREASE_VIEWING_RANGE]
72-
= getKeySetting("keymap_increase_viewing_range_min");
73-
key[KeyType::DECREASE_VIEWING_RANGE]
74-
= getKeySetting("keymap_decrease_viewing_range_min");
75-
key[KeyType::RANGESELECT]
76-
= getKeySetting("keymap_rangeselect");
32+
key[KeyType::FORWARD] = getKeySetting("keymap_forward");
33+
key[KeyType::BACKWARD] = getKeySetting("keymap_backward");
34+
key[KeyType::LEFT] = getKeySetting("keymap_left");
35+
key[KeyType::RIGHT] = getKeySetting("keymap_right");
36+
key[KeyType::JUMP] = getKeySetting("keymap_jump");
37+
key[KeyType::SPECIAL1] = getKeySetting("keymap_special1");
38+
key[KeyType::SNEAK] = getKeySetting("keymap_sneak");
39+
40+
key[KeyType::AUTOFORWARD] = getKeySetting("keymap_autoforward");
41+
42+
key[KeyType::DROP] = getKeySetting("keymap_drop");
43+
key[KeyType::INVENTORY] = getKeySetting("keymap_inventory");
44+
key[KeyType::CHAT] = getKeySetting("keymap_chat");
45+
key[KeyType::CMD] = getKeySetting("keymap_cmd");
46+
key[KeyType::CMD_LOCAL] = getKeySetting("keymap_cmd_local");
47+
key[KeyType::CONSOLE] = getKeySetting("keymap_console");
48+
key[KeyType::MINIMAP] = getKeySetting("keymap_minimap");
49+
key[KeyType::FREEMOVE] = getKeySetting("keymap_freemove");
50+
key[KeyType::FASTMOVE] = getKeySetting("keymap_fastmove");
51+
key[KeyType::NOCLIP] = getKeySetting("keymap_noclip");
52+
key[KeyType::HOTBAR_PREV] = getKeySetting("keymap_hotbar_previous");
53+
key[KeyType::HOTBAR_NEXT] = getKeySetting("keymap_hotbar_next");
54+
key[KeyType::MUTE] = getKeySetting("keymap_mute");
55+
key[KeyType::INC_VOLUME] = getKeySetting("keymap_increase_volume");
56+
key[KeyType::DEC_VOLUME] = getKeySetting("keymap_decrease_volume");
57+
key[KeyType::CINEMATIC] = getKeySetting("keymap_cinematic");
58+
key[KeyType::SCREENSHOT] = getKeySetting("keymap_screenshot");
59+
key[KeyType::TOGGLE_HUD] = getKeySetting("keymap_toggle_hud");
60+
key[KeyType::TOGGLE_CHAT] = getKeySetting("keymap_toggle_chat");
61+
key[KeyType::TOGGLE_FORCE_FOG_OFF] = getKeySetting("keymap_toggle_force_fog_off");
62+
key[KeyType::TOGGLE_UPDATE_CAMERA] = getKeySetting("keymap_toggle_update_camera");
63+
key[KeyType::TOGGLE_DEBUG] = getKeySetting("keymap_toggle_debug");
64+
key[KeyType::TOGGLE_PROFILER] = getKeySetting("keymap_toggle_profiler");
65+
key[KeyType::CAMERA_MODE] = getKeySetting("keymap_camera_mode");
66+
key[KeyType::INCREASE_VIEWING_RANGE] =
67+
getKeySetting("keymap_increase_viewing_range_min");
68+
key[KeyType::DECREASE_VIEWING_RANGE] =
69+
getKeySetting("keymap_decrease_viewing_range_min");
70+
key[KeyType::RANGESELECT] = getKeySetting("keymap_rangeselect");
7771
key[KeyType::ZOOM] = getKeySetting("keymap_zoom");
7872

7973
key[KeyType::QUICKTUNE_NEXT] = getKeySetting("keymap_quicktune_next");
8074
key[KeyType::QUICKTUNE_PREV] = getKeySetting("keymap_quicktune_prev");
81-
key[KeyType::QUICKTUNE_INC] = getKeySetting("keymap_quicktune_inc");
82-
key[KeyType::QUICKTUNE_DEC] = getKeySetting("keymap_quicktune_dec");
75+
key[KeyType::QUICKTUNE_INC] = getKeySetting("keymap_quicktune_inc");
76+
key[KeyType::QUICKTUNE_DEC] = getKeySetting("keymap_quicktune_dec");
8377

8478
for (int i = 0; i < 23; i++) {
8579
std::string slot_key_name = "keymap_slot" + std::to_string(i + 1);
@@ -191,3 +185,72 @@ s32 RandomInputHandler::Rand(s32 min, s32 max)
191185
{
192186
return (myrand() % (max - min + 1)) + min;
193187
}
188+
189+
void RandomInputHandler::step(float dtime)
190+
{
191+
{
192+
static float counter1 = 0;
193+
counter1 -= dtime;
194+
if (counter1 < 0.0) {
195+
counter1 = 0.1 * Rand(1, 40);
196+
keydown.toggle(getKeySetting("keymap_jump"));
197+
}
198+
}
199+
{
200+
static float counter1 = 0;
201+
counter1 -= dtime;
202+
if (counter1 < 0.0) {
203+
counter1 = 0.1 * Rand(1, 40);
204+
keydown.toggle(getKeySetting("keymap_special1"));
205+
}
206+
}
207+
{
208+
static float counter1 = 0;
209+
counter1 -= dtime;
210+
if (counter1 < 0.0) {
211+
counter1 = 0.1 * Rand(1, 40);
212+
keydown.toggle(getKeySetting("keymap_forward"));
213+
}
214+
}
215+
{
216+
static float counter1 = 0;
217+
counter1 -= dtime;
218+
if (counter1 < 0.0) {
219+
counter1 = 0.1 * Rand(1, 40);
220+
keydown.toggle(getKeySetting("keymap_left"));
221+
}
222+
}
223+
{
224+
static float counter1 = 0;
225+
counter1 -= dtime;
226+
if (counter1 < 0.0) {
227+
counter1 = 0.1 * Rand(1, 20);
228+
mousespeed = v2s32(Rand(-20, 20), Rand(-15, 20));
229+
}
230+
}
231+
{
232+
static float counter1 = 0;
233+
counter1 -= dtime;
234+
if (counter1 < 0.0) {
235+
counter1 = 0.1 * Rand(1, 30);
236+
leftdown = !leftdown;
237+
if (leftdown)
238+
leftclicked = true;
239+
if (!leftdown)
240+
leftreleased = true;
241+
}
242+
}
243+
{
244+
static float counter1 = 0;
245+
counter1 -= dtime;
246+
if (counter1 < 0.0) {
247+
counter1 = 0.1 * Rand(1, 15);
248+
rightdown = !rightdown;
249+
if (rightdown)
250+
rightclicked = true;
251+
if (!rightdown)
252+
rightreleased = true;
253+
}
254+
}
255+
mousepos += mousespeed;
256+
}

‎src/client/inputhandler.h

+33-83
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ class InputHandler;
4242
* (up to 10x faster) key lookup is an asset. Other parts of the codebase
4343
* (e.g. formspecs) should continue using getKeySetting().
4444
*/
45-
struct KeyCache {
45+
struct KeyCache
46+
{
4647

4748
KeyCache()
4849
{
@@ -210,12 +211,17 @@ class MyEventReceiver : public IEventReceiver
210211
class InputHandler
211212
{
212213
public:
213-
InputHandler() = default;
214+
InputHandler()
215+
{
216+
keycache.handler = this;
217+
keycache.populate();
218+
}
214219

215220
virtual ~InputHandler() = default;
216221

217-
virtual bool isKeyDown(const KeyPress &keyCode) = 0;
218-
virtual bool wasKeyDown(const KeyPress &keyCode) = 0;
222+
virtual bool isKeyDown(GameKeyType k) = 0;
223+
virtual bool wasKeyDown(GameKeyType k) = 0;
224+
virtual bool cancelPressed() = 0;
219225

220226
virtual void listenForKey(const KeyPress &keyCode) {}
221227
virtual void dontListenForKeys() {}
@@ -243,6 +249,7 @@ class InputHandler
243249
virtual void clear() {}
244250

245251
JoystickController joystick;
252+
KeyCache keycache;
246253
};
247254
/*
248255
Separated input handler
@@ -255,13 +262,17 @@ class RealInputHandler : public InputHandler
255262
{
256263
m_receiver->joystick = &joystick;
257264
}
258-
virtual bool isKeyDown(const KeyPress &keyCode)
265+
virtual bool isKeyDown(GameKeyType k)
266+
{
267+
return m_receiver->IsKeyDown(keycache.key[k]) || joystick.isKeyDown(k);
268+
}
269+
virtual bool wasKeyDown(GameKeyType k)
259270
{
260-
return m_receiver->IsKeyDown(keyCode);
271+
return m_receiver->WasKeyDown(keycache.key[k]) || joystick.wasKeyDown(k);
261272
}
262-
virtual bool wasKeyDown(const KeyPress &keyCode)
273+
virtual bool cancelPressed()
263274
{
264-
return m_receiver->WasKeyDown(keyCode);
275+
return wasKeyDown(KeyType::ESC) || m_receiver->WasKeyDown(CancelKey);
265276
}
266277
virtual void listenForKey(const KeyPress &keyCode)
267278
{
@@ -301,30 +312,35 @@ class RealInputHandler : public InputHandler
301312

302313
virtual bool getLeftClicked()
303314
{
304-
return m_receiver->leftclicked || joystick.getWasKeyDown(KeyType::MOUSE_L);
315+
return m_receiver->leftclicked ||
316+
joystick.getWasKeyDown(KeyType::MOUSE_L);
305317
}
306318
virtual bool getRightClicked()
307319
{
308-
return m_receiver->rightclicked || joystick.getWasKeyDown(KeyType::MOUSE_R);
320+
return m_receiver->rightclicked ||
321+
joystick.getWasKeyDown(KeyType::MOUSE_R);
309322
}
310323

311324
virtual void resetLeftClicked()
312325
{
313326
m_receiver->leftclicked = false;
314327
joystick.clearWasKeyDown(KeyType::MOUSE_L);
315328
}
316-
virtual void resetRightClicked() {
329+
virtual void resetRightClicked()
330+
{
317331
m_receiver->rightclicked = false;
318332
joystick.clearWasKeyDown(KeyType::MOUSE_R);
319333
}
320334

321335
virtual bool getLeftReleased()
322336
{
323-
return m_receiver->leftreleased || joystick.wasKeyReleased(KeyType::MOUSE_L);
337+
return m_receiver->leftreleased ||
338+
joystick.wasKeyReleased(KeyType::MOUSE_L);
324339
}
325340
virtual bool getRightReleased()
326341
{
327-
return m_receiver->rightreleased || joystick.wasKeyReleased(KeyType::MOUSE_R);
342+
return m_receiver->rightreleased ||
343+
joystick.wasKeyReleased(KeyType::MOUSE_R);
328344
}
329345

330346
virtual void resetLeftReleased()
@@ -356,8 +372,9 @@ class RandomInputHandler : public InputHandler
356372
public:
357373
RandomInputHandler() = default;
358374

359-
virtual bool isKeyDown(const KeyPress &keyCode) { return keydown[keyCode]; }
360-
virtual bool wasKeyDown(const KeyPress &keyCode) { return false; }
375+
virtual bool isKeyDown(GameKeyType k) { return keydown[keycache.key[k]]; }
376+
virtual bool wasKeyDown(GameKeyType k) { return false; }
377+
virtual bool cancelPressed() { return false; }
361378
virtual v2s32 getMousePos() { return mousepos; }
362379
virtual void setMousePos(s32 x, s32 y) { mousepos = v2s32(x, y); }
363380

@@ -376,74 +393,7 @@ class RandomInputHandler : public InputHandler
376393

377394
virtual s32 getMouseWheel() { return 0; }
378395

379-
virtual void step(float dtime)
380-
{
381-
{
382-
static float counter1 = 0;
383-
counter1 -= dtime;
384-
if (counter1 < 0.0) {
385-
counter1 = 0.1 * Rand(1, 40);
386-
keydown.toggle(getKeySetting("keymap_jump"));
387-
}
388-
}
389-
{
390-
static float counter1 = 0;
391-
counter1 -= dtime;
392-
if (counter1 < 0.0) {
393-
counter1 = 0.1 * Rand(1, 40);
394-
keydown.toggle(getKeySetting("keymap_special1"));
395-
}
396-
}
397-
{
398-
static float counter1 = 0;
399-
counter1 -= dtime;
400-
if (counter1 < 0.0) {
401-
counter1 = 0.1 * Rand(1, 40);
402-
keydown.toggle(getKeySetting("keymap_forward"));
403-
}
404-
}
405-
{
406-
static float counter1 = 0;
407-
counter1 -= dtime;
408-
if (counter1 < 0.0) {
409-
counter1 = 0.1 * Rand(1, 40);
410-
keydown.toggle(getKeySetting("keymap_left"));
411-
}
412-
}
413-
{
414-
static float counter1 = 0;
415-
counter1 -= dtime;
416-
if (counter1 < 0.0) {
417-
counter1 = 0.1 * Rand(1, 20);
418-
mousespeed = v2s32(Rand(-20, 20), Rand(-15, 20));
419-
}
420-
}
421-
{
422-
static float counter1 = 0;
423-
counter1 -= dtime;
424-
if (counter1 < 0.0) {
425-
counter1 = 0.1 * Rand(1, 30);
426-
leftdown = !leftdown;
427-
if (leftdown)
428-
leftclicked = true;
429-
if (!leftdown)
430-
leftreleased = true;
431-
}
432-
}
433-
{
434-
static float counter1 = 0;
435-
counter1 -= dtime;
436-
if (counter1 < 0.0) {
437-
counter1 = 0.1 * Rand(1, 15);
438-
rightdown = !rightdown;
439-
if (rightdown)
440-
rightclicked = true;
441-
if (!rightdown)
442-
rightreleased = true;
443-
}
444-
}
445-
mousepos += mousespeed;
446-
}
396+
virtual void step(float dtime);
447397

448398
s32 Rand(s32 min, s32 max);
449399

0 commit comments

Comments
 (0)
Please sign in to comment.