16 const auto diagnostics = document.
validate();
17 for (
const auto& diagnostic : diagnostics)
18 if (diagnostic.severity() == DiagnosticSeverity::Error)
21 auto candidate = std::make_unique<procgen::BiomeRules>();
26 return eve::editing::failed<void>(EditorStatus::NotFound,
RuleId(
"editor.biome.runtime-spatial"),
27 "Biome spatial resolver returned no spatial data");
29 return eve::editing::failed<void>(EditorStatus::Failed,
RuleId(
"editor.biome.runtime-layer"),
30 "Biome runtime rejected a validated layer");
31 for (
const auto& asset :
layer.assets)
32 if (!candidate->addAsset(
layer.name, asset.asset, asset.weight, asset.minScale, asset.maxScale,
34 return eve::editing::failed<void>(EditorStatus::Failed,
RuleId(
"editor.biome.runtime-asset"),
35 "Biome runtime rejected a validated asset");
41 return eve::editing::failed<void>(EditorStatus::NotFound,
RuleId(
"editor.biome.runtime-exclusion-spatial"),
42 "Biome exclusion resolver returned no spatial data");
43 if (!candidate->addExclusion(
spatial.value()))
44 return eve::editing::failed<void>(EditorStatus::Failed,
RuleId(
"editor.biome.runtime-exclusion"),
45 "Biome runtime rejected a validated exclusion");
47 rules_ = std::move(candidate);
49 return eve::editing::applied<void>(diagnostics);
56 if (expectedRevision != revision_)
57 return eve::editing::failed<std::unique_ptr<procgen::PointSet>>(
58 EditorStatus::Conflict,
RuleId(
"editor.biome.stale"),
"Biome preview generation is stale");
59 if (!rules_ || !domain || !std::isfinite(
spacing) ||
spacing <= 0 || !std::isfinite(jitter) || jitter < 0 ||
62 EditorStatus::Rejected,
RuleId(
"editor.biome.preview"),
"Biome preview inputs are invalid");
63 std::unique_ptr<procgen::PointSet>
points(rules_->generate(domain,
spacing,
seed, jitter));
65 return eve::editing::failed<std::unique_ptr<procgen::PointSet>>(
66 EditorStatus::Failed,
RuleId(
"editor.biome.generate"), rules_->getError());
67 return eve::editing::applied<std::unique_ptr<procgen::PointSet>>(std::move(
points));
eve::action::ActionSpatialBinding spatial
AuthorityStoreHandleRef reference
std::shared_ptr< const std::vector< glm::vec2 > > points
Move-only operation result carrying either a value or Status.
Structured status and zero or more diagnostics for an operation.
Result< void > publish(const BiomeDocumentTarget &, const IBiomeSpatialResolver &)
Publish.
~BiomeDocumentRuntime()
Biome document runtime.
Result< std::unique_ptr< procgen::PointSet > > preview(procgen::SpatialData *domain, float spacing, std::uint32_t seed, float jitter, Revision expectedRevision)
Generate a PointSet from a previously published candidate.
BiomeDocumentRuntime()
Biome document runtime.
Revisioned BiomeRules asset.
const std::vector< std::string > & exclusions() const
Exclusions.
const std::vector< BiomeLayerValue > & layers() const
Layers.
std::vector< EditorDiagnostic > validate() const
Validate.
Resolves copied spatial domains for BiomeRules publication.
virtual Result< procgen::SpatialData * > resolve(const std::string &) const =0
Resolve one authored spatial asset to a generation domain. @ownership Borrowed; the resolver retains ...
std::uint64_t revision() const override
Return the current revision.
Queryable spatial input for procedural pipelines.
editing::Revision Revision
Result< T > failed(Status status, eve::DiagnosticCode code, RuleId rule, std::string message)
Construct a failed editing result with explicit status and diagnostic categories.