mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-10-03 16:36:25 +00:00
More than one binding might trigger a gamepad button
This commit is contained in:
@@ -269,7 +269,6 @@ static void HandleJoystickButton(Uint64 timestamp, SDL_Gamepad *gamepad, int but
|
|||||||
} else {
|
} else {
|
||||||
SDL_SendGamepadButton(timestamp, gamepad, binding->output.button, state);
|
SDL_SendGamepadButton(timestamp, gamepad, binding->output.button, state);
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2424,28 +2423,32 @@ Uint8 SDL_GetGamepadButton(SDL_Gamepad *gamepad, SDL_GamepadButton button)
|
|||||||
int threshold = binding->input.axis.axis_min + (binding->input.axis.axis_max - binding->input.axis.axis_min) / 2;
|
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) {
|
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);
|
valid_input_range = (value >= binding->input.axis.axis_min && value <= binding->input.axis.axis_max);
|
||||||
if (valid_input_range) {
|
if (valid_input_range && value >= threshold) {
|
||||||
retval = (value >= threshold) ? SDL_PRESSED : SDL_RELEASED;
|
retval = SDL_PRESSED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
valid_input_range = (value >= binding->input.axis.axis_max && value <= binding->input.axis.axis_min);
|
valid_input_range = (value >= binding->input.axis.axis_max && value <= binding->input.axis.axis_min);
|
||||||
if (valid_input_range) {
|
if (valid_input_range && value <= threshold) {
|
||||||
retval = (value <= threshold) ? SDL_PRESSED : SDL_RELEASED;
|
retval = SDL_PRESSED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (binding->inputType == SDL_GAMEPAD_BINDTYPE_BUTTON) {
|
} else if (binding->inputType == SDL_GAMEPAD_BINDTYPE_BUTTON) {
|
||||||
retval = SDL_GetJoystickButton(gamepad->joystick, binding->input.button);
|
if (SDL_GetJoystickButton(gamepad->joystick, binding->input.button)) {
|
||||||
|
retval = SDL_TRUE;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
} else if (binding->inputType == SDL_GAMEPAD_BINDTYPE_HAT) {
|
} else if (binding->inputType == SDL_GAMEPAD_BINDTYPE_HAT) {
|
||||||
int hat_mask = SDL_GetJoystickHat(gamepad->joystick, binding->input.hat.hat);
|
int hat_mask = SDL_GetJoystickHat(gamepad->joystick, binding->input.hat.hat);
|
||||||
retval = (hat_mask & binding->input.hat.hat_mask) ? SDL_PRESSED : SDL_RELEASED;
|
if (hat_mask & binding->input.hat.hat_mask) {
|
||||||
|
retval = SDL_TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
SDL_UnlockJoysticks();
|
SDL_UnlockJoysticks();
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
|
Reference in New Issue
Block a user