// resource_helper.cpp - Implementació de funcions d'ajuda // © 2025 Port a C++20 amb SDL3 #include "resource_helper.hpp" #include #include #include "resource_loader.hpp" namespace Resource::Helper { // Inicialitzar el sistema de recursos bool initializeResourceSystem(const std::string& pack_file, bool fallback) { return Loader::get().initialize(pack_file, fallback); } // Carregar un fitxer std::vector loadFile(const std::string& filepath) { // Normalitzar la ruta std::string normalized = normalizePath(filepath); // Carregar del sistema de recursos return Loader::get().loadResource(normalized); } // Comprovar si existeix un fitxer bool fileExists(const std::string& filepath) { std::string normalized = normalizePath(filepath); return Loader::get().resourceExists(normalized); } // Obtenir ruta normalitzada per al paquet // Elimina prefixos "data/", rutes absolutes, etc. std::string getPackPath(const std::string& asset_path) { std::string path = asset_path; // Eliminar rutes absolutes (detectar / o C:\ al principi) if (!path.empty() && path[0] == '/') { // Buscar "data/" i agafar el que ve després size_t data_pos = path.find("/data/"); if (data_pos != std::string::npos) { path = path.substr(data_pos + 6); // Saltar "/data/" } } // Eliminar "./" i "../" del principi while (path.starts_with("./")) { path = path.substr(2); } while (path.starts_with("../")) { path = path.substr(3); } // Eliminar "data/" del principi if (path.starts_with("data/")) { path = path.substr(5); } // Eliminar "Resources/" (macOS bundles) if (path.starts_with("Resources/")) { path = path.substr(10); } // Convertir barres invertides a normals std::ranges::replace(path, '\\', '/'); return path; } // Normalitzar ruta (alias de getPackPath) std::string normalizePath(const std::string& path) { return getPackPath(path); } // Comprovar si hi ha paquet carregat bool isPackLoaded() { return Loader::get().isPackLoaded(); } } // namespace Resource::Helper