forked from jaildesigner-jailgames/jaildoctors_dilemma
fix: controls en el mando
This commit is contained in:
@@ -154,8 +154,9 @@ namespace GlobalInputs {
|
||||
// Detecta qué acción global ha sido presionada (si alguna)
|
||||
auto getPressedAction() -> InputAction { // NOLINT(readability-function-cognitive-complexity)
|
||||
// Qualsevol botó del comandament actua com a ACCEPT (saltar escenes
|
||||
// d'attract mode: logo, loading, credits, demo, ending...). Es prioritza
|
||||
// sobre EXIT perquè s'envia com a flag d'event, no com a check d'acció.
|
||||
// d'attract mode: logo, loading, credits, demo, ending...). El botó
|
||||
// BACK queda filtrat prèviament a GlobalEvents per no colidir amb EXIT
|
||||
// (excepte en emscripten, on BACK no pot sortir i sí pot saltar).
|
||||
if (GlobalEvents::consumeGamepadButtonPressed()) {
|
||||
return InputAction::ACCEPT;
|
||||
}
|
||||
|
||||
@@ -390,12 +390,21 @@ void Input::update() { // NOLINT(readability-convert-member-functions-to-static
|
||||
|
||||
// --- MANDOS ---
|
||||
for (const auto& gamepad : gamepads_) {
|
||||
for (auto& binding : gamepad->bindings) {
|
||||
bool button_is_down_now = static_cast<int>(SDL_GetGamepadButton(gamepad->pad, static_cast<SDL_GamepadButton>(binding.second.button))) != 0;
|
||||
for (auto& [action, state] : gamepad->bindings) {
|
||||
bool is_down_now = static_cast<int>(SDL_GetGamepadButton(gamepad->pad, static_cast<SDL_GamepadButton>(state.button))) != 0;
|
||||
|
||||
// JUMP accepta qualsevol dels 4 botons frontals (South/East/North/West)
|
||||
if (action == Action::JUMP) {
|
||||
is_down_now = is_down_now ||
|
||||
(SDL_GetGamepadButton(gamepad->pad, SDL_GAMEPAD_BUTTON_SOUTH) != 0) ||
|
||||
(SDL_GetGamepadButton(gamepad->pad, SDL_GAMEPAD_BUTTON_EAST) != 0) ||
|
||||
(SDL_GetGamepadButton(gamepad->pad, SDL_GAMEPAD_BUTTON_NORTH) != 0) ||
|
||||
(SDL_GetGamepadButton(gamepad->pad, SDL_GAMEPAD_BUTTON_WEST) != 0);
|
||||
}
|
||||
|
||||
// El estado .is_held del fotograma anterior nos sirve para saber si es un pulso nuevo
|
||||
binding.second.just_pressed = button_is_down_now && !binding.second.is_held;
|
||||
binding.second.is_held = button_is_down_now;
|
||||
state.just_pressed = is_down_now && !state.is_held;
|
||||
state.is_held = is_down_now;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,7 +60,12 @@ class Input {
|
||||
// Movimiento del jugador
|
||||
{Action::LEFT, ButtonState{.button = static_cast<int>(SDL_GAMEPAD_BUTTON_DPAD_LEFT)}},
|
||||
{Action::RIGHT, ButtonState{.button = static_cast<int>(SDL_GAMEPAD_BUTTON_DPAD_RIGHT)}},
|
||||
{Action::JUMP, ButtonState{.button = static_cast<int>(SDL_GAMEPAD_BUTTON_WEST)}}} {}
|
||||
{Action::JUMP, ButtonState{.button = static_cast<int>(SDL_GAMEPAD_BUTTON_WEST)}},
|
||||
// Botó BACK del mando → sortir escena / tancar joc
|
||||
{Action::EXIT, ButtonState{.button = static_cast<int>(SDL_GAMEPAD_BUTTON_BACK)}},
|
||||
{Action::CANCEL, ButtonState{.button = static_cast<int>(SDL_GAMEPAD_BUTTON_BACK)}},
|
||||
// Botó START del mando → pausa
|
||||
{Action::PAUSE, ButtonState{.button = static_cast<int>(SDL_GAMEPAD_BUTTON_START)}}} {}
|
||||
|
||||
~Gamepad() {
|
||||
if (pad != nullptr) {
|
||||
|
||||
Reference in New Issue
Block a user