]> git.lizzy.rs Git - minetest.git/blobdiff - src/client/inputhandler.cpp
8x block meshes (#13133)
[minetest.git] / src / client / inputhandler.cpp
index 608a405a8a9baae21fc378a03ace302b557f757b..a6ba87e8d2b8526b28eab4e2bd07f3a4868ed09e 100644 (file)
@@ -35,7 +35,7 @@ void KeyCache::populate()
        key[KeyType::LEFT] = getKeySetting("keymap_left");
        key[KeyType::RIGHT] = getKeySetting("keymap_right");
        key[KeyType::JUMP] = getKeySetting("keymap_jump");
-       key[KeyType::SPECIAL1] = getKeySetting("keymap_special1");
+       key[KeyType::AUX1] = getKeySetting("keymap_aux1");
        key[KeyType::SNEAK] = getKeySetting("keymap_sneak");
        key[KeyType::DIG] = getKeySetting("keymap_dig");
        key[KeyType::PLACE] = getKeySetting("keymap_place");
@@ -60,6 +60,7 @@ void KeyCache::populate()
        key[KeyType::DEC_VOLUME] = getKeySetting("keymap_decrease_volume");
        key[KeyType::CINEMATIC] = getKeySetting("keymap_cinematic");
        key[KeyType::SCREENSHOT] = getKeySetting("keymap_screenshot");
+       key[KeyType::TOGGLE_BLOCK_BOUNDS] = getKeySetting("keymap_toggle_block_bounds");
        key[KeyType::TOGGLE_HUD] = getKeySetting("keymap_toggle_hud");
        key[KeyType::TOGGLE_CHAT] = getKeySetting("keymap_toggle_chat");
        key[KeyType::TOGGLE_FOG] = getKeySetting("keymap_toggle_fog");
@@ -113,17 +114,12 @@ bool MyEventReceiver::OnEvent(const SEvent &event)
        if (event.EventType == irr::EET_KEY_INPUT_EVENT) {
                const KeyPress &keyCode = event.KeyInput;
                if (keysListenedFor[keyCode]) {
-                               // If the key is being held down then the OS may
-                               // send a continuous stream of keydown events.
-                               // In this case, we don't want to let this
-                               // stream reach the application as it will cause
-                               // certain actions to repeat constantly.
                        if (event.KeyInput.PressedDown) {
-                               if (!IsKeyDown(keyCode)) {
-                                       keyWasDown.set(keyCode);
+                               if (!IsKeyDown(keyCode))
                                        keyWasPressed.set(keyCode);
-                               }
+
                                keyIsDown.set(keyCode);
+                               keyWasDown.set(keyCode);
                        } else {
                                if (IsKeyDown(keyCode))
                                        keyWasReleased.set(keyCode);
@@ -142,11 +138,8 @@ bool MyEventReceiver::OnEvent(const SEvent &event)
 #endif
 
        } else if (event.EventType == irr::EET_JOYSTICK_INPUT_EVENT) {
-               /* TODO add a check like:
-               if (event.JoystickEvent != joystick_we_listen_for)
-                       return false;
-               */
-               return joystick->handleEvent(event.JoystickEvent);
+               // joystick may be nullptr if game is launched with '--random-input' parameter
+               return joystick && joystick->handleEvent(event.JoystickEvent);
        } else if (event.EventType == irr::EET_MOUSE_INPUT_EVENT) {
                // Handle mouse events
                KeyPress key;
@@ -224,7 +217,7 @@ void RandomInputHandler::step(float dtime)
 {
        static RandomInputHandlerSimData rnd_data[] = {
                { "keymap_jump", 0.0f, 40 },
-               { "keymap_special1", 0.0f, 40 },
+               { "keymap_aux1", 0.0f, 40 },
                { "keymap_forward", 0.0f, 40 },
                { "keymap_left", 0.0f, 40 },
                { "keymap_dig", 0.0f, 30 },
@@ -247,4 +240,39 @@ void RandomInputHandler::step(float dtime)
                }
        }
        mousepos += mousespeed;
+       static bool useJoystick = false;
+       {
+               static float counterUseJoystick = 0;
+               counterUseJoystick -= dtime;
+               if (counterUseJoystick < 0.0) {
+                       counterUseJoystick = 5.0; // switch between joystick and keyboard direction input
+                       useJoystick = !useJoystick;
+               }
+       }
+       if (useJoystick) {
+               static float counterMovement = 0;
+               counterMovement -= dtime;
+               if (counterMovement < 0.0) {
+                       counterMovement = 0.1 * Rand(1, 40);
+                       movementSpeed = Rand(0,100)*0.01;
+                       movementDirection = Rand(-100, 100)*0.01 * M_PI;
+               }
+       } else {
+               bool f = keydown[keycache.key[KeyType::FORWARD]],
+                       l = keydown[keycache.key[KeyType::LEFT]];
+               if (f || l) {
+                       movementSpeed = 1.0f;
+                       if (f && !l)
+                               movementDirection = 0.0;
+                       else if (!f && l)
+                               movementDirection = -M_PI_2;
+                       else if (f && l)
+                               movementDirection = -M_PI_4;
+                       else
+                               movementDirection = 0.0;
+               } else {
+                       movementSpeed = 0.0;
+                       movementDirection = 0.0;
+               }
+       }
 }