#pragma once #include // Para string #include // Para vector #include "utils.h" enum assetType { t_bitmap, t_music, t_sound, t_font, t_lang, t_data, t_room, t_enemy, t_item, t_maxAssetType }; // Clase Asset class Asset { private: // [SINGLETON] Objeto asset privado static Asset *asset_; // Estructura para definir un item struct item_t { std::string file; // Ruta del fichero desde la raiz del directorio enum assetType type; // Indica el tipo de recurso bool required; // Indica si es un fichero que debe de existir }; // Variables int longest_name_ = 0; // Contiene la longitud del nombre de fichero mas largo std::vector fileList; // Listado con todas las rutas a los ficheros std::string executable_path_; // Ruta al ejecutable bool verbose_ = true; // Indica si ha de mostrar información por pantalla // Comprueba que existe un fichero bool checkFile(std::string executablePath); // Devuelve el nombre del tipo de recurso std::string getTypeName(int type); // Constructor explicit Asset(const std::string &executable_path) : executable_path_(getPath(executable_path)) {} // Destructor ~Asset() = default; public: // [SINGLETON] Crearemos el objeto con esta función estática static void init(const std::string &executable_path); // [SINGLETON] Destruiremos el objeto con esta función estática static void destroy(); // [SINGLETON] Con este método obtenemos el objeto y podemos trabajar con él static Asset *get(); // Añade un elemento a la lista void add(std::string file, enum assetType type, bool required = true, bool absolute = false); // Devuelve un elemento de la lista a partir de una cadena std::string get(std::string text); // Comprueba que existen todos los elementos bool check(); // Establece si ha de mostrar texto por pantalla void setVerbose(bool value); };