feat(menu): ESC tanca el joc també amb el menú obert
This commit is contained in:
1 parent
b6403e8de5
commit
4daeb0e15c
2 files changed
+13
-10
No files matched your search
@@ -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)) {
|
||||||
|
|||||||
@@ -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 ---
|
||||||
|
|||||||
Reference in new issue
Block a user