#ifndef CORE_WINDOW_MANAGER_H #define CORE_WINDOW_MANAGER_H #include typedef bool (*WindowRunHandler)(void* data); typedef void (*WindowTickHandler)(void* data); typedef void (*WindowRenderHandler)(void* data, float lag); typedef struct { IntVector2 size; bool fullscreen; const char* name; } WindowOptions; bool openWindow(const WindowOptions* options); void closeWindow(void); void showWindow(void); void trapWindowCursor(void); void freeWindowCursor(void); bool isWindowCursorTrapped(void); const IntVector2* getWindowSize(void); bool hasWindowSizeChanged(void); bool shouldWindowClose(void); void setWindowRunHandler(WindowRunHandler wr, void* data); void setWindowTickHandler(WindowTickHandler t, void* data); void setWindowRenderHandler(WindowRenderHandler r, void* data); void setWindowNanosPerTick(i64 nanos); void runWindow(void); float getWindowTicksPerSecond(void); float getWindowFramesPerSecond(void); void setInputLimit(size_t limit); void resetInput(void); void enableInput(void); void disableInput(void); bool isInputEnabled(void); void fillInput(const char* s); size_t getInputCursor(void); void setInputCursor(size_t index); const char* getInputString(void); typedef size_t Button; Button addButton(const char* name); void bindKeyToButton(Button b, int key); void bindGamepadToButton(Button b, int gamepadButton); void bindMouseToButton(Button b, int mouseButton); Vector2 getLastMousePosition(void); Vector2 getMousePosition(void); Vector2 getLeftGamepadAxis(void); Vector2 getRightGamepadAxis(void); float getLeftGamepadTrigger(void); float getRightGamepadTrigger(void); bool isButtonDown(Button b); int getButtonDownTime(Button b); bool wasButtonReleased(Button b); const char* getButtonName(Button b); #endif