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:
@@ -19,7 +19,9 @@
|
||||
#include "utils/utils.hpp" // Para PaletteColor
|
||||
|
||||
// Destructor
|
||||
Ending::~Ending() = default;
|
||||
Ending::~Ending() {
|
||||
Audio::get()->stopMusic();
|
||||
}
|
||||
|
||||
// Constructor
|
||||
Ending::Ending()
|
||||
@@ -32,6 +34,7 @@ Ending::Ending()
|
||||
iniScenes(); // Inicializa las escenas
|
||||
|
||||
Screen::get()->setBorderColor(static_cast<Uint8>(PaletteColor::BLACK)); // Cambia el color del borde
|
||||
Audio::get()->playMusic("ending1.ogg");
|
||||
}
|
||||
|
||||
// Actualiza el objeto
|
||||
@@ -39,8 +42,7 @@ void Ending::update() {
|
||||
const float DELTA_TIME = delta_timer_->tick();
|
||||
total_time_ += DELTA_TIME; // Actualiza el tiempo total
|
||||
|
||||
handleEvents(); // Comprueba los eventos
|
||||
handleInput(); // Comprueba las entradas
|
||||
handleInput(); // Comprueba las entradas
|
||||
|
||||
updateState(DELTA_TIME); // Actualiza la máquina de estados
|
||||
updateSpriteCovers(); // Actualiza las cortinillas de los elementos
|
||||
@@ -86,12 +88,9 @@ void Ending::render() {
|
||||
Screen::get()->render();
|
||||
}
|
||||
|
||||
// Comprueba el manejador de eventos
|
||||
void Ending::handleEvents() {
|
||||
SDL_Event event;
|
||||
while (SDL_PollEvent(&event)) {
|
||||
GlobalEvents::handle(event);
|
||||
}
|
||||
// Despatx d'un event (SDL3 Callback API)
|
||||
void Ending::handleEvent(const SDL_Event& event) {
|
||||
GlobalEvents::handle(event);
|
||||
}
|
||||
|
||||
// Comprueba las entradas
|
||||
@@ -355,16 +354,10 @@ void Ending::iniScenes() { // NOLINT(readability-convert-member-functions-to-st
|
||||
scenes_.push_back(sc);
|
||||
}
|
||||
|
||||
// Bucle principal
|
||||
void Ending::run() {
|
||||
Audio::get()->playMusic("ending1.ogg");
|
||||
|
||||
while (SceneManager::current == SceneManager::Scene::ENDING) {
|
||||
update();
|
||||
render();
|
||||
}
|
||||
|
||||
Audio::get()->stopMusic();
|
||||
// Un frame de l'escena (SDL3 Callback API)
|
||||
void Ending::iterate() {
|
||||
update();
|
||||
render();
|
||||
}
|
||||
|
||||
// Actualiza las cortinillas de los elementos
|
||||
|
||||
Reference in New Issue
Block a user