ESC global amb doble pulsació: F12=pausa, BACKSPACE=cancel, text pausa més clar

This commit is contained in:
2026-05-17 18:10:15 +02:00
parent 659e37e5a1
commit a40931c7ca
12 changed files with 104 additions and 66 deletions
+20 -9
View File
@@ -16,13 +16,14 @@
#include <memory>
#include <string> // for basic_string, operator+, char_t...
#include "core/audio/audio.hpp" // for Audio::init, Audio::destroy
#include "core/input/input.h" // for Input, InputAction
#include "core/input/mouse.hpp" // for Mouse::handleEvent, Mouse::upda...
#include "core/locale/lang.h" // for Lang, Lang::Code
#include "core/rendering/screen.h" // for Screen
#include "core/rendering/texture.h" // for Texture
#include "core/resources/asset.h" // for Asset, Asset::Type
#include "core/audio/audio.hpp" // for Audio::init, Audio::destroy
#include "core/input/global_inputs.hpp" // for GlobalInputs::wantsQuit
#include "core/input/input.h" // for Input, InputAction
#include "core/input/mouse.hpp" // for Mouse::handleEvent, Mouse::upda...
#include "core/locale/lang.h" // for Lang, Lang::Code
#include "core/rendering/screen.h" // for Screen
#include "core/rendering/texture.h" // for Texture
#include "core/resources/asset.h" // for Asset, Asset::Type
#include "core/resources/resource.h"
#include "core/resources/resource_helper.h"
#include "game/defaults.hpp" // for SECTION_PROG_LOGO, GAMECANVAS_H...
@@ -218,9 +219,12 @@ void Director::initInput() {
// Teclado - Otros
Input::get()->bindKey(Input::Action::ACCEPT, SDL_SCANCODE_RETURN);
Input::get()->bindKey(Input::Action::CANCEL, SDL_SCANCODE_ESCAPE);
Input::get()->bindKey(Input::Action::PAUSE, SDL_SCANCODE_ESCAPE);
// ESC només dispara EXIT (gestionat globalment per GlobalInputs com a
// confirmació de doble pulsació). PAUSE i CANCEL tenen tecles dedicades
// perquè cap escena ha de tractar ESC localment.
Input::get()->bindKey(Input::Action::EXIT, SDL_SCANCODE_ESCAPE);
Input::get()->bindKey(Input::Action::CANCEL, SDL_SCANCODE_BACKSPACE);
Input::get()->bindKey(Input::Action::PAUSE, SDL_SCANCODE_F12);
Input::get()->bindKey(Input::Action::WINDOW_DEC_ZOOM, SDL_SCANCODE_F1);
Input::get()->bindKey(Input::Action::WINDOW_INC_ZOOM, SDL_SCANCODE_F2);
Input::get()->bindKey(Input::Action::WINDOW_FULLSCREEN, SDL_SCANCODE_F3);
@@ -579,6 +583,13 @@ void Director::handleSectionTransition() {
// Ejecuta un frame del juego
auto Director::iterate() -> SDL_AppResult {
#ifndef __EMSCRIPTEN__
// Doble pulsació d'ESC confirmada des de qualsevol escena.
if (GlobalInputs::wantsQuit()) {
section_->name = SECTION_PROG_QUIT;
}
#endif
#ifdef __EMSCRIPTEN__
// En WASM no se puede salir: reinicia al logo
if (section->name == SECTION_PROG_QUIT) {