#pragma once #include // Para uint8_t #include // Para remove, path #include // Para basic_ofstream, basic_ios, basic_ostream::write, ios, ofstream #include // Para string, basic_string, hash, operator+, to_string, __str_hash_base #include // Para vector // Helper functions para integrar ResourceLoader con el sistema existente namespace ResourceHelper { // Inicializa ResourceLoader (llamar al inicio del programa) auto initializeResourceSystem(const std::string& pack_file = "resources.pack") -> bool; // Cierra ResourceLoader void shutdownResourceSystem(); // Carga un archivo usando ResourceLoader o fallback a filesystem auto loadFile(const std::string& filepath) -> std::vector; // Verifica si un archivo debería cargarse del pack vs filesystem auto shouldUseResourcePack(const std::string& filepath) -> bool; // Convierte ruta Asset a ruta relativa para ResourceLoader auto getPackPath(const std::string& asset_path) -> std::string; // Wrappea la carga de archivos para mantener compatibilidad template auto loadResourceFile(const std::string& asset_path, T* (*loader_func)(const char*)) -> T* { auto data = loadFile(asset_path); if (data.empty()) { return loader_func(asset_path.c_str()); } // Crear archivo temporal para funciones que esperan path std::string temp_path = "/tmp/ccae_" + std::to_string(std::hash{}(asset_path)); std::ofstream temp_file(temp_path, std::ios::binary); temp_file.write(reinterpret_cast(data.data()), data.size()); temp_file.close(); T* result = loader_func(temp_path.c_str()); std::filesystem::remove(temp_path); return result; } } // namespace ResourceHelper