#pragma once #include #include #include namespace wowee { namespace core { class Input { public: static Input& getInstance(); void update(); void handleEvent(const SDL_Event& event); // Keyboard bool isKeyPressed(SDL_Scancode key) const; bool isKeyJustPressed(SDL_Scancode key) const; bool isKeyJustReleased(SDL_Scancode key) const; // Mouse bool isMouseButtonPressed(int button) const; bool isMouseButtonJustPressed(int button) const; bool isMouseButtonJustReleased(int button) const; glm::vec2 getMousePosition() const { return mousePosition; } glm::vec2 getMouseDelta() const { return mouseDelta; } float getMouseWheelDelta() const { return mouseWheelDelta; } bool isMouseLocked() const { return mouseLocked; } void setMouseLocked(bool locked); private: Input() = default; ~Input() = default; Input(const Input&) = delete; Input& operator=(const Input&) = delete; static constexpr int NUM_KEYS = SDL_NUM_SCANCODES; static constexpr int NUM_MOUSE_BUTTONS = 8; std::array currentKeyState = {}; std::array previousKeyState = {}; std::array currentMouseState = {}; std::array previousMouseState = {}; glm::vec2 mousePosition = glm::vec2(0.0f); glm::vec2 previousMousePosition = glm::vec2(0.0f); glm::vec2 mouseDelta = glm::vec2(0.0f); float mouseWheelDelta = 0.0f; bool mouseLocked = false; }; } // namespace core } // namespace wowee