]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/client/inputhandler.h
Merge branch 'master' of https://github.com/minetest/minetest
[dragonfireclient.git] / src / client / inputhandler.h
index 76e3c7b5b0e70e56ca5cb3c7f45ce74344bb4f3a..47a61d4b85ba86f6b5f454295170ab2ccfcdae6b 100644 (file)
@@ -30,6 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #endif
 
 class InputHandler;
+class TouchScreenGUI;
 
 /****************************************************************************
  Fast key cache for main game loop
@@ -152,8 +153,14 @@ class MyEventReceiver : public IEventReceiver
        // in the subsequent iteration of Game::processPlayerInteraction
        bool WasKeyReleased(const KeyPress &keycode) const { return keyWasReleased[keycode]; }
 
-       void listenForKey(const KeyPress &keyCode) { keysListenedFor.set(keyCode); }
-       void dontListenForKeys() { keysListenedFor.clear(); }
+       void listenForKey(const KeyPress &keyCode)
+       {
+               keysListenedFor.set(keyCode);
+       }
+       void dontListenForKeys()
+       {
+               keysListenedFor.clear();
+       }
 
        s32 getMouseWheel()
        {
@@ -189,15 +196,14 @@ class MyEventReceiver : public IEventReceiver
 #endif
        }
 
-       s32 mouse_wheel = 0;
-
        JoystickController *joystick = nullptr;
 
 #ifdef HAVE_TOUCHSCREENGUI
        TouchScreenGUI *m_touchscreengui;
 #endif
 
-private:
+       s32 mouse_wheel = 0;
+
        // The current state of keys
        KeyList keyIsDown;
 
@@ -235,6 +241,8 @@ class InputHandler
        }
 
        virtual bool isKeyDown(GameKeyType k) = 0;
+       virtual void setKeypress(const KeyPress &keyCode) = 0;
+       virtual void unsetKeypress(const KeyPress &keyCode) = 0;
        virtual bool wasKeyDown(GameKeyType k) = 0;
        virtual bool wasKeyPressed(GameKeyType k) = 0;
        virtual bool wasKeyReleased(GameKeyType k) = 0;
@@ -272,10 +280,25 @@ class RealInputHandler : public InputHandler
        {
                m_receiver->joystick = &joystick;
        }
+
+       virtual ~RealInputHandler()
+       {
+               m_receiver->joystick = nullptr;
+       }
+
        virtual bool isKeyDown(GameKeyType k)
        {
                return m_receiver->IsKeyDown(keycache.key[k]) || joystick.isKeyDown(k);
        }
+       virtual void setKeypress(const KeyPress &keyCode)
+       {
+               m_receiver->keyIsDown.set(keyCode);
+               m_receiver->keyWasDown.set(keyCode);
+       }
+       virtual void unsetKeypress(const KeyPress &keyCode)
+       {
+               m_receiver->keyIsDown.unset(keyCode);
+       }
        virtual bool wasKeyDown(GameKeyType k)
        {
                return m_receiver->WasKeyDown(keycache.key[k]) || joystick.wasKeyDown(k);
@@ -288,6 +311,7 @@ class RealInputHandler : public InputHandler
        {
                return m_receiver->WasKeyReleased(keycache.key[k]) || joystick.wasKeyReleased(k);
        }
+
        virtual float getMovementSpeed()
        {
                bool f = m_receiver->IsKeyDown(keycache.key[KeyType::FORWARD]),
@@ -307,6 +331,7 @@ class RealInputHandler : public InputHandler
                }
                return joystick.getMovementSpeed();
        }
+
        virtual float getMovementDirection()
        {
                float x = 0, z = 0;
@@ -326,10 +351,12 @@ class RealInputHandler : public InputHandler
                else
                        return joystick.getMovementDirection();
        }
+
        virtual bool cancelPressed()
        {
                return wasKeyDown(KeyType::ESC) || m_receiver->WasKeyDown(CancelKey);
        }
+
        virtual void clearWasKeyPressed()
        {
                m_receiver->clearWasKeyPressed();
@@ -338,17 +365,21 @@ class RealInputHandler : public InputHandler
        {
                m_receiver->clearWasKeyReleased();
        }
+
        virtual void listenForKey(const KeyPress &keyCode)
        {
                m_receiver->listenForKey(keyCode);
        }
-       virtual void dontListenForKeys() { m_receiver->dontListenForKeys(); }
+       virtual void dontListenForKeys()
+       {
+               m_receiver->dontListenForKeys();
+       }
+
        virtual v2s32 getMousePos()
        {
-               if (RenderingEngine::get_raw_device()->getCursorControl()) {
-                       return RenderingEngine::get_raw_device()
-                                       ->getCursorControl()
-                                       ->getPosition();
+               auto control = RenderingEngine::get_raw_device()->getCursorControl();
+               if (control) {
+                       return control->getPosition();
                }
 
                return m_mousepos;
@@ -356,16 +387,18 @@ class RealInputHandler : public InputHandler
 
        virtual void setMousePos(s32 x, s32 y)
        {
-               if (RenderingEngine::get_raw_device()->getCursorControl()) {
-                       RenderingEngine::get_raw_device()
-                                       ->getCursorControl()
-                                       ->setPosition(x, y);
+               auto control = RenderingEngine::get_raw_device()->getCursorControl();
+               if (control) {
+                       control->setPosition(x, y);
                } else {
                        m_mousepos = v2s32(x, y);
                }
        }
 
-       virtual s32 getMouseWheel() { return m_receiver->getMouseWheel(); }
+       virtual s32 getMouseWheel()
+       {
+               return m_receiver->getMouseWheel();
+       }
 
        void clear()
        {
@@ -389,12 +422,20 @@ class RandomInputHandler : public InputHandler
        }
 
        virtual bool isKeyDown(GameKeyType k) { return keydown[keycache.key[k]]; }
+       virtual void setKeypress(const KeyPress &keyCode)
+       {
+               keydown.set(keyCode);
+       }
+       virtual void unsetKeypress(const KeyPress &keyCode)
+       {
+               keydown.unset(keyCode);
+       }
        virtual bool wasKeyDown(GameKeyType k) { return false; }
        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 +449,6 @@ class RandomInputHandler : public InputHandler
        KeyList keydown;
        v2s32 mousepos;
        v2s32 mousespeed;
+       float movementSpeed;
+       float movementDirection;
 };