fix(input): impedeix que els events traspassin al joc en acabar el rebind

El menu de servei queda obert per sota de l'overlay DefineInputs durant
tot el rebind (en lloc de tancar-se al activar la accio), de manera que
absorbeix qualsevol KEY_DOWN que arribi un cop l'overlay s'auto-cancela.
La pantalla de titol tambe pausa la seua logica mentre el menu de servei
esta obert, igual que GameScene, per evitar que detecti un START fantasma
si l'usuari encara te una tecla pulsada al moment de tancar-se el modal.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-24 20:36:51 +02:00
parent 10a54aef91
commit c4933875dd
3 changed files with 18 additions and 14 deletions
+9 -13
View File
@@ -523,16 +523,16 @@ namespace System {
};
}
auto makeDefineItem(const char* label_key, DefineInputs::Mode mode, DefineInputs::Player pl, ServiceMenu* menu) -> ServiceMenu::Item {
auto makeDefineItem(const char* label_key, DefineInputs::Mode mode, DefineInputs::Player pl) -> ServiceMenu::Item {
return ServiceMenu::Item{
.kind = ServiceMenu::Kind::ACTION,
.label_key = label_key,
.label_text = {},
.selectable = true,
.on_activate = [mode, pl, menu] {
if (startDefine(mode, pl) && menu != nullptr && menu->isOpen()) {
menu->toggle();
} },
// El menu de servei NO es tanca: queda obert per sota de
// l'overlay i absorbira qualsevol event que arribi un cop
// l'overlay s'haja auto-cancel·lat.
.on_activate = [mode, pl] { startDefine(mode, pl); },
.get_value_text = {},
.on_change = {},
};
@@ -548,20 +548,16 @@ namespace System {
makeCyclePadItem("service_menu.controls_pad_p2", 1),
makeDefineItem("service_menu.controls_define_keyboard_p1",
DefineInputs::Mode::KEYBOARD,
DefineInputs::Player::P1,
this),
DefineInputs::Player::P1),
makeDefineItem("service_menu.controls_define_keyboard_p2",
DefineInputs::Mode::KEYBOARD,
DefineInputs::Player::P2,
this),
DefineInputs::Player::P2),
makeDefineItem("service_menu.controls_define_gamepad_p1",
DefineInputs::Mode::GAMEPAD,
DefineInputs::Player::P1,
this),
DefineInputs::Player::P1),
makeDefineItem("service_menu.controls_define_gamepad_p2",
DefineInputs::Mode::GAMEPAD,
DefineInputs::Player::P2,
this),
DefineInputs::Player::P2),
};
return page;
}
+1 -1
View File
@@ -98,7 +98,7 @@ namespace System {
[[nodiscard]] static auto buildAudioPage() -> Page;
[[nodiscard]] auto buildOptionsPage() const -> Page;
[[nodiscard]] auto buildSystemPage() -> Page;
[[nodiscard]] auto buildControlsPage() -> Page;
[[nodiscard]] static auto buildControlsPage() -> Page;
// Pagina de confirmacio "ESTAS SEGUR? NO/SI". on_yes s'executa si
// l'usuari selecciona SI; el cursor per defecte apunta a NO.
void pushConfirmPage(const std::string& title_key, std::function<void()> on_yes);