#pragma once #include #include // for uint8_t #include #include // for string, basic_string class Game; class Intro; class Logo; class Title; struct section_t; // Secciones activas del Director enum class ActiveSection : std::uint8_t { None, Logo, Intro, Title, Game }; class Director { private: // Objetos y punteros SDL_Window *window; // La ventana donde dibujamos SDL_Renderer *renderer; // El renderizador de la ventana section_t *section; // Sección y subsección actual del programa; // Secciones del juego ActiveSection activeSection; std::unique_ptr logo; std::unique_ptr intro; std::unique_ptr title; std::unique_ptr<Game> game; // Variables std::string executablePath; // Path del ejecutable std::string systemFolder; // Carpeta del sistema donde guardar datos // Inicializa jail_audio static void initJailAudio(); // Arranca SDL y crea la ventana auto initSDL() -> bool; // Inicializa el objeto input static void initInput(); // Crea el indice de ficheros auto setFileList() -> bool; // Comprueba los parametros del programa static void checkProgramArguments(int argc, const char *argv[]); // Crea la carpeta del sistema donde guardar datos void createSystemFolder(const std::string &folder); // Gestiona las transiciones entre secciones void handleSectionTransition(); public: // Constructor Director(int argc, const char *argv[]); // Destructor ~Director(); Director(const Director &) = delete; auto operator=(const Director &) -> Director & = delete; // Ejecuta un frame del juego auto iterate() -> SDL_AppResult; // Procesa un evento auto handleEvent(SDL_Event *event) -> SDL_AppResult; };