feat(logo,menu): reiniciar des de servei → LOGO amb reset (atura música) i logo_jailgames.gif centrat

This commit is contained in:
JailDesigner committed 2026-05-06 19:54:30 +02:00
1 parent 8eaa91f309
commit f7ab6a641a
7 files changed
+92 -35

No files matched your search

+9 -3
View File
@@ -1168,12 +1168,18 @@ auto ServiceMenu::buildSystem() -> Page {
page.items.push_back(makeLabel(
std::string("ver.") + Texts::VERSION + " (" + Version::GIT_HASH + ")"));
// Reiniciar el joc: placeholder sense efecte fins que Director exposi
// un pas de restart en calent (fora d'abast d'aquesta iteració).
// Reiniciar el joc: tornem al LOGO amb `reset=true` perquè LogoScene
// ature música i sons abans de mostrar-se. Tanquem el menú a la
// mateixa acció — Director recollirà la transició al final del frame
// via `takePendingSceneRequest()` i reconstruirà l'escena.
page.items.push_back(makeAction(
"menu.items.restart",
[]() {
// TODO: connectar amb un hipotètic Director::requestRestart().
ServiceMenu::get().requestSceneTransition(ExitRequest{
.next = SceneId::LOGO,
.params = LogoParams{.reset = true},
});
ServiceMenu::get().close();
}));
page.items.push_back(makeAction(
+20
View File
@@ -6,11 +6,13 @@
#include <cstdint>
#include <functional>
#include <memory>
#include <optional>
#include <string>
#include <vector>
#include "core/input/define_buttons.hpp"
#include "core/rendering/surface.hpp" // Palette
#include "game/scenes/scene_flow.hpp"
class Text;
@@ -73,6 +75,19 @@ class ServiceMenu {
// `define_buttons_->enable(...)` de coffee_crisis_arcade_edition.
void startDefineButtons(SDL_Gamepad* pad, const std::string& name, const std::string& path);
// Bústia de transició d'escena des del menú: alguns items (p.ex.
// "Reiniciar" a Sistema) no es poden expressar com a `ExitRequest` de
// l'escena actual perquè el menú és global i no té handle a l'escena.
// Director consulta `takePendingSceneRequest()` cada frame i, si hi ha
// valor, força la transició — el mateix camí que per a `ExitRequest`
// d'una escena, però el dispara el menú directament.
void requestSceneTransition(ExitRequest req) { pending_request_ = req; }
[[nodiscard]] auto takePendingSceneRequest() -> std::optional<ExitRequest> {
auto out = pending_request_;
pending_request_.reset();
return out;
}
private:
// --- Struct d'un item d'una pàgina ---
//
@@ -289,4 +304,9 @@ class ServiceMenu {
// persisteix la nova configuració via `GamepadBindings`. Replica el
// patró `define_buttons_` de coffee_crisis_arcade_edition.
DefineButtons define_buttons_;
// Sol·licitud de canvi d'escena pendent (vore `requestSceneTransition`).
// La consumeix Director al final del frame; si l'item no força la
// transició, queda buida.
std::optional<ExitRequest> pending_request_;
};