45 lines
1.8 KiB
C++
45 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include <cstdint> // Para uint8_t
|
|
#include <filesystem> // Para remove, path
|
|
#include <fstream> // Para basic_ofstream, basic_ios, basic_ostream::write, ios, ofstream
|
|
#include <string> // Para string, basic_string, hash, operator+, to_string, __str_hash_base
|
|
#include <vector> // 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 enable_fallback = true) -> bool;
|
|
|
|
// Cierra ResourceLoader
|
|
void shutdownResourceSystem();
|
|
|
|
// Carga un archivo usando ResourceLoader o fallback a filesystem
|
|
auto loadFile(const std::string& filepath) -> std::vector<uint8_t>;
|
|
|
|
// 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 <typename T>
|
|
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<std::string>{}(asset_path));
|
|
std::ofstream temp_file(temp_path, std::ios::binary);
|
|
temp_file.write(reinterpret_cast<const char*>(data.data()), data.size());
|
|
temp_file.close();
|
|
|
|
T* result = loader_func(temp_path.c_str());
|
|
std::filesystem::remove(temp_path);
|
|
|
|
return result;
|
|
}
|
|
} // namespace ResourceHelper
|