diff --git a/source/game/scenes/logo_scene.cpp b/source/game/scenes/logo_scene.cpp index ea1d787..55640ab 100644 --- a/source/game/scenes/logo_scene.cpp +++ b/source/game/scenes/logo_scene.cpp @@ -55,6 +55,11 @@ LogoScene::LogoScene(SDLManager& sdl, SceneContext& context) (void)option; // Suprimir warning sound_played_.fill(false); // Inicialitzar seguiment de sons + + // Si ja sona música (venim de la demo del cicle d'atracció), operar en + // silenci: ni sons de lletres ni reinici de title.ogg. + attract_silent_ = (Audio::getMusicState() == Audio::MusicState::PLAYING); + initLetters(); } @@ -171,7 +176,10 @@ void LogoScene::changeState(AnimationState nou_estat) { std::mt19937 g(rd()); std::shuffle(explosion_order_.begin(), explosion_order_.end(), g); } else if (nou_estat == AnimationState::POST_EXPLOSION) { - Audio::get()->playMusic("title.ogg"); + // En el cicle d'atracció la música ja sona; no la reiniciem. + if (!attract_silent_) { + Audio::get()->playMusic("title.ogg"); + } } std::cout << "[LogoScene] Canvi a state: " << static_cast(nou_estat) @@ -237,9 +245,13 @@ void LogoScene::update(float delta_time) { global_progress, LETTER_THRESHOLD); - // Reproduir so cuando la letter comença a aparèixer (progress > 0) + // Reproduir so cuando la letter comença a aparèixer (progress > 0). + // En mode silenciós (cicle d'atracció) saltem el so però igualment + // marquem la letter per no acumular pendents. if (letter_progress > 0.0F) { - Audio::get()->playSound(Defaults::Sound::LOGO, Audio::Group::GAME); + if (!attract_silent_) { + Audio::get()->playSound(Defaults::Sound::LOGO, Audio::Group::GAME); + } sound_played_[i] = true; } } diff --git a/source/game/scenes/logo_scene.hpp b/source/game/scenes/logo_scene.hpp index ca75643..aae6236 100644 --- a/source/game/scenes/logo_scene.hpp +++ b/source/game/scenes/logo_scene.hpp @@ -67,6 +67,11 @@ class LogoScene final : public Scene { // Seguiment de sons de lletres (evitar reproduccions repetides) std::array sound_played_; // Track si cada letter ya ha reproduit el so + // Cicle d'atracció: si en entrar al logo ja hi ha música sonant (venim de la + // demo amb title.ogg en marxa), el logo no ha d'emetre sons ni reiniciar la + // música — només repintar-se en silenci. + bool attract_silent_{false}; + // Constants de animación static constexpr float DURATION_PRE = 1.5F; // Duració PRE_ANIMATION (pantalla negra) static constexpr float DURATION_ZOOM = 4.0F; // Duració del zoom (segons)