#pragma once #include // Para Span #include // Para string namespace Lang { enum class Code : int; } // --- Clase Director: gestor principal de la aplicación --- class Director { public: // --- Constructor y destructor --- Director(int argc, std::span argv); ~Director(); // --- Bucle principal --- static auto run() -> int; private: // --- Variables internas --- std::string executable_path_; // Ruta del ejecutable std::string system_folder_; // Carpeta del sistema para almacenar datos // --- Inicialización y cierre del sistema --- void init(); // Inicializa la aplicación static void close(); // Cierra y libera recursos // --- Configuración inicial --- static void loadParams(); // Carga los parámetros del programa static void loadScoreFile(); // Carga el fichero de puntuaciones void createSystemFolder(const std::string &folder); // Crea la carpeta del sistema // --- Gestión de entrada y archivos --- void loadAssets(); // Crea el índice de archivos disponibles void checkProgramArguments(int argc, std::span argv); // Verifica los parámetros del programa // NOLINT(modernize-avoid-c-arrays) // --- Secciones del programa --- static void runLogo(); // Ejecuta la pantalla con el logo static void runIntro(); // Ejecuta la introducción del juego static void runTitle(); // Ejecuta la pantalla de título static void runGame(); // Inicia el juego static void runInstructions(); // Muestra las instrucciones static void runCredits(); // Muestra los créditos del juego static void runHiScoreTable(); // Muestra la tabla de puntuaciones static void runDemoGame(); // Ejecuta el modo demo static void reset(); // Reinicia objetos y vuelve a la sección inicial // --- Gestión de archivos de idioma --- auto getLangFile(Lang::Code code) -> std::string; // Obtiene un fichero de idioma según el código // --- Apagado del sistema --- static void shutdownSystem(bool should_shutdown); // Apaga el sistema };