载入中...
搜索中...
未找到
SoftBody3DDefinition.cpp
浏览该文件的文档.
18bool hasExactFields(const eve::Value::Object& object, std::initializer_list<std::string_view> expected) {
33 eve::DiagnosticCode::InvalidArgument, "soft-body integer is outside int range", std::string(name)));
42 const double parsed = value->isDouble() ? value->asDouble() : static_cast<double>(value->asInt());
46 eve::DiagnosticCode::InvalidArgument, "soft-body number must be a finite float", std::string(name)));
68 eve::DiagnosticCode::InvalidArgument, "soft-body exceeds the one-million-particle limit", "dimensions"));
79 if (!finite(deformationResistance) || deformationResistance < 0.f || deformationResistance > 1.f)
81 eve::DiagnosticCode::InvalidArgument, "deformationResistance must be in [0, 1]", "deformationResistance"));
87 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "damping must be in [0, 1]", "damping"));
90 eve::DiagnosticCode::InvalidArgument, "particleRadius must be finite and positive", "particleRadius"));
93 eve::DiagnosticCode::InvalidArgument, "particleMass must be finite and positive", "particleMass"));
94 if (!finite(plasticYield) || !finite(plasticCreep) || !finite(plasticRecovery) || !finite(maxDeformation) ||
135 auto fieldDefinition = [](const char* name, ValueType type, const char* title, const char* description,
146 auto integerField = [&](const char* name, const char* title, const char* description, int value, double minimum,
148 auto field = fieldDefinition(name, ValueType::Integer, title, description, std::to_string(value));
153 auto numberField = [&](const char* name, const char* title, const char* description, float value, double minimum,
155 auto field = fieldDefinition(name, ValueType::Number, title, description, std::to_string(value));
169 fieldDefinition("schema", ValueType::String, "Schema", "Stable schema identifier", "\"physics:softbody3d\""),
175 numberField("originX", "Origin X", "Minimum rest X coordinate", defaults.originX, -100000, 100000),
176 numberField("originY", "Origin Y", "Minimum rest Y coordinate", defaults.originY, -100000, 100000),
177 numberField("originZ", "Origin Z", "Minimum rest Z coordinate", defaults.originZ, -100000, 100000),
183 integerField("iterations", "Iterations", "Constraint iterations per substep", defaults.iterations, 1, 32),
185 numberField("particleRadius", "Particle radius", "Collision radius in meters", defaults.particleRadius, 0.0001,
187 numberField("particleMass", "Particle mass", "Particle mass in kilograms", defaults.particleMass, 0.0001,
189 numberField("plasticYield", "Plastic yield", "Strain threshold for plastic deformation", defaults.plasticYield,
191 numberField("plasticCreep", "Plastic creep", "Permanent deformation rate", defaults.plasticCreep, 0, 1),
192 numberField("plasticRecovery", "Plastic recovery", "Rest-shape recovery rate", defaults.plasticRecovery, 0, 1),
193 numberField("maxDeformation", "Maximum deformation", "Maximum plastic displacement", defaults.maxDeformation, 0,
201 if (eve::schema::SchemaRegistry::resolve(std::string(SchemaId), static_cast<int>(SchemaVersion)))
237 eve::DiagnosticCode::InvalidArgument, "soft-body definition has missing or unknown fields", "softbody3d"));
241 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "unexpected soft-body schema id", "schema"));
245 eve::DiagnosticCode::InvalidArgument, "unsupported soft-body schema version", "schemaVersion"));
#define EVE_SOFTBODY_READ(reader, member)
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
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
const EditorValue * field(const EditorValue &value, const char *name)
Definition RoadNetworkEditTarget.cpp:15
@ InvalidArgument
Definition Container.h:602
Versioned, owning creation definition for one volumetric soft body.
Definition SoftBody3DDefinition.h:21
eve::Result< eve::Value > toValue() const
Encode the complete canonical version-1 value.
Definition SoftBody3DDefinition.cpp:103
float plasticCreep
Definition SoftBody3DDefinition.h:32
bool selfCollision
Definition SoftBody3DDefinition.h:33
float plasticRecovery
Definition SoftBody3DDefinition.h:32
static constexpr std::string_view SchemaId
Definition SoftBody3DDefinition.h:22
float particleRadius
Definition SoftBody3DDefinition.h:31
float deformationResistance
Definition SoftBody3DDefinition.h:29
float particleMass
Definition SoftBody3DDefinition.h:31
static eve::Result< SoftBody3DDefinition > fromValue(const eve::Value &value)
Decode and validate version 1 transactionally without partial publication.
Definition SoftBody3DDefinition.cpp:208
static eve::Result< void > ensureSchemaRegistered()
Idempotently register version 1 in the process schema registry.
Definition SoftBody3DDefinition.cpp:200
static eve::schema::SchemaDefinition schemaDefinition()
Build the runtime/tooling schema whose constraints mirror validate().
Definition SoftBody3DDefinition.cpp:132
float plasticYield
Definition SoftBody3DDefinition.h:32
eve::Result< void > validate() const
Validate all fields and the aggregate one-million-particle limit.
Definition SoftBody3DDefinition.cpp:60
float maxDeformation
Definition SoftBody3DDefinition.h:32
static constexpr std::uint32_t SchemaVersion
Definition SoftBody3DDefinition.h:23
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