Files
orni_attack/source/game/escenes/escena_logo.cpp
2025-11-28 20:22:15 +01:00

92 lines
2.3 KiB
C++

// escena_logo.cpp - Implementació de l'escena logo
// © 2025 Port a C++20
#include "escena_logo.hpp"
#include "../../core/system/gestor_escenes.hpp"
#include <iostream>
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;
}
}