diff --git a/source/game/escenes/escena_titol.cpp b/source/game/escenes/escena_titol.cpp index c2a4d1e..79c1389 100644 --- a/source/game/escenes/escena_titol.cpp +++ b/source/game/escenes/escena_titol.cpp @@ -351,39 +351,17 @@ void EscenaTitol::actualitzar(float delta_time) { animacio_activa_ = true; } - // Només calcular i aplicar offsets si l'animació està activa - if (animacio_activa_) { - // Acumular temps escalat - temps_animacio_ += delta_time * factor_lerp_; - - // Usar amplituds i freqüències completes - float amplitude_x_actual = ORBIT_AMPLITUDE_X; - float amplitude_y_actual = ORBIT_AMPLITUDE_Y; - float frequency_x_actual = ORBIT_FREQUENCY_X; - float frequency_y_actual = ORBIT_FREQUENCY_Y; - - // Calcular offset orbital - float offset_x = amplitude_x_actual * std::sin(2.0f * Defaults::Math::PI * frequency_x_actual * temps_animacio_); - float offset_y = amplitude_y_actual * std::sin(2.0f * Defaults::Math::PI * frequency_y_actual * temps_animacio_ + ORBIT_PHASE_OFFSET); - - // Aplicar offset a totes les lletres de "ORNI" - for (size_t i = 0; i < lletres_orni_.size(); ++i) { - lletres_orni_[i].posicio.x = posicions_originals_orni_[i].x + static_cast(std::round(offset_x)); - lletres_orni_[i].posicio.y = posicions_originals_orni_[i].y + static_cast(std::round(offset_y)); - } - - // Aplicar offset a totes les lletres de "ATTACK!" - for (size_t i = 0; i < lletres_attack_.size(); ++i) { - lletres_attack_[i].posicio.x = posicions_originals_attack_[i].x + static_cast(std::round(offset_x)); - lletres_attack_[i].posicio.y = posicions_originals_attack_[i].y + static_cast(std::round(offset_y)); - } - } - // Si no està activa, mantenim les posicions originals (ja establertes en inicialització) + // Actualitzar animació del logo + actualitzar_animacio_logo(delta_time); break; } case EstatTitol::TRANSITION_TO_GAME: temps_acumulat_ += delta_time; + + // Continuar animació orbital durant la transició + actualitzar_animacio_logo(delta_time); + if (temps_acumulat_ >= DURACIO_TRANSITION) { // Transició a JOC (la música ja s'ha parat en el fade) GestorEscenes::actual = Escena::JOC; @@ -392,6 +370,36 @@ void EscenaTitol::actualitzar(float delta_time) { } } +void EscenaTitol::actualitzar_animacio_logo(float delta_time) { + // Només calcular i aplicar offsets si l'animació està activa + if (animacio_activa_) { + // Acumular temps escalat + temps_animacio_ += delta_time * factor_lerp_; + + // Usar amplituds i freqüències completes + float amplitude_x_actual = ORBIT_AMPLITUDE_X; + float amplitude_y_actual = ORBIT_AMPLITUDE_Y; + float frequency_x_actual = ORBIT_FREQUENCY_X; + float frequency_y_actual = ORBIT_FREQUENCY_Y; + + // Calcular offset orbital + float offset_x = amplitude_x_actual * std::sin(2.0f * Defaults::Math::PI * frequency_x_actual * temps_animacio_); + float offset_y = amplitude_y_actual * std::sin(2.0f * Defaults::Math::PI * frequency_y_actual * temps_animacio_ + ORBIT_PHASE_OFFSET); + + // Aplicar offset a totes les lletres de "ORNI" + for (size_t i = 0; i < lletres_orni_.size(); ++i) { + lletres_orni_[i].posicio.x = posicions_originals_orni_[i].x + static_cast(std::round(offset_x)); + lletres_orni_[i].posicio.y = posicions_originals_orni_[i].y + static_cast(std::round(offset_y)); + } + + // Aplicar offset a totes les lletres de "ATTACK!" + for (size_t i = 0; i < lletres_attack_.size(); ++i) { + lletres_attack_[i].posicio.x = posicions_originals_attack_[i].x + static_cast(std::round(offset_x)); + lletres_attack_[i].posicio.y = posicions_originals_attack_[i].y + static_cast(std::round(offset_y)); + } + } +} + void EscenaTitol::dibuixar() { // Dibuixar starfield de fons (sempre, en tots els estats) if (starfield_) { diff --git a/source/game/escenes/escena_titol.hpp b/source/game/escenes/escena_titol.hpp index 6549281..7499fcf 100644 --- a/source/game/escenes/escena_titol.hpp +++ b/source/game/escenes/escena_titol.hpp @@ -94,6 +94,7 @@ class EscenaTitol { // Mètodes privats void actualitzar(float delta_time); + void actualitzar_animacio_logo(float delta_time); // Actualitza l'animació orbital del logo void dibuixar(); void processar_events(const SDL_Event& event); void inicialitzar_titol(); // Carrega i posiciona les lletres del títol