|
@@ -1190,9 +1190,35 @@ SDL_Joystick *SDL_OpenJoystick(SDL_JoystickID instance_id)
|
|
|
|
|
|
// If this joystick is known to have all zero centered axes, skip the auto-centering code
|
|
|
if (SDL_JoystickAxesCenteredAtZero(joystick)) {
|
|
|
- int i;
|
|
|
+ for (int i = 0; i < joystick->naxes; ++i) {
|
|
|
+ joystick->axes[i].has_initial_value = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- for (i = 0; i < joystick->naxes; ++i) {
|
|
|
+ // We know the initial values for HIDAPI and XInput joysticks
|
|
|
+ if ((SDL_IsJoystickHIDAPI(joystick->guid) ||
|
|
|
+ SDL_IsJoystickXInput(joystick->guid) ||
|
|
|
+ SDL_IsJoystickRAWINPUT(joystick->guid) ||
|
|
|
+ SDL_IsJoystickWGI(joystick->guid)) &&
|
|
|
+ joystick->naxes >= SDL_GAMEPAD_AXIS_COUNT) {
|
|
|
+ int left_trigger, right_trigger;
|
|
|
+ if (SDL_IsJoystickXInput(joystick->guid)) {
|
|
|
+ left_trigger = 2;
|
|
|
+ right_trigger = 5;
|
|
|
+ } else {
|
|
|
+ left_trigger = SDL_GAMEPAD_AXIS_LEFT_TRIGGER;
|
|
|
+ right_trigger = SDL_GAMEPAD_AXIS_RIGHT_TRIGGER;
|
|
|
+ }
|
|
|
+ for (int i = 0; i < SDL_GAMEPAD_AXIS_COUNT; ++i) {
|
|
|
+ int initial_value;
|
|
|
+ if (i == left_trigger || i == right_trigger) {
|
|
|
+ initial_value = SDL_MIN_SINT16;
|
|
|
+ } else {
|
|
|
+ initial_value = 0;
|
|
|
+ }
|
|
|
+ joystick->axes[i].value = initial_value;
|
|
|
+ joystick->axes[i].zero = initial_value;
|
|
|
+ joystick->axes[i].initial_value = initial_value;
|
|
|
joystick->axes[i].has_initial_value = true;
|
|
|
}
|
|
|
}
|