refactor: migració a l'arquitectura SDL3 Callback API

Substitueix el bucle blocant main() → Director::run() → escena::run() per
SDL_AppInit/Iterate/Event/Quit. Cada escena implementa ara iterate() (un frame)
i handleEvent() (un event) sota una interfície base Scene.

- Director gestiona l'escena activa i les transicions via switchToActiveScene()
- Setup/cleanup que estava al voltant del while de run() mogut a ctor/dtor
  (música de Game/Ending/Ending2, volum de LoadingScreen)
- GlobalEvents ja no processa SDL_EVENT_QUIT (ho fa Director::handleEvent)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-13 08:49:19 +02:00
parent 714de067c8
commit c32a880b6a
21 changed files with 319 additions and 362 deletions

View File

@@ -41,14 +41,20 @@ Ending2::Ending2()
placeSprites(); // Coloca los sprites en su sito
createSpriteTexts(); // Crea los sprites con las texturas con los textos
createTexts(); // Crea los sprites con las texturas con los textos del final
Audio::get()->playMusic("ending2.ogg");
}
// Destructor
Ending2::~Ending2() {
Audio::get()->stopMusic();
}
// Actualiza el objeto
void Ending2::update() {
const float DELTA_TIME = delta_timer_->tick();
handleEvents(); // Comprueba los eventos
handleInput(); // Comprueba las entradas
handleInput(); // Comprueba las entradas
updateState(DELTA_TIME); // Actualiza el estado
@@ -95,12 +101,9 @@ void Ending2::render() {
Screen::get()->render();
}
// Comprueba el manejador de eventos
void Ending2::handleEvents() {
SDL_Event event;
while (SDL_PollEvent(&event)) {
GlobalEvents::handle(event);
}
// Despatx d'un event (SDL3 Callback API)
void Ending2::handleEvent(const SDL_Event& event) {
GlobalEvents::handle(event);
}
// Comprueba las entradas
@@ -109,16 +112,10 @@ void Ending2::handleInput() {
GlobalInputs::handle();
}
// Bucle principal
void Ending2::run() {
Audio::get()->playMusic("ending2.ogg");
while (SceneManager::current == SceneManager::Scene::ENDING2) {
update();
render();
}
Audio::get()->stopMusic();
// Un frame de l'escena (SDL3 Callback API)
void Ending2::iterate() {
update();
render();
}
// Actualiza el estado