Browse Source

mouse support

Kajetan Johannes Hammerle 3 years ago
parent
commit
3e5c72059c
5 changed files with 36 additions and 158 deletions
  1. 23 5
      client/input/Controller.cpp
  2. 12 1
      client/input/Controller.h
  3. 0 84
      client/input/MouseButtons.cpp
  4. 0 67
      client/input/MouseButtons.h
  5. 1 1
      gaming-core

+ 23 - 5
client/input/Controller.cpp

@@ -1,16 +1,34 @@
 #include "client/input/Controller.h"
 
-Controller::Controller(Buttons& b) : list(b.get()), left(b.add(GLFW_KEY_A, "Left")), right(b.add(GLFW_KEY_D, "Right")),
-up(b.add(GLFW_KEY_W, "X")), down(b.add(GLFW_KEY_S, "Y")), jump(b.add(GLFW_KEY_SPACE, "L")),
-sneak(b.add(GLFW_KEY_LEFT_SHIFT, "R")), camLeft(b.add(GLFW_KEY_LEFT, "Start")),
-camRight(b.add(GLFW_KEY_RIGHT, "Select")), camUp(b.add(GLFW_KEY_UP, "Left")), camDown(b.add(GLFW_KEY_DOWN, "Right")) {
+Controller::Controller(Buttons& b)
+    : buttons(b), list(b.get()), left(b.add(GLFW_KEY_A, "Left")),
+      right(b.add(GLFW_KEY_D, "Right")), up(b.add(GLFW_KEY_W, "X")),
+      down(b.add(GLFW_KEY_S, "Y")), jump(b.add(GLFW_KEY_SPACE, "L")),
+      sneak(b.add(GLFW_KEY_LEFT_SHIFT, "R")),
+      camLeft(b.add(GLFW_KEY_LEFT, "Start")),
+      camRight(b.add(GLFW_KEY_RIGHT, "Select")),
+      camUp(b.add(GLFW_KEY_UP, "Left")), camDown(b.add(GLFW_KEY_DOWN, "Right")),
+      mouseList(b.getMouse()),
+      leftClick(b.addMouse(GLFW_MOUSE_BUTTON_LEFT, "Left Click")),
+      rightClick(b.addMouse(GLFW_MOUSE_BUTTON_RIGHT, "Right Click")) {
     b.mapGamepadAxis(left, -0.5f, GLFW_GAMEPAD_AXIS_LEFT_X);
     b.mapGamepadAxis(right, 0.5f, GLFW_GAMEPAD_AXIS_LEFT_X);
     b.mapGamepadAxis(up, -0.5f, GLFW_GAMEPAD_AXIS_LEFT_Y);
     b.mapGamepadAxis(down, 0.5f, GLFW_GAMEPAD_AXIS_LEFT_Y);
-    
+
     b.mapGamepadAxis(camUp, -0.5f, GLFW_GAMEPAD_AXIS_RIGHT_Y);
     b.mapGamepadAxis(camDown, 0.5f, GLFW_GAMEPAD_AXIS_RIGHT_Y);
     b.mapGamepadAxis(camLeft, -0.5f, GLFW_GAMEPAD_AXIS_RIGHT_X);
     b.mapGamepadAxis(camRight, 0.5f, GLFW_GAMEPAD_AXIS_RIGHT_X);
+}
+
+Vector2 Controller::getMouse() const {
+    return Vector2(static_cast<float>(buttons.getMouseX()),
+                   static_cast<float>(buttons.getMouseY()));
+}
+
+Vector2 Controller::getMouseChange() const {
+    return Vector2(
+        static_cast<float>(buttons.getMouseX() - buttons.getLastMouseX()),
+        static_cast<float>(buttons.getMouseY() - buttons.getLastMouseY()));
 }

+ 12 - 1
client/input/Controller.h

@@ -2,8 +2,12 @@
 #define CONTROLLER_H
 
 #include "gaming-core/input/Buttons.h"
+#include "gaming-core/math/Vector.h"
 
-struct Controller {
+class Controller {
+    Buttons& buttons;
+
+public:
     const ButtonList& list;
     const Button& left;
     const Button& right;
@@ -16,7 +20,14 @@ struct Controller {
     const Button& camUp;
     const Button& camDown;
 
+    const MouseList& mouseList;
+    const Button& leftClick;
+    const Button& rightClick;
+
     Controller(Buttons& buttons);
+
+    Vector2 getMouse() const;
+    Vector2 getMouseChange() const;
 };
 
 #endif

+ 0 - 84
client/input/MouseButtons.cpp

@@ -1,84 +0,0 @@
-#include <GLFW/glfw3.h>
-
-#include "client/input/MouseButtons.h"
-
-MouseButtons::MouseButton::MouseButton() : down(false), shouldRelease(false), downTime(0) {
-}
-
-bool MouseButtons::MouseButton::isDown() const {
-    return down;
-}
-
-bool MouseButtons::MouseButton::isReleased() const {
-    return shouldRelease;
-}
-
-int MouseButtons::MouseButton::getDownTime() const {
-    return downTime;
-}
-
-std::ostream& operator<<(std::ostream& os, const MouseButtons::MouseButton& m) {
-    os << "Mouse(down: " << m.isDown() << ", release: " << m.isReleased() <<
-            ", time: " << m.getDownTime() << ")";
-    return os;
-}
-
-MouseButtons::MouseButtons() : primary(buttons[0]), secondary(buttons[1]), middle(buttons[2]), lastX(0), lastY(0),
-x(0), y(0), updateLast(true) {
-    buttons[0].glfwButton = GLFW_MOUSE_BUTTON_1;
-    buttons[1].glfwButton = GLFW_MOUSE_BUTTON_2;
-    buttons[2].glfwButton = GLFW_MOUSE_BUTTON_3;
-}
-
-double MouseButtons::getLastX() const {
-    return lastX;
-}
-
-double MouseButtons::getLastY() const {
-    return lastY;
-}
-
-double MouseButtons::getX() const {
-    return x;
-}
-
-double MouseButtons::getY() const {
-    return y;
-}
-
-void MouseButtons::release(int button) {
-    for(MouseButton& k : buttons) {
-        if(k.glfwButton == button) {
-            k.shouldRelease = true;
-        }
-    }
-}
-
-void MouseButtons::press(int button) {
-    for(MouseButton& k : buttons) {
-        if(k.glfwButton == button) {
-            k.down = true;
-            k.shouldRelease = false;
-        }
-    }
-}
-
-void MouseButtons::move(double x, double y) {
-    MouseButtons::x = x;
-    MouseButtons::y = y;
-    updateLast = false;
-}
-
-void MouseButtons::tick() {
-    if(updateLast) {
-        lastX = x;
-        lastY = y;
-    }
-    updateLast = true;
-    for(MouseButton& k : buttons) {
-        k.downTime += k.down;
-        k.downTime *= k.down;
-        k.down = k.down && !k.shouldRelease;
-        k.shouldRelease = false;
-    }
-}

+ 0 - 67
client/input/MouseButtons.h

@@ -1,67 +0,0 @@
-#ifndef MOUSEBUTTONS_H
-#define MOUSEBUTTONS_H
-
-#include <iostream>
-#include <array>
-
-class MouseButtons final {
-public:
-
-    class MouseButton final {
-    public:
-        friend class MouseButtons;
-
-        bool isDown() const;
-        bool isReleased() const;
-        int getDownTime() const;
-
-    private:
-        MouseButton();
-        MouseButton(const MouseButton&) = delete;
-        MouseButton(MouseButton&&) = delete;
-        MouseButton& operator=(const MouseButton&) = delete;
-        MouseButton& operator=(MouseButton&&) = delete;
-
-        int glfwButton;
-        bool down;
-        bool shouldRelease;
-        int downTime;
-    };
-
-private:
-    MouseButton buttons[3];
-
-public:
-    MouseButtons();
-
-    double getLastX() const;
-    double getLastY() const;
-    double getX() const;
-    double getY() const;
-
-    const MouseButton& primary;
-    const MouseButton& secondary;
-    const MouseButton& middle;
-
-    void release(int button);
-    void press(int button);
-    void move(double x, double y);
-    void tick();
-
-private:
-    MouseButtons(const MouseButtons&) = delete;
-    MouseButtons& operator=(const MouseButtons&) = delete;
-    MouseButtons(MouseButtons&&) = delete;
-    MouseButtons& operator=(MouseButtons&&) = delete;
-
-    double lastX;
-    double lastY;
-    double x;
-    double y;
-    bool updateLast;
-};
-
-std::ostream& operator<<(std::ostream& os, const MouseButtons::MouseButton& m);
-
-#endif
-

+ 1 - 1
gaming-core

@@ -1 +1 @@
-Subproject commit 4d90e6c85950353937e5550fec81406a074410b7
+Subproject commit cc650ea739ef7837404d7e8f0c5676df2402c2ea