diff options
author | NeroBurner <pyro4hell@gmail.com> | 2021-09-05 19:58:50 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-05 19:58:50 +0200 |
commit | 7f3401412eedc2a54b161f892b29d0a109b3a07b (patch) | |
tree | 4f7a84384633ea3949a320a2ce0c1c444b9a610f /src/client | |
parent | a3e32d81c5292c304b85efeeb3cf2227d6ddf191 (diff) | |
download | minetest-7f3401412eedc2a54b161f892b29d0a109b3a07b.tar.gz minetest-7f3401412eedc2a54b161f892b29d0a109b3a07b.tar.bz2 minetest-7f3401412eedc2a54b161f892b29d0a109b3a07b.zip |
Fix movement in random_input mode (#11592)
Diffstat (limited to 'src/client')
-rw-r--r-- | src/client/inputhandler.cpp | 42 | ||||
-rw-r--r-- | src/client/inputhandler.h | 6 |
2 files changed, 41 insertions, 7 deletions
diff --git a/src/client/inputhandler.cpp b/src/client/inputhandler.cpp index 980765efa..a6ba87e8d 100644 --- a/src/client/inputhandler.cpp +++ b/src/client/inputhandler.cpp @@ -138,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; @@ -243,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; + } + } } diff --git a/src/client/inputhandler.h b/src/client/inputhandler.h index 76e3c7b5b..e630b860e 100644 --- a/src/client/inputhandler.h +++ b/src/client/inputhandler.h @@ -393,8 +393,8 @@ public: virtual bool wasKeyPressed(GameKeyType k) { return false; } virtual bool wasKeyReleased(GameKeyType k) { return false; } virtual bool cancelPressed() { return false; } - virtual float getMovementSpeed() {return 0.0f;} - virtual float getMovementDirection() {return 0.0f;} + virtual float getMovementSpeed() { return movementSpeed; } + virtual float getMovementDirection() { return movementDirection; } virtual v2s32 getMousePos() { return mousepos; } virtual void setMousePos(s32 x, s32 y) { mousepos = v2s32(x, y); } @@ -408,4 +408,6 @@ private: KeyList keydown; v2s32 mousepos; v2s32 mousespeed; + float movementSpeed; + float movementDirection; }; |