treballant en les naus de title
This commit is contained in:
@@ -75,6 +75,19 @@ EscenaTitol::EscenaTitol(SDLManager& sdl, ContextEscenes& context)
|
||||
starfield_->set_brightness(0.0f);
|
||||
}
|
||||
|
||||
// Inicialitzar animador de naus 3D
|
||||
ship_animator_ = std::make_unique<Title::ShipAnimator>(sdl_.obte_renderer());
|
||||
ship_animator_->inicialitzar();
|
||||
|
||||
if (estat_actual_ == EstatTitol::MAIN) {
|
||||
// Jump to MAIN: empezar entrada inmediatamente
|
||||
ship_animator_->set_visible(true);
|
||||
ship_animator_->start_entry_animation();
|
||||
} else {
|
||||
// Flux normal: NO empezar entrada todavía (esperaran a MAIN)
|
||||
ship_animator_->set_visible(false);
|
||||
}
|
||||
|
||||
// Inicialitzar lletres del títol "ORNI ATTACK!"
|
||||
inicialitzar_titol();
|
||||
|
||||
@@ -310,6 +323,15 @@ void EscenaTitol::actualitzar(float delta_time) {
|
||||
starfield_->actualitzar(delta_time);
|
||||
}
|
||||
|
||||
// Actualitzar naus (quan visibles)
|
||||
if (ship_animator_ &&
|
||||
(estat_actual_ == EstatTitol::STARFIELD_FADE_IN ||
|
||||
estat_actual_ == EstatTitol::STARFIELD ||
|
||||
estat_actual_ == EstatTitol::MAIN ||
|
||||
estat_actual_ == EstatTitol::PLAYER_JOIN_PHASE)) {
|
||||
ship_animator_->actualitzar(delta_time);
|
||||
}
|
||||
|
||||
switch (estat_actual_) {
|
||||
case EstatTitol::STARFIELD_FADE_IN: {
|
||||
temps_acumulat_ += delta_time;
|
||||
@@ -337,6 +359,10 @@ void EscenaTitol::actualitzar(float delta_time) {
|
||||
temps_estat_main_ = 0.0f; // Reset timer al entrar a MAIN
|
||||
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();
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -372,17 +398,34 @@ void EscenaTitol::actualitzar(float delta_time) {
|
||||
actualitzar_animacio_logo(delta_time);
|
||||
|
||||
// [NOU] Continuar comprovant si l'altre jugador vol unir-se durant la transició ("late join")
|
||||
if (checkStartGameButtonPressed()) {
|
||||
// Updates config_partida_ if pressed, logs are in the method
|
||||
context_.set_config_partida(config_partida_);
|
||||
{
|
||||
bool p1_actiu_abans = config_partida_.jugador1_actiu;
|
||||
bool p2_actiu_abans = config_partida_.jugador2_actiu;
|
||||
|
||||
// Reproducir so de LASER quan el segon jugador s'uneix
|
||||
Audio::get()->playSound(Defaults::Sound::LASER, Audio::Group::GAME);
|
||||
if (checkStartGameButtonPressed()) {
|
||||
// Updates config_partida_ if pressed, logs are in the method
|
||||
context_.set_config_partida(config_partida_);
|
||||
|
||||
// Reiniciar el timer per allargar el temps de transició
|
||||
temps_acumulat_ = 0.0f;
|
||||
// Trigger animació de sortida per la nau que acaba d'unir-se
|
||||
if (ship_animator_) {
|
||||
if (config_partida_.jugador1_actiu && !p1_actiu_abans) {
|
||||
ship_animator_->trigger_exit_animation_for_player(1);
|
||||
std::cout << "[EscenaTitol] P1 late join - ship exiting\n";
|
||||
}
|
||||
if (config_partida_.jugador2_actiu && !p2_actiu_abans) {
|
||||
ship_animator_->trigger_exit_animation_for_player(2);
|
||||
std::cout << "[EscenaTitol] P2 late join - ship exiting\n";
|
||||
}
|
||||
}
|
||||
|
||||
std::cout << "[EscenaTitol] Segon jugador s'ha unit - so i timer reiniciats\n";
|
||||
// Reproducir so de LASER quan el segon jugador s'uneix
|
||||
Audio::get()->playSound(Defaults::Sound::LASER, Audio::Group::GAME);
|
||||
|
||||
// Reiniciar el timer per allargar el temps de transició
|
||||
temps_acumulat_ = 0.0f;
|
||||
|
||||
std::cout << "[EscenaTitol] Segon jugador s'ha unit - so i timer reiniciats\n";
|
||||
}
|
||||
}
|
||||
|
||||
if (temps_acumulat_ >= DURACIO_TRANSITION) {
|
||||
@@ -412,11 +455,19 @@ void EscenaTitol::actualitzar(float delta_time) {
|
||||
estat_actual_ = EstatTitol::MAIN;
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
// Verificar boton START para iniciar partida desde MAIN
|
||||
if (estat_actual_ == EstatTitol::MAIN) {
|
||||
// Guardar estat anterior per detectar qui ha premut START AQUEST frame
|
||||
bool p1_actiu_abans = config_partida_.jugador1_actiu;
|
||||
bool p2_actiu_abans = config_partida_.jugador2_actiu;
|
||||
|
||||
if (checkStartGameButtonPressed()) {
|
||||
// Configurar partida abans de canviar d'escena
|
||||
context_.set_config_partida(config_partida_);
|
||||
@@ -429,6 +480,19 @@ void EscenaTitol::actualitzar(float delta_time) {
|
||||
context_.canviar_escena(Escena::JOC);
|
||||
estat_actual_ = EstatTitol::PLAYER_JOIN_PHASE;
|
||||
temps_acumulat_ = 0.0f;
|
||||
|
||||
// Trigger animació de sortida NOMÉS per les naus que han premut START
|
||||
if (ship_animator_) {
|
||||
if (config_partida_.jugador1_actiu && !p1_actiu_abans) {
|
||||
ship_animator_->trigger_exit_animation_for_player(1);
|
||||
std::cout << "[EscenaTitol] P1 ship exiting\n";
|
||||
}
|
||||
if (config_partida_.jugador2_actiu && !p2_actiu_abans) {
|
||||
ship_animator_->trigger_exit_animation_for_player(2);
|
||||
std::cout << "[EscenaTitol] P2 ship exiting\n";
|
||||
}
|
||||
}
|
||||
|
||||
Audio::get()->fadeOutMusic(MUSIC_FADE);
|
||||
Audio::get()->playSound(Defaults::Sound::LASER, Audio::Group::GAME);
|
||||
}
|
||||
@@ -471,6 +535,15 @@ void EscenaTitol::dibuixar() {
|
||||
starfield_->dibuixar();
|
||||
}
|
||||
|
||||
// Dibuixar naus (després starfield, abans logo)
|
||||
if (ship_animator_ &&
|
||||
(estat_actual_ == EstatTitol::STARFIELD_FADE_IN ||
|
||||
estat_actual_ == EstatTitol::STARFIELD ||
|
||||
estat_actual_ == EstatTitol::MAIN ||
|
||||
estat_actual_ == EstatTitol::PLAYER_JOIN_PHASE)) {
|
||||
ship_animator_->dibuixar();
|
||||
}
|
||||
|
||||
// En els estats STARFIELD_FADE_IN i STARFIELD, només mostrar starfield (sense text)
|
||||
if (estat_actual_ == EstatTitol::STARFIELD_FADE_IN || estat_actual_ == EstatTitol::STARFIELD) {
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user