feat(menu): ESC tanca el joc també amb el menú obert

This commit is contained in:
JailDesigner committed 2026-05-14 10:21:33 +02:00
1 parent b6403e8de5
commit 4daeb0e15c
2 files changed
+13 -10

No files matched your search

+4 -3
View File
@@ -448,9 +448,10 @@ void Director::processGamepadEvents() {
void Director::processMenuInput() { void Director::processMenuInput() {
// Intercepta input abans que l'escena vegi els events. Amb el menú // Intercepta input abans que l'escena vegi els events. Amb el menú
// obert, `handleEvent` consumeix tot KEY_DOWN excepte les F-keys // obert, `handleEvent` consumeix tot KEY_DOWN excepte les F-keys
// (F1–F12), que són hotkeys d'UI omnipresents i passen avall a // (F1–F12) i ESC, que són hotkeys d'UI omnipresents i passen avall
// GlobalInputs. Quan el menú està tancat, la branca de baix detecta // a GlobalInputs (ESC manté la doble pulsació per a confirmar l'exit
// `menu_toggle` (F12 per defecte) i obre el menú. // independentment del context). Quan el menú està tancat, la branca
// de baix detecta `menu_toggle` (F12 per defecte) i obre el menú.
// Erase invalida iteradors, per això actualitzem `it` a cada branca. // Erase invalida iteradors, per això actualitzem `it` a cada branca.
for (auto it = EventBuffer::events.begin(); it != EventBuffer::events.end();) { for (auto it = EventBuffer::events.begin(); it != EventBuffer::events.end();) {
if (ServiceMenu::get().isOpen() && ServiceMenu::get().handleEvent(*it)) { if (ServiceMenu::get().isOpen() && ServiceMenu::get().handleEvent(*it)) {
+9 -7
View File
@@ -661,7 +661,6 @@ auto ServiceMenu::handleEvent(const SDL_Event& ev) -> bool {
playAcceptSound(); playAcceptSound();
break; break;
case SDL_SCANCODE_BACKSPACE: case SDL_SCANCODE_BACKSPACE:
case SDL_SCANCODE_ESCAPE:
popPage(); popPage();
playSelectSound(); playSelectSound();
break; break;
@@ -669,13 +668,16 @@ auto ServiceMenu::handleEvent(const SDL_Event& ev) -> bool {
break; break;
} }
// Context d'entrada exclusiu: amb el menú obert, el teclat va al menú // Context d'entrada exclusiu: amb el menú obert, el teclat va al menú
// i les escenes no veuen res. Les F-keys (F1–F12) són hotkeys d'UI // i les escenes no veuen res. Les F-keys (F1–F12) i ESC són hotkeys
// omnipresents (zoom, shader, screenshot, render info, menu_toggle…) // d'UI omnipresents (zoom, shader, screenshot, render info,
// i passen avall a GlobalInputs. Tota la resta queda absorbida — // menu_toggle, exit) i passen avall a GlobalInputs perquè es
// inclús tecles que el menú no fa servir — perquè una J en LogoScene // comporten igual amb el menú obert o tancat. La navegació enrere
// no salti la secció mentre l'usuari està al menú. // dins del menú queda exclusivament a BACKSPACE. Tota la resta queda
// absorbida — inclús tecles que el menú no fa servir — perquè una J
// en LogoScene no salti la secció mentre l'usuari està al menú.
const bool IS_FUNCTION_KEY = SC >= SDL_SCANCODE_F1 && SC <= SDL_SCANCODE_F12; const bool IS_FUNCTION_KEY = SC >= SDL_SCANCODE_F1 && SC <= SDL_SCANCODE_F12;
return !IS_FUNCTION_KEY; const bool IS_PASSTHROUGH = IS_FUNCTION_KEY || SC == SDL_SCANCODE_ESCAPE;
return !IS_PASSTHROUGH;
} }
// --- Builders de pàgines --- // --- Builders de pàgines ---