millorada la JOIN_PHASE i fase final de TITOL

This commit is contained in:
2025-12-16 12:34:19 +01:00
parent f3f0bfcd9a
commit 75a4a1b3b9
2 changed files with 38 additions and 14 deletions

View File

@@ -365,7 +365,7 @@ void EscenaTitol::actualitzar(float delta_time) {
break;
}
case EstatTitol::TRANSITION_TO_GAME:
case EstatTitol::PLAYER_JOIN_PHASE:
temps_acumulat_ += delta_time;
// Continuar animació orbital durant la transició
@@ -375,11 +375,32 @@ void EscenaTitol::actualitzar(float delta_time) {
if (checkStartGameButtonPressed()) {
// Updates config_partida_ if pressed, logs are in the method
context_.set_config_partida(config_partida_);
// 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) {
// Transició a JOC (la música ja s'ha parat en el fade)
// Transició a pantalla negra
estat_actual_ = EstatTitol::BLACK_SCREEN;
temps_acumulat_ = 0.0f;
std::cout << "[EscenaTitol] Passant a BLACK_SCREEN\n";
}
break;
case EstatTitol::BLACK_SCREEN:
temps_acumulat_ += delta_time;
// No animation, no input checking - just wait
if (temps_acumulat_ >= DURACIO_BLACK_SCREEN) {
// Transició a escena JOC
GestorEscenes::actual = Escena::JOC;
std::cout << "[EscenaTitol] Canviant a escena JOC\n";
}
break;
}
@@ -406,7 +427,7 @@ void EscenaTitol::actualitzar(float delta_time) {
<< std::endl;
context_.canviar_escena(Escena::JOC);
estat_actual_ = EstatTitol::TRANSITION_TO_GAME;
estat_actual_ = EstatTitol::PLAYER_JOIN_PHASE;
temps_acumulat_ = 0.0f;
Audio::get()->fadeOutMusic(MUSIC_FADE);
Audio::get()->playSound(Defaults::Sound::LASER, Audio::Group::GAME);
@@ -445,8 +466,8 @@ void EscenaTitol::actualitzar_animacio_logo(float delta_time) {
}
void EscenaTitol::dibuixar() {
// Dibuixar starfield de fons (sempre, en tots els estats)
if (starfield_) {
// Dibuixar starfield de fons (en tots els estats excepte BLACK_SCREEN)
if (starfield_ && estat_actual_ != EstatTitol::BLACK_SCREEN) {
starfield_->dibuixar();
}
@@ -455,8 +476,9 @@ void EscenaTitol::dibuixar() {
return;
}
// Estat MAIN i TRANSITION_TO_GAME: Dibuixar títol i text (sobre el starfield)
if (estat_actual_ == EstatTitol::MAIN || estat_actual_ == EstatTitol::TRANSITION_TO_GAME) {
// Estat MAIN i PLAYER_JOIN_PHASE: Dibuixar títol i text (sobre el starfield)
// BLACK_SCREEN: no dibuixar res (fons negre ja està netejat)
if (estat_actual_ == EstatTitol::MAIN || estat_actual_ == EstatTitol::PLAYER_JOIN_PHASE) {
// === Calcular i renderitzar ombra (només si animació activa) ===
if (animacio_activa_) {
float temps_shadow = temps_animacio_ - SHADOW_DELAY;
@@ -545,7 +567,7 @@ void EscenaTitol::dibuixar() {
const float spacing = 2.0f; // Espai entre caràcters (usat també per copyright)
bool mostrar_text = true;
if (estat_actual_ == EstatTitol::TRANSITION_TO_GAME) {
if (estat_actual_ == EstatTitol::PLAYER_JOIN_PHASE) {
// Parpelleig: sin oscil·la entre -1 i 1, volem ON quan > 0
float fase = temps_acumulat_ * BLINK_FREQUENCY * 2.0f * 3.14159f; // 2π × freq × temps
mostrar_text = (std::sin(fase) > 0.0f);