millorada la gestio d'escenes i opcions
This commit is contained in:
@@ -13,9 +13,14 @@
|
||||
#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"
|
||||
|
||||
// Using declarations per simplificar el codi
|
||||
using GestorEscenes::ContextEscenes;
|
||||
using Escena = ContextEscenes::Escena;
|
||||
using Opcio = ContextEscenes::Opcio;
|
||||
|
||||
// Helper: calcular el progrés individual d'una lletra
|
||||
// en funció del progrés global (efecte seqüencial)
|
||||
static float calcular_progress_letra(size_t letra_index, size_t num_letras, float global_progress, float threshold) {
|
||||
@@ -38,14 +43,20 @@ static float calcular_progress_letra(size_t letra_index, size_t num_letras, floa
|
||||
}
|
||||
}
|
||||
|
||||
EscenaLogo::EscenaLogo(SDLManager& sdl)
|
||||
EscenaLogo::EscenaLogo(SDLManager& sdl, ContextEscenes& context)
|
||||
: sdl_(sdl),
|
||||
context_(context),
|
||||
estat_actual_(EstatAnimacio::PRE_ANIMATION),
|
||||
temps_estat_actual_(0.0f),
|
||||
debris_manager_(std::make_unique<Effects::DebrisManager>(sdl.obte_renderer())),
|
||||
lletra_explosio_index_(0),
|
||||
temps_des_ultima_explosio_(0.0f) {
|
||||
std::cout << "Escena Logo: Inicialitzant...\n";
|
||||
|
||||
// Consumir opcions (LOGO no processa opcions actualment)
|
||||
auto opcio = context_.consumir_opcio();
|
||||
(void)opcio; // Suprimir warning
|
||||
|
||||
so_reproduit_.fill(false); // Inicialitzar seguiment de sons
|
||||
inicialitzar_lletres();
|
||||
}
|
||||
@@ -54,7 +65,7 @@ void EscenaLogo::executar() {
|
||||
SDL_Event event;
|
||||
Uint64 last_time = SDL_GetTicks();
|
||||
|
||||
while (GestorEscenes::actual == GestorEscenes::Escena::LOGO) {
|
||||
while (GestorEscenes::actual == Escena::LOGO) {
|
||||
// Calcular delta_time real
|
||||
Uint64 current_time = SDL_GetTicks();
|
||||
float delta_time = (current_time - last_time) / 1000.0f;
|
||||
@@ -79,7 +90,7 @@ void EscenaLogo::executar() {
|
||||
}
|
||||
|
||||
// Events globals (F1/F2/F3/ESC/QUIT)
|
||||
if (GlobalEvents::handle(event, sdl_)) {
|
||||
if (GlobalEvents::handle(event, sdl_, context_)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -292,8 +303,9 @@ void EscenaLogo::actualitzar(float delta_time) {
|
||||
|
||||
case EstatAnimacio::POST_EXPLOSION:
|
||||
if (temps_estat_actual_ >= DURACIO_POST_EXPLOSION) {
|
||||
// Iniciar música de títol abans de la transició
|
||||
GestorEscenes::actual = GestorEscenes::Escena::TITOL;
|
||||
// Transició a pantalla de títol
|
||||
context_.canviar_escena(Escena::TITOL);
|
||||
GestorEscenes::actual = Escena::TITOL;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -394,6 +406,12 @@ void EscenaLogo::processar_events(const SDL_Event& event) {
|
||||
// Qualsevol tecla o clic de ratolí salta a la pantalla de títol
|
||||
if (event.type == SDL_EVENT_KEY_DOWN ||
|
||||
event.type == SDL_EVENT_MOUSE_BUTTON_DOWN) {
|
||||
GestorEscenes::actual = GestorEscenes::Escena::TITOL;
|
||||
// Utilitzar context per especificar escena i opció
|
||||
context_.canviar_escena(
|
||||
Escena::TITOL,
|
||||
Opcio::JUMP_TO_TITLE_MAIN
|
||||
);
|
||||
// Backward compatibility: També actualitzar GestorEscenes::actual
|
||||
GestorEscenes::actual = Escena::TITOL;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user