载入中...
搜索中...
未找到
GeometryCollectionSnapshot.cpp
浏览该文件的文档.
19bool hasExactFields(const eve::Value::Object& object, std::initializer_list<std::string_view> expected) {
30 eve::DiagnosticCode::InvalidArgument, "instance-snapshot field must be an integer", std::string(name)));
38 eve::DiagnosticCode::InvalidArgument, "instance-snapshot field must be numeric", std::string(name)));
39 const double parsed = value->isDouble() ? value->asDouble() : static_cast<double>(value->asInt());
52 eve::DiagnosticCode::InvalidArgument, "instance-snapshot field must be boolean", std::string(name)));
56eve::Result<GeometryCollectionInstanceSnapshot::BoneSnapshot> decodeBone(const eve::Value& value) {
59 return eve::Result<GeometryCollectionInstanceSnapshot::BoneSnapshot>::failure(eve::Diagnostic::error(
61 if (!hasExactFields(*object, {"state", "anchored", "clusterId", "fractureLevel", "halfExtentX", "halfExtentY",
63 return eve::Result<GeometryCollectionInstanceSnapshot::BoneSnapshot>::failure(eve::Diagnostic::error(
64 eve::DiagnosticCode::InvalidArgument, "instance-snapshot bone has unknown or missing fields", "bones"));
69 return eve::Result<GeometryCollectionInstanceSnapshot::BoneSnapshot>::failure(eve::Diagnostic::error(
73 return eve::Result<GeometryCollectionInstanceSnapshot::BoneSnapshot>::failure(anchored.status());
76 return eve::Result<GeometryCollectionInstanceSnapshot::BoneSnapshot>::failure(clusterId.status());
79 return eve::Result<GeometryCollectionInstanceSnapshot::BoneSnapshot>::failure(fractureLevel.status());
81 if (!hx) return eve::Result<GeometryCollectionInstanceSnapshot::BoneSnapshot>::failure(hx.status());
83 if (!hy) return eve::Result<GeometryCollectionInstanceSnapshot::BoneSnapshot>::failure(hy.status());
85 if (!hz) return eve::Result<GeometryCollectionInstanceSnapshot::BoneSnapshot>::failure(hz.status());
97eve::Result<GeometryCollectionInstanceSnapshot::EdgeSnapshot> decodeEdge(const eve::Value& value) {
100 return eve::Result<GeometryCollectionInstanceSnapshot::EdgeSnapshot>::failure(eve::Diagnostic::error(
102 if (!hasExactFields(*object, {"boneA", "boneB", "strainThreshold", "accumulatedStrain", "broken"}))
103 return eve::Result<GeometryCollectionInstanceSnapshot::EdgeSnapshot>::failure(eve::Diagnostic::error(
104 eve::DiagnosticCode::InvalidArgument, "instance-snapshot edge has unknown or missing fields", "edges"));
106 if (!a) return eve::Result<GeometryCollectionInstanceSnapshot::EdgeSnapshot>::failure(a.status());
108 if (!b) return eve::Result<GeometryCollectionInstanceSnapshot::EdgeSnapshot>::failure(b.status());
110 if (!threshold) return eve::Result<GeometryCollectionInstanceSnapshot::EdgeSnapshot>::failure(threshold.status());
112 if (!strain) return eve::Result<GeometryCollectionInstanceSnapshot::EdgeSnapshot>::failure(strain.status());
114 if (!broken) return eve::Result<GeometryCollectionInstanceSnapshot::EdgeSnapshot>::failure(broken.status());
129 eve::DiagnosticCode::InvalidArgument, "instance-snapshot requires at least one bone", "bones"));
138 eve::DiagnosticCode::InvalidArgument, "instance-snapshot lastTick must be non-negative", "lastTick"));
148 !std::isfinite(bone.halfExtentX) || !std::isfinite(bone.halfExtentY) || !std::isfinite(bone.halfExtentZ))
150 eve::DiagnosticCode::InvalidArgument, "instance-snapshot half-extents must be finite and positive",
161 eve::DiagnosticCode::InvalidArgument, "instance-snapshot edge strain values invalid", "edges"));
236 if (eve::schema::SchemaRegistry::resolve(std::string(SchemaId), static_cast<int>(SchemaVersion)))
243eve::Result<GeometryCollectionInstanceSnapshot> GeometryCollectionInstanceSnapshot::fromValue(const eve::Value& value) {
248 if (!hasExactFields(*object, {"schema", "schemaVersion", "originX", "originY", "originZ", "lastTick",
251 eve::DiagnosticCode::InvalidArgument, "instance-snapshot has unknown or missing fields", "snapshot"));
257 if (!version) return eve::Result<GeometryCollectionInstanceSnapshot>::failure(version.status());
260 eve::DiagnosticCode::Unsupported, "instance-snapshot schema version is unsupported", "schemaVersion"));
269 if (!lastTick) return eve::Result<GeometryCollectionInstanceSnapshot>::failure(lastTick.status());
271 if (!sleepRev) return eve::Result<GeometryCollectionInstanceSnapshot>::failure(sleepRev.status());
274 eve::DiagnosticCode::InvalidArgument, "sleepBatchRevision must be non-negative", "sleepBatchRevision"));
305 if (!registered) return eve::Result<GeometryCollectionInstanceSnapshot>::failure(registered.status());
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
const std::string & asString() const
Return the string payload; the caller must have checked the kind.
Definition Value.cpp:87
const T * getIf() const noexcept
Return a typed pointer, or nullptr when the kind differs.
Definition Value.h:180
static eve::Result< SchemaRegistrationStatus > registerVersioned(const SchemaDefinition &definition)
Registers a new exact (id, version) entry without replacing it.
Definition SchemaRegistry.cpp:864
static const SchemaDefinition * resolve(const std::string &schemaId, int schemaVersion)
Resolves one exact (schemaId, schemaVersion) pair, or nullptr.
Definition SchemaRegistry.cpp:879
bool decodeEdge(const EditorValue &value, std::uint32_t &id, std::vector< procgen::road::RoadControlPoint > &points)
Definition RoadNetworkEditTarget.cpp:209
const EditorValue * field(const EditorValue &value, const char *name)
Definition RoadNetworkEditTarget.cpp:15
@ InvalidArgument
@ Unsupported
Definition Container.h:602
Persistent runtime snapshot for one geometry-collection instance.
Definition GeometryCollectionSnapshot.h:28
static constexpr std::uint32_t SchemaVersion
Definition GeometryCollectionSnapshot.h:30
static eve::schema::SchemaDefinition schemaDefinition()
Build the tooling schema that mirrors validate().
Definition GeometryCollectionSnapshot.cpp:206
std::int64_t lastTick
Definition GeometryCollectionSnapshot.h:54
eve::Result< eve::Value > toValue() const
Encode the complete canonical version-1 value.
Definition GeometryCollectionSnapshot.cpp:166
static eve::Result< void > ensureSchemaRegistered()
Idempotently register version 1 in the process schema registry.
Definition GeometryCollectionSnapshot.cpp:235
std::uint64_t sleepBatchRevision
Definition GeometryCollectionSnapshot.h:55
float originY
Definition GeometryCollectionSnapshot.h:52
static constexpr std::string_view SchemaId
Definition GeometryCollectionSnapshot.h:29
std::vector< BoneSnapshot > bones
Definition GeometryCollectionSnapshot.h:56
float originX
Definition GeometryCollectionSnapshot.h:51
float originZ
Definition GeometryCollectionSnapshot.h:53
eve::Result< void > validate() const
Validate counts and numeric ranges.
Definition GeometryCollectionSnapshot.cpp:126
std::vector< EdgeSnapshot > edges
Definition GeometryCollectionSnapshot.h:57
static eve::Result< GeometryCollectionInstanceSnapshot > fromValue(const eve::Value &value)
Decode and validate version 1 transactionally.
Definition GeometryCollectionSnapshot.cpp:243
Metadata and validation constraints for one object member.
Definition SchemaTypes.h:77
std::vector< FieldDefinition > fields
Definition SchemaTypes.h:99
bool additionalProperties
Definition SchemaTypes.h:98