#ifndef RESOURCE_MANAGER_H #define RESOURCE_MANAGER_H #include #include class ResourcePack; /** * ResourceManager - Gestor centralizado de recursos empaquetados * * Singleton que administra el sistema de recursos empaquetados (resources.pack) * y proporciona fallback automático a disco cuando el pack no está disponible. * * Uso: * // En main.cpp, antes de inicializar cualquier sistema: * ResourceManager::init("resources.pack"); * * // Desde cualquier clase que necesite recursos: * unsigned char* data = nullptr; * size_t size = 0; * if (ResourceManager::loadResource("textures/ball.png", data, size)) { * // Usar datos... * delete[] data; // Liberar cuando termine * } */ class ResourceManager { public: /** * Inicializa el sistema de recursos empaquetados * Debe llamarse una única vez al inicio del programa * * @param packFilePath Ruta al archivo .pack (ej: "resources.pack") * @return true si el pack se cargó correctamente, false si no existe (fallback a disco) */ static bool init(const std::string& packFilePath); /** * Libera el sistema de recursos * Opcional - se llama automáticamente al cerrar el programa */ static void shutdown(); /** * Carga un recurso desde el pack (o disco si no existe pack) * * @param resourcePath Ruta relativa del recurso (ej: "textures/ball.png") * @param data [out] Puntero donde se almacenará el buffer (debe liberar con delete[]) * @param size [out] Tamaño del buffer en bytes * @return true si se cargó correctamente, false si falla */ static bool loadResource(const std::string& resourcePath, unsigned char*& data, size_t& size); /** * Verifica si el pack está cargado * @return true si hay un pack cargado, false si se usa disco */ static bool isPackLoaded(); /** * Obtiene la lista de recursos disponibles en el pack * @return Vector con las rutas de todos los recursos, vacío si no hay pack */ static std::vector getResourceList(); /** * Obtiene el número de recursos en el pack * @return Número de recursos, 0 si no hay pack */ static size_t getResourceCount(); private: // Constructor privado (singleton) ResourceManager() = default; ~ResourceManager() = default; // Deshabilitar copia y asignación ResourceManager(const ResourceManager&) = delete; ResourceManager& operator=(const ResourceManager&) = delete; // Instancia del pack (nullptr si no está cargado) static ResourcePack* resourcePack_; }; #endif // RESOURCE_MANAGER_H