SDL_GetJoystickAxis(): returns 0 on success, negative on error

This commit is contained in:
Sylvain 2023-02-09 20:59:38 +01:00
parent 1e39178bed
commit fa312cee4d
No known key found for this signature in database
GPG key ID: 5F87E02E5BC0939E
2 changed files with 13 additions and 5 deletions

View file

@ -2274,11 +2274,13 @@ Sint16 SDL_GetGamepadAxis(SDL_Gamepad *gamepad, SDL_GamepadAxis axis)
SDL_ExtendedGamepadBind *binding = &gamepad->bindings[i];
if (binding->outputType == SDL_GAMEPAD_BINDTYPE_AXIS && binding->output.axis.axis == axis) {
int value = 0;
Sint16 val16 = 0;
SDL_bool valid_input_range;
SDL_bool valid_output_range;
if (binding->inputType == SDL_GAMEPAD_BINDTYPE_AXIS) {
SDL_GetJoystickAxis(gamepad->joystick, binding->input.axis.axis, &value);
SDL_GetJoystickAxis(gamepad->joystick, binding->input.axis.axis, &val16);
value = val16;
if (binding->input.axis.axis_min < binding->input.axis.axis_max) {
valid_input_range = (value >= binding->input.axis.axis_min && value <= binding->input.axis.axis_max);
} else {
@ -2358,8 +2360,10 @@ Uint8 SDL_GetGamepadButton(SDL_Gamepad *gamepad, SDL_GamepadButton button)
if (binding->outputType == SDL_GAMEPAD_BINDTYPE_BUTTON && binding->output.button == button) {
if (binding->inputType == SDL_GAMEPAD_BINDTYPE_AXIS) {
SDL_bool valid_input_range;
int value = 0;
SDL_GetJoystickAxis(gamepad->joystick, binding->input.axis.axis, &value);
int value;
Sint16 val16 = 0;
SDL_GetJoystickAxis(gamepad->joystick, binding->input.axis.axis, &val16);
value = val16;
int threshold = binding->input.axis.axis_min + (binding->input.axis.axis_max - binding->input.axis.axis_min) / 2;
if (binding->input.axis.axis_min < binding->input.axis.axis_max) {
valid_input_range = (value >= binding->input.axis.axis_min && value <= binding->input.axis.axis_max);

View file

@ -227,7 +227,9 @@ void loop(void *arg)
SDL_SetRenderDrawColor(screen, 0xFF, 0x00, 0x00, SDL_ALPHA_OPAQUE);
for (i = 0; i < SDL_GetNumJoystickAxes(joystick); ++i) {
/* Draw the X/Y axis */
SDL_GetJoystickAxis(joystick, i, &x);
Sint16 val16 = 0;
SDL_GetJoystickAxis(joystick, i, &val16);
x = val16;
x += 32768;
x *= SCREEN_WIDTH;
x /= 65535;
@ -238,7 +240,9 @@ void loop(void *arg)
}
++i;
if (i < SDL_GetNumJoystickAxes(joystick)) {
SDL_GetJoystickAxis(joystick, i, &y);
val16 = 0;
SDL_GetJoystickAxis(joystick, i, &val16);
y = val16;
y += 32768;
} else {
y = 32768;