feat(entities): migrar la configuració del player a data/entities/player/player.yaml
This commit is contained in:
1 parent
9f278772bb
commit
6447932212
18 files changed
+396
-121
No files matched your search
@@ -0,0 +1,56 @@
|
||||
// entity_loader.cpp - Implementació del carregador d'entitats YAML
|
||||
// © 2026 JailDesigner
|
||||
|
||||
#include "core/entities/entity_loader.hpp"
|
||||
|
||||
#include <cstdint>
|
||||
#include <exception>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "core/resources/resource_helper.hpp"
|
||||
|
||||
namespace Entities {
|
||||
|
||||
std::unordered_map<std::string, std::shared_ptr<fkyaml::node>> EntityLoader::cache;
|
||||
|
||||
auto EntityLoader::load(const std::string& name) -> std::shared_ptr<fkyaml::node> {
|
||||
// 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<uint8_t> 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>(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
|
||||
@@ -0,0 +1,38 @@
|
||||
// entity_loader.hpp - Carregador genèric de descriptors d'entitats en YAML
|
||||
// © 2026 JailDesigner
|
||||
//
|
||||
// Cada entitat viu a `data/entities/<name>/<name>.yaml` (mateix patró que el
|
||||
// projecte germà aee_arcade). Aquest loader resol el path, llegeix del
|
||||
// resource pack via Resource::Helper, parseja amb fkyaml i cacheja el node
|
||||
// per evitar relectures. Retorna nullptr en cas d'error (el caller decideix
|
||||
// si abortar).
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
|
||||
#include "external/fkyaml_node.hpp"
|
||||
|
||||
namespace Entities {
|
||||
|
||||
class EntityLoader {
|
||||
public:
|
||||
EntityLoader() = delete; // tot estàtic
|
||||
|
||||
// Carrega el descriptor d'una entitat per nom (ex. "player" →
|
||||
// "entities/player/player.yaml"). Retorna nullptr si no es pot
|
||||
// carregar o parsejar. Cachejat per nom.
|
||||
static auto load(const std::string& name) -> std::shared_ptr<fkyaml::node>;
|
||||
|
||||
// Buidar caché (útil per debug/recàrrega).
|
||||
static void clearCache();
|
||||
|
||||
[[nodiscard]] static auto getCacheSize() -> size_t;
|
||||
|
||||
private:
|
||||
static std::unordered_map<std::string, std::shared_ptr<fkyaml::node>> cache;
|
||||
};
|
||||
|
||||
} // namespace Entities
|
||||
Reference in new issue
Block a user