diff --git a/source/game/scenes/game_scene.cpp b/source/game/scenes/game_scene.cpp index 7e2b40f..4cf33ea 100644 --- a/source/game/scenes/game_scene.cpp +++ b/source/game/scenes/game_scene.cpp @@ -164,6 +164,10 @@ GameScene::GameScene(SDLManager& sdl, SceneContext& context) context_.advanceDemoScenario(); stage_manager_->initDemo(SC.stage); demo_timer_ = DEMO_DURATION; + // Silenciar els SFX durant la demo (la música segueix). Guardem l'estat + // previ per restaurar-lo al destructor sense xafar la preferència de l'usuari. + sound_was_enabled_ = Audio::get()->isSoundEnabled(); + Audio::get()->enableSound(false); } else { stage_manager_->init(); } @@ -231,6 +235,13 @@ GameScene::GameScene(SDLManager& sdl, SceneContext& context) init_hud_rect_sound_played_ = false; } +GameScene::~GameScene() { + // Si la demo havia silenciat els SFX, restaurar l'estat previ en sortir. + if (match_config_.mode == GameConfig::Mode::DEMO) { + Audio::get()->enableSound(sound_was_enabled_); + } +} + auto GameScene::isFinished() const -> bool { return context_.nextScene() != SceneType::GAME; } diff --git a/source/game/scenes/game_scene.hpp b/source/game/scenes/game_scene.hpp index e2d2cc4..40ac85e 100644 --- a/source/game/scenes/game_scene.hpp +++ b/source/game/scenes/game_scene.hpp @@ -43,7 +43,7 @@ enum class GameOverState : uint8_t { class GameScene final : public Scene { public: explicit GameScene(SDLManager& sdl, SceneManager::SceneContext& context); - ~GameScene() override = default; + ~GameScene() override; // Restaura l'estat dels SFX si la demo els ha silenciat // Scene interface void handleEvent(const SDL_Event& event) override; @@ -106,6 +106,7 @@ class GameScene final : public Scene { std::array demo_pilots_; std::array demo_ctrls_{}; // Control per nau al frame actual float demo_timer_{0.0F}; // Temps restant de la demo (→ LOGO) + bool sound_was_enabled_{true}; // Estat dels SFX abans de la demo (per restaurar-lo) // Funciones privades // bullet_velocity: velocitat de la bala que ha causat la mort (Vec2{} si no