#pragma once #include // for string, basic_string #include // for vector enum class AssetType : int { BITMAP, MUSIC, SOUND, FONT, LANG, DATA, ANIMATION, PALETTE, ITEM, MAX_ASSET_TYPE, }; // Clase Asset class Asset { private: // [SINGLETON] Objeto asset privado para Don Melitón static Asset *asset; // Estructura para definir un item struct AssetItem { 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 // bool absolute; // Indica si la ruta que se ha proporcionado es una ruta absoluta }; // Variables int longest_name_; // Contiene la longitud del nombre de fichero mas largo std::vector file_list_; // Listado con todas las rutas a los ficheros std::string executable_path_; // Ruta al ejecutable // Comprueba que existe un fichero bool checkFile(std::string executable_path) const; // Devuelve el nombre del tipo de recurso std::string getTypeName(AssetType type) const; // Constructor Asset(std::string path); // Destructor ~Asset() = default; public: // [SINGLETON] Crearemos el objeto screen con esta función estática static void init(std::string path); // [SINGLETON] Destruiremos el objeto screen con esta función estática static void destroy(); // [SINGLETON] Con este método obtenemos el objeto screen y podemos trabajar con él static Asset *get(); // Añade un elemento a la lista void add(std::string file, 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) const; // Comprueba que existen todos los elementos bool check() const; // Devuelve la lista de recursos de un tipo std::vector getListByType(AssetType type) const; };