delay en naus en titol

This commit is contained in:
2025-12-17 18:55:41 +01:00
parent 3d5277a395
commit 8b9d26a02c
4 changed files with 47 additions and 6 deletions

View File

@@ -362,15 +362,21 @@ void EscenaTitol::actualitzar(float delta_time) {
animacio_activa_ = false; // Comença estàtic
factor_lerp_ = 0.0f; // Sense animació encara
// Iniciar animació d'entrada de naus
ship_animator_->set_visible(true);
ship_animator_->start_entry_animation();
// Naus esperaran ENTRANCE_DELAY abans d'entrar (no iniciar aquí)
}
break;
case EstatTitol::MAIN: {
temps_estat_main_ += delta_time;
// Iniciar animació d'entrada de naus després del delay
if (temps_estat_main_ >= Defaults::Title::Ships::ENTRANCE_DELAY) {
if (ship_animator_ && !ship_animator_->is_visible()) {
ship_animator_->set_visible(true);
ship_animator_->start_entry_animation();
}
}
// Fase 1: Estàtic (0-10s)
if (temps_estat_main_ < DELAY_INICI_ANIMACIO) {
factor_lerp_ = 0.0f;
@@ -458,9 +464,7 @@ void EscenaTitol::actualitzar(float delta_time) {
starfield_->set_brightness(BRIGHTNESS_STARFIELD);
temps_estat_main_ = 0.0f;
// Iniciar animació d'entrada de naus
ship_animator_->set_visible(true);
ship_animator_->start_entry_animation();
// Naus esperaran ENTRANCE_DELAY abans d'entrar (no iniciar aquí)
}
}
@@ -471,6 +475,12 @@ void EscenaTitol::actualitzar(float delta_time) {
bool p2_actiu_abans = config_partida_.jugador2_actiu;
if (checkStartGameButtonPressed()) {
// Si START es prem durant el delay (naus encara invisibles), saltar-les a FLOATING
if (ship_animator_ && !ship_animator_->is_visible()) {
ship_animator_->set_visible(true);
ship_animator_->skip_to_floating_state();
}
// Configurar partida abans de canviar d'escena
context_.set_config_partida(config_partida_);
std::cout << "[EscenaTitol] Configuració de partida - P1: "

View File

@@ -101,6 +101,32 @@ void ShipAnimator::trigger_exit_animation() {
}
}
void ShipAnimator::skip_to_floating_state() {
// Posar ambdues naus directament en estat FLOATING
for (auto& nau : naus_) {
nau.estat = EstatNau::FLOATING;
nau.temps_estat = 0.0f;
nau.fase_oscilacio = 0.0f;
// Posar en posició objectiu (sense animació)
nau.posicio_actual = nau.posicio_objectiu;
nau.escala_actual = nau.escala_objectiu;
// NO establir visibilitat aquí - ja ho fa el caller
// (evita fer visibles ambdues naus quan només una ha premut START)
}
}
bool ShipAnimator::is_visible() const {
// Retorna true si almenys una nau és visible
for (const auto& nau : naus_) {
if (nau.visible) {
return true;
}
}
return false;
}
void ShipAnimator::trigger_exit_animation_for_player(int jugador_id) {
// Trobar la nau del jugador especificat
for (auto& nau : naus_) {

View File

@@ -73,10 +73,12 @@ class ShipAnimator {
void start_entry_animation();
void trigger_exit_animation(); // Anima totes les naus
void trigger_exit_animation_for_player(int jugador_id); // Anima només una nau (P1=1, P2=2)
void skip_to_floating_state(); // Salta directament a FLOATING sense animació
// Control de visibilitat
void set_visible(bool visible);
bool is_animation_complete() const;
bool is_visible() const; // Comprova si alguna nau és visible
private:
SDL_Renderer* renderer_;