#ifndef InputManager_h__ #define InputManager_h__ #include #include "EventBroker.h" #include "Events/KeyDown.h" #include "Events/KeyUp.h" #include "Events/MousePress.h" #include "Events/MouseRelease.h" #include "Events/MouseMove.h" #include "Events/LockMouse.h" #include "Events/GamepadAxis.h" #include "Events/GamepadButton.h" #include "Events/StopSound.h" #include "Events/PlayBGM.h" class InputManager { public: InputManager(GLFWwindow* window, std::shared_ptr<::EventBroker> eventBroker) : m_GLFWWindow(window) , 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; std::shared_ptr<::EventBroker> 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); }; #endif // InputManager_h__