#pragma once #include // for SDL_Renderer #include // for SDL_Window #include // for string, basic_string class Asset; class Game; class Input; class Intro; class Lang; class Logo; class Screen; class Title; struct options_t; struct section_t; // Textos constexpr const char* WINDOW_CAPTION = "Coffee Crisis"; class Director { private: // Objetos y punteros SDL_Window *window; // La ventana donde dibujamos SDL_Renderer *renderer; // El renderizador de la ventana Screen *screen; // Objeto encargado de dibujar en pantalla Logo *logo; // Objeto para la sección del logo Intro *intro; // Objeto para la sección de la intro Title *title; // Objeto para la sección del titulo y el menu de opciones Game *game; // Objeto para la sección del juego Input *input; // Objeto Input para gestionar las entradas Lang *lang; // Objeto para gestionar los textos en diferentes idiomas Asset *asset; // Objeto que gestiona todos los ficheros de recursos section_t *section; // Sección y subsección actual del programa; // Variables struct options_t *options; // Variable con todas las opciones del programa std::string executablePath; // Path del ejecutable std::string systemFolder; // Carpeta del sistema donde guardar datos // Inicializa jail_audio void initJailAudio(); // Arranca SDL y crea la ventana bool initSDL(); // Inicializa el objeto input void initInput(); // Inicializa las opciones del programa void initOptions(); // Asigna variables a partir de dos cadenas bool setOptions(options_t *options, std::string var, std::string value); // Crea el indice de ficheros bool setFileList(); // Carga el fichero de configuración bool loadConfigFile(); // Guarda el fichero de configuración bool saveConfigFile(); // Comprueba los parametros del programa void checkProgramArguments(int argc, char *argv[]); // 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(); public: // Constructor Director(int argc, char *argv[]); // Destructor ~Director(); // Bucle principal void run(); };