millorada la gestio d'escenes i opcions
This commit is contained in:
@@ -12,12 +12,18 @@
|
||||
#include "core/graphics/shape_loader.hpp"
|
||||
#include "core/input/mouse.hpp"
|
||||
#include "core/rendering/shape_renderer.hpp"
|
||||
#include "core/system/gestor_escenes.hpp"
|
||||
#include "core/system/context_escenes.hpp"
|
||||
#include "core/system/global_events.hpp"
|
||||
#include "project.h"
|
||||
|
||||
EscenaTitol::EscenaTitol(SDLManager& sdl)
|
||||
// Using declarations per simplificar el codi
|
||||
using GestorEscenes::ContextEscenes;
|
||||
using Escena = ContextEscenes::Escena;
|
||||
using Opcio = ContextEscenes::Opcio;
|
||||
|
||||
EscenaTitol::EscenaTitol(SDLManager& sdl, ContextEscenes& context)
|
||||
: sdl_(sdl),
|
||||
context_(context),
|
||||
text_(sdl.obte_renderer()),
|
||||
estat_actual_(EstatTitol::STARFIELD_FADE_IN),
|
||||
temps_acumulat_(0.0f),
|
||||
@@ -27,6 +33,15 @@ EscenaTitol::EscenaTitol(SDLManager& sdl)
|
||||
factor_lerp_(0.0f) {
|
||||
std::cout << "Escena Titol: Inicialitzant...\n";
|
||||
|
||||
// Processar opció del context
|
||||
auto opcio = context_.consumir_opcio();
|
||||
|
||||
if (opcio == Opcio::JUMP_TO_TITLE_MAIN) {
|
||||
std::cout << "Escena Titol: Opció JUMP_TO_TITLE_MAIN activada\n";
|
||||
estat_actual_ = EstatTitol::MAIN;
|
||||
temps_estat_main_ = 0.0f;
|
||||
}
|
||||
|
||||
// Crear starfield de fons
|
||||
Punt centre_pantalla{
|
||||
Defaults::Game::WIDTH / 2.0f,
|
||||
@@ -45,8 +60,14 @@ EscenaTitol::EscenaTitol(SDLManager& sdl)
|
||||
150 // densitat: 150 estrelles (50 per capa)
|
||||
);
|
||||
|
||||
// Iniciar amb brightness 0.0 per al fade-in
|
||||
starfield_->set_brightness(0.0f);
|
||||
// Brightness depèn de l'opció
|
||||
if (estat_actual_ == EstatTitol::MAIN) {
|
||||
// Si saltem a MAIN, starfield instantàniament brillant
|
||||
starfield_->set_brightness(BRIGHTNESS_STARFIELD);
|
||||
} else {
|
||||
// Flux normal: comença amb brightness 0.0 per fade-in
|
||||
starfield_->set_brightness(0.0f);
|
||||
}
|
||||
|
||||
// Inicialitzar lletres del títol "ORNI ATTACK!"
|
||||
inicialitzar_titol();
|
||||
@@ -216,7 +237,7 @@ void EscenaTitol::executar() {
|
||||
SDL_Event event;
|
||||
Uint64 last_time = SDL_GetTicks();
|
||||
|
||||
while (GestorEscenes::actual == GestorEscenes::Escena::TITOL) {
|
||||
while (GestorEscenes::actual == Escena::TITOL) {
|
||||
// Calcular delta_time real
|
||||
Uint64 current_time = SDL_GetTicks();
|
||||
float delta_time = (current_time - last_time) / 1000.0f;
|
||||
@@ -241,7 +262,7 @@ void EscenaTitol::executar() {
|
||||
}
|
||||
|
||||
// Events globals (F1/F2/F3/F4/ESC/QUIT)
|
||||
if (GlobalEvents::handle(event, sdl_)) {
|
||||
if (GlobalEvents::handle(event, sdl_, context_)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -365,7 +386,7 @@ void EscenaTitol::actualitzar(float delta_time) {
|
||||
temps_acumulat_ += delta_time;
|
||||
if (temps_acumulat_ >= DURACIO_TRANSITION) {
|
||||
// Transició a JOC (la música ja s'ha parat en el fade)
|
||||
GestorEscenes::actual = GestorEscenes::Escena::JOC;
|
||||
GestorEscenes::actual = Escena::JOC;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -520,14 +541,21 @@ void EscenaTitol::processar_events(const SDL_Event& event) {
|
||||
// Saltar directament a MAIN (ometre fade-in i starfield)
|
||||
estat_actual_ = EstatTitol::MAIN;
|
||||
starfield_->set_brightness(BRIGHTNESS_STARFIELD); // Assegurar brightness final
|
||||
temps_estat_main_ = 0.0f; // Reset timer per animació de títol
|
||||
break;
|
||||
|
||||
case EstatTitol::STARFIELD:
|
||||
// Saltar a MAIN
|
||||
estat_actual_ = EstatTitol::MAIN;
|
||||
temps_estat_main_ = 0.0f; // Reset timer
|
||||
break;
|
||||
|
||||
case EstatTitol::MAIN:
|
||||
// Utilitzar context per transició a JOC
|
||||
context_.canviar_escena(Escena::JOC);
|
||||
// NO actualitzar GestorEscenes::actual aquí!
|
||||
// La transició es fa en l'estat TRANSITION_TO_GAME
|
||||
|
||||
// Iniciar transició amb fade-out de música
|
||||
estat_actual_ = EstatTitol::TRANSITION_TO_GAME;
|
||||
temps_acumulat_ = 0.0f; // Reset del comptador
|
||||
|
||||
Reference in New Issue
Block a user