diff --git a/include/vkcv/Window.hpp b/include/vkcv/Window.hpp index 7dc6c1b7dc8fef4d5de7de5b0a9976bf714e6ac2..d2b5854bce056bc50f8c08c55e6bcdd771bfc13b 100644 --- a/include/vkcv/Window.hpp +++ b/include/vkcv/Window.hpp @@ -74,6 +74,13 @@ namespace vkcv { */ static void onCharEvent(GLFWwindow *callbackWindow, unsigned int c); + /** + * @brief A callback function for handling gamepad re-connection. + * @param gamepadIndex The gamepad index. + * @param gamepadEvent The gamepad connection event. + */ + static void onGamepadConnection(int gamepadIndex, int gamepadEvent); + /** * @brief A callback function for gamepad input events. * @param gamepadIndex The gamepad index. diff --git a/src/vkcv/Window.cpp b/src/vkcv/Window.cpp index 03ac915aea5e89e2c5b0927cafe52e56454d49b5..fad9a2a658e97d9826b445108d14565f1135fbff 100644 --- a/src/vkcv/Window.cpp +++ b/src/vkcv/Window.cpp @@ -23,7 +23,7 @@ namespace vkcv { glfwSetScrollCallback(m_window, Window::onMouseScrollEvent); glfwSetCharCallback(m_window, Window::onCharEvent); - glfwSetJoystickCallback(nullptr); + glfwSetJoystickCallback(Window::onGamepadConnection); glfwSetJoystickUserPointer(GLFW_JOYSTICK_1, this); } @@ -127,6 +127,16 @@ namespace vkcv { } } + void Window::onGamepadConnection(int gamepadIndex, int gamepadEvent) { + if (gamepadEvent == GLFW_CONNECTED) { + auto window = static_cast<Window *>(glfwGetWindowUserPointer(s_Windows[0])); // todo check for correct window + + if (window != nullptr) { + glfwSetJoystickUserPointer(gamepadIndex, window); + } + } + } + void Window::onGamepadEvent(int gamepadIndex) { auto window = static_cast<Window *>(glfwGetJoystickUserPointer(gamepadIndex));