sdl_callbacks

This commit is contained in:
2026-04-14 12:21:00 +02:00
parent c0accd25e2
commit f5da35bfb2
20 changed files with 406 additions and 177 deletions

View File

@@ -28,6 +28,7 @@
#include "text.hpp" // Para Text
#include "texture.hpp" // Para Texture
#include "tiled_bg.hpp" // Para TiledBG, TiledBGMode
#include "ui/logger.hpp" // Para section
#include "ui/service_menu.hpp" // Para ServiceMenu
#include "utils.hpp" // Para Zone
@@ -47,6 +48,11 @@ Credits::Credits()
}
initVars();
startCredits();
Logger::section("CREDITS");
// Inicializa el timer de delta time para el primer frame del callback
last_time_ = SDL_GetTicks();
}
// Destructor
@@ -69,7 +75,20 @@ auto Credits::calculateDeltaTime() -> float {
return DELTA_TIME;
}
// Bucle principal
// Avanza un frame (llamado desde Director::iterate)
void Credits::iterate() {
checkInput();
const float DELTA_TIME = calculateDeltaTime();
update(DELTA_TIME);
render();
}
// Procesa un evento (llamado desde Director::handleEvent)
void Credits::handleEvent(const SDL_Event& /*event*/) {
// Eventos globales ya gestionados por Director::handleEvent
}
// Bucle principal legacy (fallback)
void Credits::run() {
last_time_ = SDL_GetTicks();

View File

@@ -22,7 +22,11 @@ class Credits {
Credits();
~Credits();
// --- Bucle principal ---
// --- Callbacks para el bucle SDL_MAIN_USE_CALLBACKS ---
void iterate(); // Ejecuta un frame
void handleEvent(const SDL_Event& event); // Procesa un evento
// --- Bucle principal legacy (fallback) ---
void run();
private:

View File

@@ -41,6 +41,7 @@
#include "smart_sprite.hpp" // Para SmartSprite
#include "stage.hpp" // Para StageManager, StageData
#include "tabe.hpp" // Para Tabe
#include "ui/logger.hpp" // Para section
#include "text.hpp" // Para Text
#include "texture.hpp" // Para Texture
#include "ui/service_menu.hpp" // Para ServiceMenu
@@ -131,6 +132,11 @@ Game::Game(Player::Id player_id, int current_stage, bool demo_enabled)
#ifdef RECORDING
setState(State::PLAYING);
#endif
Logger::section(demo_.enabled ? "GAME (DEMO)" : "GAME");
// Inicializa el timer de delta time para el primer frame del callback
last_time_ = SDL_GetTicks();
}
Game::~Game() {
@@ -978,7 +984,33 @@ auto Game::calculateDeltaTime() -> float {
return DELTA_TIME_MS / 1000.0F; // Convertir de milisegundos a segundos
}
// Bucle para el juego
// Avanza un frame del juego (llamado desde Director::iterate)
void Game::iterate() {
const float DELTA_TIME = calculateDeltaTime();
checkInput();
update(DELTA_TIME);
render();
}
// Procesa un evento del juego (llamado desde Director::handleEvent)
void Game::handleEvent(const SDL_Event& event) {
switch (event.type) {
case SDL_EVENT_WINDOW_FOCUS_LOST:
pause_manager_->setFocusLossPause(!demo_.enabled);
break;
case SDL_EVENT_WINDOW_FOCUS_GAINED:
pause_manager_->setFocusLossPause(false);
break;
default:
break;
}
#ifdef _DEBUG
handleDebugEvents(event);
#endif
}
// Bucle para el juego (fallback legacy)
void Game::run() {
last_time_ = SDL_GetTicks();

View File

@@ -60,7 +60,11 @@ class Game {
Game(Player::Id player_id, int current_stage, bool demo_enabled); // Constructor principal
~Game(); // Destructor
// --- Bucle principal ---
// --- Callbacks para el bucle SDL_MAIN_USE_CALLBACKS ---
void iterate(); // Ejecuta un frame
void handleEvent(const SDL_Event& event); // Procesa un evento
// --- Bucle principal legacy (fallback) ---
void run(); // Ejecuta el bucle principal del juego
private:

View File

@@ -23,6 +23,7 @@
#include "resource.hpp" // Para Resource
#include "screen.hpp" // Para Screen
#include "section.hpp" // Para Name, name, Options, options
#include "ui/logger.hpp" // Para section
#include "sprite.hpp" // Para Sprite
#include "text.hpp" // Para Text, Text::SHADOW, Text::COLOR
#include "texture.hpp" // Para Texture
@@ -45,6 +46,12 @@ HiScoreTable::HiScoreTable()
initBackground();
iniEntryColors();
createSprites();
Logger::section("HI-SCORE TABLE");
// Inicializa el timer de delta time y arranca la música
last_time_ = SDL_GetTicks();
Audio::get()->playMusic("title.ogg");
}
// Destructor
@@ -126,7 +133,20 @@ auto HiScoreTable::calculateDeltaTime() -> float {
return DELTA_TIME;
}
// Bucle para la pantalla de instrucciones
// Avanza un frame (llamado desde Director::iterate)
void HiScoreTable::iterate() {
const float DELTA_TIME = calculateDeltaTime();
checkInput();
update(DELTA_TIME);
render();
}
// Procesa un evento (llamado desde Director::handleEvent)
void HiScoreTable::handleEvent(const SDL_Event& /*event*/) {
// Eventos globales ya gestionados por Director::handleEvent
}
// Bucle para la pantalla de puntuaciones (fallback legacy)
void HiScoreTable::run() {
last_time_ = SDL_GetTicks();
Audio::get()->playMusic("title.ogg");

View File

@@ -27,7 +27,11 @@ class HiScoreTable {
HiScoreTable();
~HiScoreTable();
// --- Bucle principal ---
// --- Callbacks para el bucle SDL_MAIN_USE_CALLBACKS ---
void iterate(); // Ejecuta un frame
void handleEvent(const SDL_Event& event); // Procesa un evento
// --- Bucle principal legacy (fallback) ---
void run();
private:

View File

@@ -23,6 +23,7 @@
#include "sprite.hpp" // Para Sprite
#include "text.hpp" // Para Text, Text::CENTER, Text::COLOR, Text::SHADOW
#include "tiled_bg.hpp" // Para TiledBG, TiledBGMode
#include "ui/logger.hpp" // Para section
#include "utils.hpp"
// Constructor
@@ -57,6 +58,12 @@ Instructions::Instructions()
// Inicializa los sprites de los items
iniSprites();
Logger::section("INSTRUCTIONS");
// Inicializa el timer de delta time y arranca la música
last_time_ = SDL_GetTicks();
Audio::get()->playMusic("title.ogg");
}
// Destructor
@@ -262,7 +269,20 @@ auto Instructions::calculateDeltaTime() -> float {
return DELTA_TIME;
}
// Bucle para la pantalla de instrucciones
// Avanza un frame (llamado desde Director::iterate)
void Instructions::iterate() {
const float DELTA_TIME = calculateDeltaTime();
checkInput();
update(DELTA_TIME);
render();
}
// Procesa un evento (llamado desde Director::handleEvent)
void Instructions::handleEvent(const SDL_Event& /*event*/) {
// Eventos globales ya gestionados por Director::handleEvent
}
// Bucle para la pantalla de instrucciones (fallback legacy)
void Instructions::run() {
last_time_ = SDL_GetTicks();
Audio::get()->playMusic("title.ogg");

View File

@@ -48,7 +48,11 @@ class Instructions {
Instructions();
~Instructions();
// --- Bucle principal ---
// --- Callbacks para el bucle SDL_MAIN_USE_CALLBACKS ---
void iterate(); // Ejecuta un frame
void handleEvent(const SDL_Event& event); // Procesa un evento
// --- Bucle principal legacy (fallback) ---
void run();
private:

View File

@@ -20,6 +20,7 @@
#include "text.hpp" // Para Text
#include "texture.hpp" // Para Texture
#include "tiled_bg.hpp" // Para TiledBG, TiledBGMode
#include "ui/logger.hpp" // Para section
#include "utils.hpp" // Para easeOutBounce
#include "writer.hpp" // Para Writer
@@ -39,6 +40,12 @@ Intro::Intro()
// Configura el fondo
tiled_bg_->setSpeed(TILED_BG_SPEED);
tiled_bg_->setColor(bg_color_);
Logger::section("INTRO");
// Inicializa el timer de delta time y arranca la música
last_time_ = SDL_GetTicks();
Audio::get()->playMusic("intro.ogg", 0);
}
// Comprueba los eventos
@@ -265,7 +272,20 @@ auto Intro::calculateDeltaTime() -> float {
return DELTA_TIME;
}
// Bucle principal
// Avanza un frame (llamado desde Director::iterate)
void Intro::iterate() {
const float DELTA_TIME = calculateDeltaTime();
checkInput();
update(DELTA_TIME);
render();
}
// Procesa un evento (llamado desde Director::handleEvent)
void Intro::handleEvent(const SDL_Event& /*event*/) {
// Eventos globales ya gestionados por Director::handleEvent
}
// Bucle principal legacy (fallback)
void Intro::run() {
last_time_ = SDL_GetTicks();
Audio::get()->playMusic("intro.ogg", 0);

View File

@@ -30,7 +30,11 @@ class Intro {
Intro();
~Intro() = default;
// --- Bucle principal ---
// --- Callbacks para el bucle SDL_MAIN_USE_CALLBACKS ---
void iterate(); // Ejecuta un frame
void handleEvent(const SDL_Event& event); // Procesa un evento
// --- Bucle principal legacy (fallback) ---
void run();
private:

View File

@@ -9,6 +9,7 @@
#include "audio.hpp" // Para Audio
#include "color.hpp" // Para Color
#include "global_events.hpp" // Para handle
#include "ui/logger.hpp" // Para section
#include "global_inputs.hpp" // Para check
#include "input.hpp" // Para Input
#include "param.hpp" // Para Param, ParamGame, param
@@ -47,6 +48,11 @@ Logo::Logo()
jail_sprite_.push_back(std::move(temp));
}
Logger::section("LOGO");
// Inicializa el timer de delta time para el primer frame del callback
last_time_ = SDL_GetTicks();
// Inicializa el vector de colores con la paleta ZX Spectrum
color_.emplace_back(SPECTRUM_BLACK);
color_.emplace_back(SPECTRUM_BLUE);
@@ -169,7 +175,20 @@ auto Logo::calculateDeltaTime() -> float {
return DELTA_TIME;
}
// Bucle para el logo del juego
// Avanza un frame del logo (llamado desde Director::iterate)
void Logo::iterate() {
const float DELTA_TIME = calculateDeltaTime();
checkInput();
update(DELTA_TIME);
render();
}
// Procesa un evento (llamado desde Director::handleEvent)
void Logo::handleEvent(const SDL_Event& /*event*/) {
// Eventos globales (QUIT, resize, hotplug) ya gestionados por Director::handleEvent
}
// Bucle para el logo del juego (fallback legacy)
void Logo::run() {
last_time_ = SDL_GetTicks();

View File

@@ -31,7 +31,11 @@ class Logo {
Logo();
~Logo();
// --- Bucle principal ---
// --- Callbacks para el bucle SDL_MAIN_USE_CALLBACKS ---
void iterate(); // Ejecuta un frame
void handleEvent(const SDL_Event& event); // Procesa un evento
// --- Bucle principal legacy (fallback) ---
void run();
private:

View File

@@ -24,6 +24,7 @@
#include "sprite.hpp" // Para Sprite
#include "text.hpp" // Para Text
#include "tiled_bg.hpp" // Para TiledBG, TiledBGMode
#include "ui/logger.hpp" // Para section
#include "ui/notifier.hpp" // Para Notifier
#include "ui/service_menu.hpp" // Para ServiceMenu
#include "utils.hpp" // Para Zone, BLOCK
@@ -59,6 +60,11 @@ Title::Title()
anchor_.mini_logo = (param.game.height / MINI_LOGO_Y_DIVISOR * MINI_LOGO_Y_FACTOR) + BLOCK;
mini_logo_sprite_->setY(anchor_.mini_logo);
anchor_.copyright_text = anchor_.mini_logo + mini_logo_sprite_->getHeight() + COPYRIGHT_TEXT_SPACING;
Logger::section("TITLE");
// Inicializa el timer de delta time para el primer frame del callback
last_time_ = SDL_GetTicks();
}
// Destructor
@@ -213,7 +219,22 @@ void Title::activatePlayerAndSetState(Player::Id player_id) {
counter_time_ = 0.0F;
}
// Bucle para el titulo del juego
// Avanza un frame (llamado desde Director::iterate)
void Title::iterate() {
const float DELTA_TIME = calculateDeltaTime();
checkInput();
update(DELTA_TIME);
render();
}
// Procesa un evento (llamado desde Director::handleEvent)
void Title::handleEvent(const SDL_Event& event) {
if (event.type == SDL_EVENT_KEY_DOWN) {
handleKeyDownEvent(event);
}
}
// Bucle para el titulo del juego (fallback legacy)
void Title::run() {
last_time_ = SDL_GetTicks();

View File

@@ -40,7 +40,11 @@ class Title {
Title();
~Title();
// --- Bucle principal ---
// --- Callbacks para el bucle SDL_MAIN_USE_CALLBACKS ---
void iterate(); // Ejecuta un frame
void handleEvent(const SDL_Event& event); // Procesa un evento
// --- Bucle principal legacy (fallback) ---
void run();
private: