Files
orni_attack/source/main.cpp
2025-11-27 21:47:08 +01:00

81 lines
2.3 KiB
C++

// main.cpp - Punt d'entrada del joc Asteroides
// © 1999 Visente i Sergi (versió Pascal)
// © 2025 Port a C++20 amb SDL3
#include "core/rendering/sdl_manager.hpp"
#include "game/joc_asteroides.hpp"
int main(int argc, char* argv[]) {
// Crear gestor SDL (finestra centrada 640x480 per defecte)
SDLManager sdl;
// Crear instància del joc
JocAsteroides joc(sdl.obte_renderer());
joc.inicialitzar();
// Loop principal del joc
SDL_Event event;
bool running = true;
// Control de temps per delta_time
Uint64 last_time = SDL_GetTicks();
while (running) {
// Calcular delta_time real
Uint64 current_time = SDL_GetTicks();
float delta_time = (current_time - last_time) / 1000.0f; // Convertir ms a segons
last_time = current_time;
// Limitar delta_time per evitar grans salts
if (delta_time > 0.05f) { // Màxim 50ms (20 FPS mínim)
delta_time = 0.05f;
}
// Processar events SDL
while (SDL_PollEvent(&event)) {
// [NUEVO] Manejo de ventana ANTES de lógica del juego
if (sdl.handleWindowEvent(event)) {
continue; // Evento procesado, siguiente
}
// [NUEVO] Teclas globales de ventana
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;
}
}
// Procesamiento normal del juego
joc.processar_input(event);
// Detectar tancament de finestra o ESC
if (event.type == SDL_EVENT_QUIT ||
(event.type == SDL_EVENT_KEY_DOWN && event.key.key == SDLK_ESCAPE)) {
running = false;
}
}
// Actualitzar física del joc amb delta_time real
joc.actualitzar(delta_time);
// Netejar pantalla (negre)
sdl.neteja(0, 0, 0);
// Dibuixar joc
joc.dibuixar();
// Presentar renderer (swap buffers)
sdl.presenta();
}
return 0;
}