feat(demo): silenciar els efectes de so durant la demo (música intacta)

This commit is contained in:
2026-05-29 09:09:37 +02:00
parent b363efd1f0
commit 1e63d3ae9d
2 changed files with 13 additions and 1 deletions
+11
View File
@@ -164,6 +164,10 @@ GameScene::GameScene(SDLManager& sdl, SceneContext& context)
context_.advanceDemoScenario(); context_.advanceDemoScenario();
stage_manager_->initDemo(SC.stage); stage_manager_->initDemo(SC.stage);
demo_timer_ = DEMO_DURATION; 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 { } else {
stage_manager_->init(); stage_manager_->init();
} }
@@ -231,6 +235,13 @@ GameScene::GameScene(SDLManager& sdl, SceneContext& context)
init_hud_rect_sound_played_ = false; 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 { auto GameScene::isFinished() const -> bool {
return context_.nextScene() != SceneType::GAME; return context_.nextScene() != SceneType::GAME;
} }
+2 -1
View File
@@ -43,7 +43,7 @@ enum class GameOverState : uint8_t {
class GameScene final : public Scene { class GameScene final : public Scene {
public: public:
explicit GameScene(SDLManager& sdl, SceneManager::SceneContext& context); 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 // Scene interface
void handleEvent(const SDL_Event& event) override; void handleEvent(const SDL_Event& event) override;
@@ -106,6 +106,7 @@ class GameScene final : public Scene {
std::array<Systems::Demo::DemoPilot, 2> demo_pilots_; std::array<Systems::Demo::DemoPilot, 2> demo_pilots_;
std::array<Systems::Demo::Control, 2> demo_ctrls_{}; // Control per nau al frame actual std::array<Systems::Demo::Control, 2> demo_ctrls_{}; // Control per nau al frame actual
float demo_timer_{0.0F}; // Temps restant de la demo (→ LOGO) 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 // Funciones privades
// bullet_velocity: velocitat de la bala que ha causat la mort (Vec2{} si no // bullet_velocity: velocitat de la bala que ha causat la mort (Vec2{} si no