void update(EventQueue& _eventQueue) { int numButtons, numAxes; const unsigned char* buttons = glfwGetJoystickButtons(m_handle.idx, &numButtons); const float* axes = glfwGetJoystickAxes(m_handle.idx, &numAxes); if (NULL == buttons || NULL == axes) { return; } if (numAxes > GamepadAxis::Count) { numAxes = GamepadAxis::Count; } if (numButtons > Key::Count - Key::GamepadA) { numButtons = Key::Count - Key::GamepadA; } WindowHandle defaultWindow = { 0 }; for (int ii = 0; ii < numAxes; ++ii) { GamepadAxis::Enum axis = translateGamepadAxis(ii); int32_t value = (int32_t) (axes[ii] * 32768.f); if (GamepadAxis::LeftY == axis || GamepadAxis::RightY == axis) { value = -value; } if (m_axes[ii] != value) { m_axes[ii] = value; _eventQueue.postAxisEvent(defaultWindow , m_handle , axis , value); } } for (int ii = 0; ii < numButtons; ++ii) { Key::Enum key = translateGamepadButton(ii); if (m_buttons[ii] != buttons[ii]) { m_buttons[ii] = buttons[ii]; _eventQueue.postKeyEvent(defaultWindow , key , 0 , buttons[ii] != 0); } } }