afegides escenes
This commit is contained in:
91
source/game/escenes/escena_logo.cpp
Normal file
91
source/game/escenes/escena_logo.cpp
Normal file
@@ -0,0 +1,91 @@
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user