diff --git a/source/core/graphics/shape_loader.cpp b/source/core/graphics/shape_loader.cpp index 486ea99..7f662a0 100644 --- a/source/core/graphics/shape_loader.cpp +++ b/source/core/graphics/shape_loader.cpp @@ -9,77 +9,62 @@ namespace Graphics { -// Inicialización de variables estàtiques -std::unordered_map> ShapeLoader::cache; + // Inicialización de variables estàtiques + std::unordered_map> ShapeLoader::cache; -auto ShapeLoader::load(const std::string& filename) -> std::shared_ptr { - // Check cache first - auto it = cache.find(filename); - if (it != cache.end()) { - std::cout << "[ShapeLoader] Cache hit: " << filename << '\n'; - return it->second; // Cache hit + auto ShapeLoader::load(const std::string& filename) -> std::shared_ptr { + // Check cache first + auto it = cache.find(filename); + if (it != cache.end()) { + std::cout << "[ShapeLoader] Cache hit: " << filename << '\n'; + return it->second; // Cache hit + } + + // Normalize path: "ship.shp" → "shapes/ship.shp" + // "logo/letra_j.shp" → "shapes/logo/letra_j.shp" + std::string normalized = filename; + if (!normalized.starts_with("shapes/")) { + // Doesn't start with "shapes/", so add it + normalized = "shapes/" + normalized; + } + + // Load from resource system + std::vector data = Resource::Helper::loadFile(normalized); + if (data.empty()) { + std::cerr << "[ShapeLoader] Error: no s'ha pogut load " << normalized + << '\n'; + return nullptr; + } + + // Convert bytes to string and parse + std::string file_content(data.begin(), data.end()); + auto shape = std::make_shared(); + if (!shape->parseFile(file_content)) { + std::cerr << "[ShapeLoader] Error: no s'ha pogut parsejar " << normalized + << '\n'; + return nullptr; + } + + // Verify shape is valid + if (!shape->isValid()) { + std::cerr << "[ShapeLoader] Error: shape invàlida " << normalized << '\n'; + return nullptr; + } + + // Cache and return + std::cout << "[ShapeLoader] Carregat: " << normalized << " (" << shape->getName() + << ", " << shape->getNumPrimitives() << " primitives)" << '\n'; + + cache[filename] = shape; + return shape; } - // Normalize path: "ship.shp" → "shapes/ship.shp" - // "logo/letra_j.shp" → "shapes/logo/letra_j.shp" - std::string normalized = filename; - if (!normalized.starts_with("shapes/")) { - // Doesn't start with "shapes/", so add it - normalized = "shapes/" + normalized; - } - - // Load from resource system - std::vector data = Resource::Helper::loadFile(normalized); - if (data.empty()) { - std::cerr << "[ShapeLoader] Error: no s'ha pogut load " << normalized + void ShapeLoader::clearCache() { + std::cout << "[ShapeLoader] Netejant caché (" << cache.size() << " formes)" << '\n'; - return nullptr; + cache.clear(); } - // Convert bytes to string and parse - std::string file_content(data.begin(), data.end()); - auto shape = std::make_shared(); - if (!shape->parseFile(file_content)) { - std::cerr << "[ShapeLoader] Error: no s'ha pogut parsejar " << normalized - << '\n'; - return nullptr; - } - - // Verify shape is valid - if (!shape->isValid()) { - std::cerr << "[ShapeLoader] Error: shape invàlida " << normalized << '\n'; - return nullptr; - } - - // Cache and return - std::cout << "[ShapeLoader] Carregat: " << normalized << " (" << shape->getName() - << ", " << shape->getNumPrimitives() << " primitives)" << '\n'; - - cache[filename] = shape; - return shape; -} - -void ShapeLoader::clearCache() { - std::cout << "[ShapeLoader] Netejant caché (" << cache.size() << " formes)" - << '\n'; - cache.clear(); -} - -auto ShapeLoader::getCacheSize() -> size_t { return cache.size(); } - -auto ShapeLoader::resolvePath(const std::string& filename) -> std::string { - // Si es un path absolut (comença con '/'), usar-lo directament - if (!filename.empty() && filename[0] == '/') { - return filename; - } - - // Si ya conté el prefix base_path, usar-lo directament - if (filename.starts_with(BASE_PATH)) { - return filename; - } - - // Altrament, añadir base_path (ara suporta subdirectoris) - return std::string(BASE_PATH) + filename; -} + auto ShapeLoader::getCacheSize() -> size_t { return cache.size(); } } // namespace Graphics diff --git a/source/core/graphics/shape_loader.hpp b/source/core/graphics/shape_loader.hpp index 330f09a..a8a228b 100644 --- a/source/core/graphics/shape_loader.hpp +++ b/source/core/graphics/shape_loader.hpp @@ -11,9 +11,9 @@ namespace Graphics { -// Carregador estàtic de formes con caché -class ShapeLoader { - public: + // Carregador estàtic de formes con caché + class ShapeLoader { + public: // No instanciable (tot estàtic) ShapeLoader() = delete; @@ -28,12 +28,8 @@ class ShapeLoader { // Estadístiques (debug) static auto getCacheSize() -> size_t; - private: + private: static std::unordered_map> cache; - static constexpr const char* BASE_PATH = "data/shapes/"; - - // Helpers privats - static auto resolvePath(const std::string& filename) -> std::string; -}; + }; } // namespace Graphics