millorada la JOIN_PHASE i fase final de TITOL
This commit is contained in:
@@ -365,7 +365,7 @@ void EscenaTitol::actualitzar(float delta_time) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case EstatTitol::TRANSITION_TO_GAME:
|
case EstatTitol::PLAYER_JOIN_PHASE:
|
||||||
temps_acumulat_ += delta_time;
|
temps_acumulat_ += delta_time;
|
||||||
|
|
||||||
// Continuar animació orbital durant la transició
|
// Continuar animació orbital durant la transició
|
||||||
@@ -375,11 +375,32 @@ void EscenaTitol::actualitzar(float delta_time) {
|
|||||||
if (checkStartGameButtonPressed()) {
|
if (checkStartGameButtonPressed()) {
|
||||||
// Updates config_partida_ if pressed, logs are in the method
|
// Updates config_partida_ if pressed, logs are in the method
|
||||||
context_.set_config_partida(config_partida_);
|
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) {
|
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;
|
GestorEscenes::actual = Escena::JOC;
|
||||||
|
std::cout << "[EscenaTitol] Canviant a escena JOC\n";
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -406,7 +427,7 @@ void EscenaTitol::actualitzar(float delta_time) {
|
|||||||
<< std::endl;
|
<< std::endl;
|
||||||
|
|
||||||
context_.canviar_escena(Escena::JOC);
|
context_.canviar_escena(Escena::JOC);
|
||||||
estat_actual_ = EstatTitol::TRANSITION_TO_GAME;
|
estat_actual_ = EstatTitol::PLAYER_JOIN_PHASE;
|
||||||
temps_acumulat_ = 0.0f;
|
temps_acumulat_ = 0.0f;
|
||||||
Audio::get()->fadeOutMusic(MUSIC_FADE);
|
Audio::get()->fadeOutMusic(MUSIC_FADE);
|
||||||
Audio::get()->playSound(Defaults::Sound::LASER, Audio::Group::GAME);
|
Audio::get()->playSound(Defaults::Sound::LASER, Audio::Group::GAME);
|
||||||
@@ -445,8 +466,8 @@ void EscenaTitol::actualitzar_animacio_logo(float delta_time) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void EscenaTitol::dibuixar() {
|
void EscenaTitol::dibuixar() {
|
||||||
// Dibuixar starfield de fons (sempre, en tots els estats)
|
// Dibuixar starfield de fons (en tots els estats excepte BLACK_SCREEN)
|
||||||
if (starfield_) {
|
if (starfield_ && estat_actual_ != EstatTitol::BLACK_SCREEN) {
|
||||||
starfield_->dibuixar();
|
starfield_->dibuixar();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -455,8 +476,9 @@ void EscenaTitol::dibuixar() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Estat MAIN i TRANSITION_TO_GAME: Dibuixar títol i text (sobre el starfield)
|
// Estat MAIN i PLAYER_JOIN_PHASE: Dibuixar títol i text (sobre el starfield)
|
||||||
if (estat_actual_ == EstatTitol::MAIN || estat_actual_ == EstatTitol::TRANSITION_TO_GAME) {
|
// 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) ===
|
// === Calcular i renderitzar ombra (només si animació activa) ===
|
||||||
if (animacio_activa_) {
|
if (animacio_activa_) {
|
||||||
float temps_shadow = temps_animacio_ - SHADOW_DELAY;
|
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)
|
const float spacing = 2.0f; // Espai entre caràcters (usat també per copyright)
|
||||||
|
|
||||||
bool mostrar_text = true;
|
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
|
// 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
|
float fase = temps_acumulat_ * BLINK_FREQUENCY * 2.0f * 3.14159f; // 2π × freq × temps
|
||||||
mostrar_text = (std::sin(fase) > 0.0f);
|
mostrar_text = (std::sin(fase) > 0.0f);
|
||||||
|
|||||||
@@ -34,10 +34,11 @@ class EscenaTitol {
|
|||||||
private:
|
private:
|
||||||
// Màquina d'estats per la pantalla de títol
|
// Màquina d'estats per la pantalla de títol
|
||||||
enum class EstatTitol {
|
enum class EstatTitol {
|
||||||
STARFIELD_FADE_IN, // Fade-in del starfield (1.5s)
|
STARFIELD_FADE_IN, // Fade-in del starfield (3.0s)
|
||||||
STARFIELD, // Pantalla con el campo de estrellas
|
STARFIELD, // Pantalla amb camp d'estrelles (4.0s)
|
||||||
MAIN, // Pantalla de títol amb text
|
MAIN, // Pantalla de títol amb text (indefinit, fins START)
|
||||||
TRANSITION_TO_GAME // Transició amb fade-out de música i text parpellejant
|
PLAYER_JOIN_PHASE, // Fase d'unió de jugadors: fade-out música + text parpellejant (2.5s)
|
||||||
|
BLACK_SCREEN // Pantalla negra de transició (2.0s)
|
||||||
};
|
};
|
||||||
|
|
||||||
// Estructura per emmagatzemar informació de cada lletra del títol
|
// Estructura per emmagatzemar informació de cada lletra del títol
|
||||||
@@ -76,13 +77,14 @@ class EscenaTitol {
|
|||||||
static constexpr float BRIGHTNESS_STARFIELD = 1.2f; // Brightness del starfield (>1.0 = més brillant)
|
static constexpr float BRIGHTNESS_STARFIELD = 1.2f; // Brightness del starfield (>1.0 = més brillant)
|
||||||
static constexpr float DURACIO_FADE_IN = 3.0f; // Duració del fade-in del starfield (1.5 segons)
|
static constexpr float DURACIO_FADE_IN = 3.0f; // Duració del fade-in del starfield (1.5 segons)
|
||||||
static constexpr float DURACIO_INIT = 4.0f; // Duració de l'estat INIT (2 segons)
|
static constexpr float DURACIO_INIT = 4.0f; // Duració de l'estat INIT (2 segons)
|
||||||
static constexpr float DURACIO_TRANSITION = 1.5f; // Duració de la transició (1.5 segons)
|
static constexpr float DURACIO_TRANSITION = 2.5f; // Duració de la transició (1.5 segons)
|
||||||
static constexpr float ESCALA_TITULO = 0.6f; // Escala per les lletres del títol (50%)
|
static constexpr float ESCALA_TITULO = 0.6f; // Escala per les lletres del títol (50%)
|
||||||
static constexpr float ESPAI_ENTRE_LLETRES = 10.0f; // Espai entre lletres
|
static constexpr float ESPAI_ENTRE_LLETRES = 10.0f; // Espai entre lletres
|
||||||
static constexpr float Y_ORNI = 150.0f; // Posició Y de "ORNI"
|
static constexpr float Y_ORNI = 150.0f; // Posició Y de "ORNI"
|
||||||
static constexpr float SEPARACION_LINEAS = 10.0f; // Separació entre "ORNI" i "ATTACK!" (0.0f = pegades)
|
static constexpr float SEPARACION_LINEAS = 10.0f; // Separació entre "ORNI" i "ATTACK!" (0.0f = pegades)
|
||||||
static constexpr float BLINK_FREQUENCY = 3.0f; // Freqüència de parpelleig (3 Hz)
|
static constexpr float BLINK_FREQUENCY = 3.0f; // Freqüència de parpelleig (3 Hz)
|
||||||
static constexpr int MUSIC_FADE = 1000; // Duracio del fade de la musica del titol al començar a jugar
|
static constexpr float DURACIO_BLACK_SCREEN = 2.0f; // Duració pantalla negra (2 segons)
|
||||||
|
static constexpr int MUSIC_FADE = 1500; // Duracio del fade de la musica del titol al començar a jugar
|
||||||
|
|
||||||
// Constants d'animació del logo
|
// Constants d'animació del logo
|
||||||
static constexpr float ORBIT_AMPLITUDE_X = 4.0f; // Amplitud oscil·lació horitzontal (píxels)
|
static constexpr float ORBIT_AMPLITUDE_X = 4.0f; // Amplitud oscil·lació horitzontal (píxels)
|
||||||
|
|||||||
Reference in New Issue
Block a user