#ifndef InputManager_h__ #define InputManager_h__ #include #include #include "../Common.h" #include "EventBroker.h" #include "EKeyDown.h" #include "EKeyUp.h" #include "EKeyboardChar.h" #include "EMousePress.h" #include "EMouseRelease.h" #include "EMouseMove.h" #include "EMouseScroll.h" #include "ELockMouse.h" #include "EGamepadAxis.h" #include "EGamepadButton.h" #include "EFileDropped.h" class InputManager { public: InputManager(GLFWwindow* window, EventBroker* eventBroker) : m_GLFWWindow(window) , m_EventBroker(eventBroker) , m_CurrentKeyState() , m_LastKeyState() , m_CurrentMouseState() , m_LastMouseState() , m_CurrentMouseX(0), m_CurrentMouseY(0) , m_LastMouseX(0), m_LastMouseY(0) , m_CurrentMouseDeltaX(0), m_CurrentMouseDeltaY(0) , m_MouseLocked(false) { Initialize(); } void Initialize(); static const short MAX_GAMEPADS = 4; void Update(double dt); private: GLFWwindow* m_GLFWWindow; EventBroker* m_EventBroker; EventRelay m_ELockMouse; bool OnLockMouse(const Events::LockMouse &event); EventRelay m_EUnlockMouse; bool OnUnlockMouse(const Events::UnlockMouse &event); std::array m_CurrentKeyState; std::array m_LastKeyState; std::array m_CurrentMouseState; std::array m_LastMouseState; typedef std::array(Gamepad::Axis::LAST) + 1> GamepadAxisState; std::array m_CurrentGamepadAxisState; std::array m_LastGamepadAxisState; typedef std::array(Gamepad::Button::LAST) + 1> GamepadButtonState; std::array m_CurrentGamepadButtonState; std::array m_LastGamepadButtonState; double m_CurrentMouseX, m_CurrentMouseY; double m_LastMouseX, m_LastMouseY; double m_CurrentMouseDeltaX, m_CurrentMouseDeltaY; bool m_MouseLocked; void PublishGamepadAxisIfChanged(int gamepadID, Gamepad::Axis axis); void PublishGamepadButtonIfChanged(int gamepadID, Gamepad::Button button); static std::vector GLFWCharCallbackQueue; static void GLFWCharCallback(GLFWwindow* window, unsigned int c); static std::vector> GLFWScrollCallbackQueue; static void GLFWScrollCallback(GLFWwindow* window, double xoffset, double yoffset); static std::vector GLFWDropCallbackQueue; static void GLFWDropCallback(GLFWwindow* window, int count, const char* paths[]); }; #endif