// entity_loader.cpp - Implementació del carregador d'entitats YAML // © 2026 JailDesigner #include "core/entities/entity_loader.hpp" #include #include #include #include #include #include #include "core/resources/resource_helper.hpp" namespace Entities { std::unordered_map> EntityLoader::cache; auto EntityLoader::load(const std::string& name) -> std::shared_ptr { // Cache hit auto it = cache.find(name); if (it != cache.end()) { std::cout << "[EntityLoader] Cache hit: " << name << '\n'; return it->second; } const std::string PATH = "entities/" + name + "/" + name + ".yaml"; std::vector data = Resource::Helper::loadFile(PATH); if (data.empty()) { std::cerr << "[EntityLoader] Error: no s'ha pogut load " << PATH << '\n'; return nullptr; } try { std::string yaml_content(data.begin(), data.end()); std::stringstream stream(yaml_content); auto node = std::make_shared(fkyaml::node::deserialize(stream)); std::cout << "[EntityLoader] Carregat: " << PATH << '\n'; cache[name] = node; return node; } catch (const std::exception& e) { std::cerr << "[EntityLoader] Excepció parsejant " << PATH << ": " << e.what() << '\n'; return nullptr; } } void EntityLoader::clearCache() { std::cout << "[EntityLoader] Netejant caché (" << cache.size() << " entitats)" << '\n'; cache.clear(); } auto EntityLoader::getCacheSize() -> size_t { return cache.size(); } } // namespace Entities