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:
@@ -81,28 +81,25 @@ void Title::initMarquee() {
|
||||
last_active_letter_ = 0;
|
||||
}
|
||||
|
||||
// Comprueba el manejador de eventos
|
||||
void Title::handleEvents() {
|
||||
SDL_Event event;
|
||||
while (SDL_PollEvent(&event)) {
|
||||
GlobalEvents::handle(event);
|
||||
// Despatx d'un event (SDL3 Callback API)
|
||||
void Title::handleEvent(const SDL_Event& event) {
|
||||
GlobalEvents::handle(event);
|
||||
|
||||
// Manejo especial para captura de botones de gamepad
|
||||
if (is_remapping_joystick_ && !remap_completed_ &&
|
||||
(event.type == SDL_EVENT_GAMEPAD_BUTTON_DOWN || event.type == SDL_EVENT_GAMEPAD_AXIS_MOTION)) {
|
||||
handleJoystickRemap(event);
|
||||
continue; // No procesar más este evento
|
||||
// Manejo especial para captura de botones de gamepad
|
||||
if (is_remapping_joystick_ && !remap_completed_ &&
|
||||
(event.type == SDL_EVENT_GAMEPAD_BUTTON_DOWN || event.type == SDL_EVENT_GAMEPAD_AXIS_MOTION)) {
|
||||
handleJoystickRemap(event);
|
||||
return; // No procesar más este evento
|
||||
}
|
||||
|
||||
if (event.type == SDL_EVENT_KEY_DOWN && !Console::get()->isActive()) {
|
||||
// Si estamos en modo remap de teclado, capturar tecla
|
||||
if (is_remapping_keyboard_ && !remap_completed_) {
|
||||
handleKeyboardRemap(event);
|
||||
}
|
||||
|
||||
if (event.type == SDL_EVENT_KEY_DOWN && !Console::get()->isActive()) {
|
||||
// Si estamos en modo remap de teclado, capturar tecla
|
||||
if (is_remapping_keyboard_ && !remap_completed_) {
|
||||
handleKeyboardRemap(event);
|
||||
}
|
||||
// Si estamos en el menú principal normal
|
||||
else if (state_ == State::MAIN_MENU && !is_remapping_keyboard_ && !is_remapping_joystick_) {
|
||||
handleMainMenuKeyPress(event.key.key);
|
||||
}
|
||||
// Si estamos en el menú principal normal
|
||||
else if (state_ == State::MAIN_MENU && !is_remapping_keyboard_ && !is_remapping_joystick_) {
|
||||
handleMainMenuKeyPress(event.key.key);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -242,7 +239,6 @@ void Title::renderMarquee() const {
|
||||
void Title::update() {
|
||||
const float DELTA_TIME = delta_timer_->tick();
|
||||
|
||||
handleEvents(); // Comprueba los eventos
|
||||
handleInput(DELTA_TIME); // Comprueba las entradas
|
||||
|
||||
updateState(DELTA_TIME); // Actualiza el estado actual
|
||||
@@ -434,12 +430,10 @@ void Title::render() {
|
||||
Screen::get()->render();
|
||||
}
|
||||
|
||||
// Bucle para el logo del juego
|
||||
void Title::run() {
|
||||
while (SceneManager::current == SceneManager::Scene::TITLE) {
|
||||
update();
|
||||
render();
|
||||
}
|
||||
// Un frame de l'escena (SDL3 Callback API)
|
||||
void Title::iterate() {
|
||||
update();
|
||||
render();
|
||||
}
|
||||
|
||||
// Crea y rellena la textura para mostrar los logros
|
||||
|
||||
Reference in New Issue
Block a user