// bullet_registry.cpp - Implementació del registre de bales // © 2026 JailDesigner #include "game/entities/bullet_registry.hpp" #include #include #include "core/entities/entity_loader.hpp" std::unordered_map BulletRegistry::configs; bool BulletRegistry::loaded = false; namespace { // Tria comú: carrega el YAML d'un name, parseja a BulletConfig i el guarda // al map. Retorna punter al config inserit, o nullptr si falla. auto loadInto(std::unordered_map& configs, const std::string& name) -> const BulletConfig* { auto yaml = Entities::EntityLoader::load(name); if (!yaml) { std::cerr << "[BulletRegistry] Error: no s'ha pogut carregar " << name << ".yaml\n"; return nullptr; } auto cfg = BulletConfig::fromYaml(*yaml); if (!cfg) { std::cerr << "[BulletRegistry] Error: format invàlid a " << name << ".yaml\n"; return nullptr; } auto [it, _] = configs.insert_or_assign(name, *cfg); return &it->second; } } // namespace auto BulletRegistry::load() -> bool { if (loadInto(configs, "bullet") == nullptr) { return false; } loaded = true; std::cout << "[BulletRegistry] Configuració de bala 'bullet' carregada.\n"; return true; } auto BulletRegistry::get() -> const BulletConfig& { if (!loaded) { std::cerr << "[BulletRegistry] FATAL: get() abans de load()\n"; std::exit(EXIT_FAILURE); } return configs.at("bullet"); } auto BulletRegistry::get(const std::string& name) -> const BulletConfig* { auto it = configs.find(name); if (it != configs.end()) { return &it->second; } return loadInto(configs, name); }