载入中...
搜索中...
未找到
GeneratorRegistry.cpp
浏览该文件的文档.
2
3#include <algorithm>
4namespace eve::procgen {
5
10
14 descriptor.displayName = id;
15 registerAlgorithm(std::move(descriptor), std::move(fn));
16}
17
19 const std::string id = descriptor.id;
20 algorithms_[id] = Entry{std::move(fn), std::move(descriptor)};
21}
22
23bool GeneratorRegistry::has(const std::string &id) const {
24 return algorithms_.find(id) != algorithms_.end();
25}
26
27bool GeneratorRegistry::generate(const std::string &id, const Params &params, Grid2D &out,
28 std::string &error) const {
29 auto it = algorithms_.find(id);
30 if (it == algorithms_.end()) {
31 error = "unknown algorithm: " + id;
32 return false;
33 }
34 return it->second.generate(params, out, error);
35}
36
37const GeneratorDescriptor *GeneratorRegistry::descriptor(const std::string &id) const {
38 const auto it = algorithms_.find(id);
39 return it == algorithms_.end() ? nullptr : &it->second.descriptor;
40}
41
42bool GeneratorRegistry::applyDefaults(const std::string &id, Params &params) const {
43 const GeneratorDescriptor *schema = descriptor(id);
44 if (!schema) return false;
45 schema->applyDefaults(params);
46 return true;
47}
48
49std::vector<std::string> GeneratorRegistry::list() const {
50 std::vector<std::string> ids;
51 ids.reserve(algorithms_.size());
52 for (const auto &kv : algorithms_) ids.push_back(kv.first);
53 std::sort(ids.begin(), ids.end());
54 return ids;
55}
56
57} // namespace eve::procgen
std::string descriptor
glm::uvec4 ids
std::string error
Definition Package.cpp:60
std::string id
Definition PlayHost.cpp:108
Registry for executable generators and their reflection metadata.
bool generate(const std::string &id, const Params &params, Grid2D &out, std::string &error) const
Execute one registered algorithm.
const GeneratorDescriptor * descriptor(const std::string &id) const
Return reflection metadata for an algorithm.
void registerAlgorithm(const std::string &id, GeneratorFn fn)
Register an algorithm without metadata for backward compatibility.
bool has(const std::string &id) const
Return true when an executable algorithm is registered.
static GeneratorRegistry & instance()
Return the process-wide generator registry.
std::vector< std::string > list() const
Return sorted registered algorithm ids.
bool applyDefaults(const std::string &id, Params &params) const
Fill only missing algorithm-specific values from the registered schema.
Intermediate 2D generation result. cells store semantic ids (see Semantic.h), not tile GIDs — convert...
Definition Grid2D.h:36
Owning, typed generation parameters.
Definition Params.h:27
std::vector< ParamSpec > params
std::function< bool(const Params &params, Grid2D &out, std::string &error)> GeneratorFn
SettlementPipeline::Stage fn
Complete metadata and parameter schema shared by every procgen recipe family.
Definition ParamSchema.h:52
void applyDefaults(Params &params) const
Fill missing Params values from this schema.