menu de sistema amb versió i opció per a tancar i reiniciar

This commit is contained in:
2026-04-16 20:01:58 +02:00
parent d3bdd9b783
commit e0f9b60f22
8 changed files with 142 additions and 17 deletions

View File

@@ -138,6 +138,25 @@ bool Director::iterate() {
return false;
}
// Reinici "suau": processat al començament del frame per no manipular
// l'escena des d'una lambda del menú mentre encara s'està executant.
if (restart_requested_) {
restart_requested_ = false;
JA_StopMusic();
for (int i = 0; i < JA_MAX_SIMULTANEOUS_CHANNELS; ++i) JA_StopChannel(i);
// Reinicialitza info::ctx des d'Options (vides, diners, diamants...)
// en lloc de ctx.reset() pla que deixaria vida=0 → jugador mort.
initGameContext();
// Força l'intro independentment de `piramide_inicial` (que pot estar
// configurat a una piràmide intermèdia per a proves ràpides).
info::ctx.num_piramide = 255;
current_scene_.reset();
game_state_ = 1; // 1 = dispatch via SceneRegistry per num_piramide
has_frame_ = false;
Menu::close();
JI_SetInputBlocked(false); // el menú ho havia bloquejat — cal desfer-ho
}
if (!context_initialized_) {
initGameContext();
context_initialized_ = true;
@@ -369,6 +388,10 @@ void Director::requestQuit() {
JG_QuitSignal();
}
void Director::requestRestart() {
restart_requested_ = true;
}
auto Director::consumeKeyPressed() -> bool {
return key_pressed_.exchange(false);
}