migrat a SDL3 Callback API (SDL_AppInit/Iterate/Event/Quit) (milestone 3)

- main.cpp reescrit amb SDL_MAIN_USE_CALLBACKS
- Director convertit a màquina d'estats amb iterate() i handleEvent()
- Seccions (Logo, Intro, Title, Game) amb iterate() i handleEvent()
- Events SDL enrutats via SDL_AppEvent → Director → secció activa
- Eliminat SDL_PollEvent de iterate(), events via handleEvent()
- Transicions entre seccions gestionades per handleSectionTransition()
- Instructions i Game (demo) delegats frame a frame des de Title

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-12 19:32:31 +02:00
parent 18c4d6032d
commit 06d4712493
11 changed files with 306 additions and 132 deletions

View File

@@ -2,6 +2,7 @@
#include <SDL3/SDL.h>
#include <memory>
#include <string> // for string, basic_string
class Asset;
class Game;
@@ -17,6 +18,9 @@ struct section_t;
// Textos
constexpr const char *WINDOW_CAPTION = "© 2020 Coffee Crisis — JailDesigner";
// Secciones activas del Director
enum class ActiveSection { None, Logo, Intro, Title, Game };
class Director {
private:
// Objetos y punteros
@@ -28,6 +32,13 @@ class Director {
Asset *asset; // Objeto que gestiona todos los ficheros de recursos
section_t *section; // Sección y subsección actual del programa;
// Secciones del juego
ActiveSection activeSection;
std::unique_ptr<Logo> logo;
std::unique_ptr<Intro> intro;
std::unique_ptr<Title> title;
std::unique_ptr<Game> game;
// Variables
struct options_t *options; // Variable con todas las opciones del programa
std::string executablePath; // Path del ejecutable
@@ -63,17 +74,8 @@ class Director {
// Crea la carpeta del sistema donde guardar datos
void createSystemFolder(const std::string &folder);
// Ejecuta la seccion de juego con el logo
void runLogo();
// Ejecuta la seccion de juego de la introducción
void runIntro();
// Ejecuta la seccion de juego con el titulo y los menus
void runTitle();
// Ejecuta la seccion de juego donde se juega
void runGame();
// Gestiona las transiciones entre secciones
void handleSectionTransition();
public:
// Constructor
@@ -82,6 +84,9 @@ class Director {
// Destructor
~Director();
// Bucle principal
int run();
// Ejecuta un frame del juego
SDL_AppResult iterate();
// Procesa un evento
SDL_AppResult handleEvent(SDL_Event *event);
};