feat(demo): logo silenciós dins el cicle d'atracció (no sons ni reinici de música si ja sona)

This commit is contained in:
2026-05-29 08:54:56 +02:00
parent 0abbaa09f8
commit b363efd1f0
2 changed files with 20 additions and 3 deletions
+15 -3
View File
@@ -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<int>(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;
}
}
+5
View File
@@ -67,6 +67,11 @@ class LogoScene final : public Scene {
// Seguiment de sons de lletres (evitar reproduccions repetides)
std::array<bool, 9> 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)