#pragma once #include #include #include #include #include namespace Game { class Input { public: Input() = delete; static void update(); static bool isKeyPressed(SDL_Scancode key); static bool isKeyJustPressed(SDL_Scancode key); static bool isKeyJustReleased(SDL_Scancode key); static bool isMouseButtonPressed(Uint8 button); static bool isMouseButtonJustPressed(Uint8 button); static bool isMouseButtonJustReleased(Uint8 button); static float getMouseX(); static float getMouseY(); // Text input from SDL text-input events (pushed by window thread, consumed by game thread) static void pushText(const std::string& utf8); static void consumeText(std::vector& out); private: static const bool* mCurrentKeyStates; static std::vector mPreviousKeyStates; static int mNumKeys; static int mPrevNumKeys; static SDL_MouseButtonFlags mCurrentMouseButtonStates; static SDL_MouseButtonFlags mPreviousMouseButtonStates; static float mMouseX; static float mMouseY; // Text input queue and mutex (window thread writes via pushText, game thread reads via consumeText) static std::mutex mTextMutex; static std::vector mPendingText; }; }