void shutdown() { for (u32 i = 0; i < MaximumControllers; i++) { if (isControllerPresent(i)) setControllerVibration(i, 0); } for (auto& gamepad : g_controllerHandles) { if (gamepad) SDL_GameControllerClose(gamepad); } for (auto& rumble : g_rumbleHandles) { if (rumble) SDL_HapticClose(rumble); } }
float Controller::getAxisOffset(const int index, const int axis) { if (isControllerPresent(index)) { #if defined(JOP_OS_DESKTOP) int count = 0; const float* axes = glfwGetJoystickAxes(index, &count); switch (axis) { case XBox::Axis::LeftStickX: return axes[0]; case XBox::Axis::LeftStickY: return axes[1]; case XBox::Axis::RightStickX: return axes[2]; case XBox::Axis::RightStickY: return axes[3]; case XBox::Axis::LTrigger: { if (count >= 5) return ((axes[4] + 1.f) / 2.f); break; } case XBox::Axis::RTrigger: { if (count >= 6) return ((axes[5] + 1.f) / 2.f); } } #elif defined(JOP_OS_ANDROID) auto state = detail::ActivityState::get(); switch (axis) { case XBox::Axis::LeftStickX: return state->activeAxes[0]; case XBox::Axis::LeftStickY: return state->activeAxes[1]; case XBox::Axis::RightStickX: return state->activeAxes[2]; case XBox::Axis::RightStickY: return state->activeAxes[3]; case XBox::Axis::LTrigger: return state->activeAxes[4]; case XBox::Axis::RTrigger: return state->activeAxes[5]; } #endif } return 0.f; }