// escena_logo.cpp - Implementació de l'escena logo // © 2025 Port a C++20 #include "escena_logo.hpp" #include "../../core/system/gestor_escenes.hpp" #include EscenaLogo::EscenaLogo(SDLManager& sdl) : sdl_(sdl), temps_acumulat_(0.0f) { std::cout << "Escena Logo: Inicialitzant...\n"; } void EscenaLogo::executar() { SDL_Event event; Uint64 last_time = SDL_GetTicks(); while (GestorEscenes::actual == GestorEscenes::Escena::LOGO) { // Calcular delta_time real Uint64 current_time = SDL_GetTicks(); float delta_time = (current_time - last_time) / 1000.0f; last_time = current_time; // Limitar delta_time per evitar grans salts if (delta_time > 0.05f) { delta_time = 0.05f; } // Processar events SDL while (SDL_PollEvent(&event)) { // Manejo de finestra if (sdl_.handleWindowEvent(event)) { continue; } // Tecles globals de finestra (F1/F2/F3) if (event.type == SDL_EVENT_KEY_DOWN) { switch (event.key.key) { case SDLK_F1: sdl_.decreaseWindowSize(); continue; case SDLK_F2: sdl_.increaseWindowSize(); continue; case SDLK_F3: sdl_.toggleFullscreen(); continue; } } // Processar events de l'escena processar_events(event); // ESC o tancar finestra = eixir if (event.type == SDL_EVENT_QUIT || (event.type == SDL_EVENT_KEY_DOWN && event.key.key == SDLK_ESCAPE)) { GestorEscenes::actual = GestorEscenes::Escena::EIXIR; } } // Actualitzar lògica actualitzar(delta_time); // Dibuixar dibuixar(); } std::cout << "Escena Logo: Finalitzant...\n"; } void EscenaLogo::actualitzar(float delta_time) { temps_acumulat_ += delta_time; // Després de 2 segons, saltar al joc if (temps_acumulat_ >= 2.0f) { GestorEscenes::actual = GestorEscenes::Escena::JOC; } } void EscenaLogo::dibuixar() { // Pantalla negra sdl_.neteja(0, 0, 0); sdl_.presenta(); } void EscenaLogo::processar_events(const SDL_Event& event) { // Qualsevol tecla o clic de ratolí salta al joc if (event.type == SDL_EVENT_KEY_DOWN || event.type == SDL_EVENT_MOUSE_BUTTON_DOWN) { GestorEscenes::actual = GestorEscenes::Escena::JOC; } }