// // Created by slinky on 5/3/26. // #ifndef B_ENGINE_INPUTMANAGER_H #define B_ENGINE_INPUTMANAGER_H #include #include #include #include #include "GLFW/glfw3.h" using MouseDeltaCallback = std::function; enum KeyState { KEY_PRESSED, KEY_HELD, KEY_DOWN, KEY_RELEASED, }; struct InputRequirement { int key; KeyState state; }; struct InputAction { std::vector requirements{}; }; class InputManager { public: static bool mouseInit; static float lastMousePositionX; static float lastMousePositionY; static void mouse_pos_callback(GLFWwindow* window, double x, double y); static void add_mouse_listener(MouseDeltaCallback callback); static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods); static void generate_input_action(std::string_view actionName, std::initializer_list requirements); static bool check_action_performed(std::string_view actionName); static bool key_pressed(int key); static bool key_held(int key); static bool key_released(int key); static bool key_down(int key); static bool key_up(int key); }; #endif //B_ENGINE_INPUTMANAGER_H