载入中...
搜索中...
未找到
SkillConditionCodec.cpp
浏览该文件的文档.
15bool exactFields(const eve::Value::Object& object, std::initializer_list<std::string_view> allowed) {
24eve::Result<std::string> requiredString(const eve::Value::Object& object, std::string_view name) {
29 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "condition field must be a non-empty string",
38 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "condition kind must be a string", "kind", {},
56 eve::DiagnosticCode::InvalidArgument, "unknown condition kind", "kind", {}, "rpg.skill.condition_codec"));
63 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "condition operator must be a string",
93 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "unknown condition determinism level",
99eve::Result<std::vector<eve::decision::Condition>> decodeChildren(const eve::Value::Object& object) {
104 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "condition children must be an array",
110 if (!decoded) return eve::Result<std::vector<eve::decision::Condition>>::failure(decoded.status());
120 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "condition node must be an object", {}, {},
125 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "condition node requires kind", "kind", {},
141 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "not condition requires one child",
144 return eve::Result<eve::decision::Condition>::success(eve::decision::Condition::all(std::move(values)));
146 return eve::Result<eve::decision::Condition>::success(eve::decision::Condition::any(std::move(values)));
160 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "compare condition is incomplete", {}, {},
176 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "state condition is incomplete", {}, {},
205 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "script declaration is incomplete",
209 eve::decision::ScriptConditionDeclaration parsed{std::move(name).takeValue(), {}, level.value()};
225 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "leaf condition contains an unknown field", {},
244 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "unsupported condition node kind", {}, {},
254 eve::DiagnosticCode::InvalidArgument, "skill condition is invalid", {}, {}, "rpg.skill.condition_codec"));
256 eve::Value::Object object{{"kind", eve::Value(eve::decision::conditionKindName(condition.kind()))}};
267 object.emplace("operator", eve::Value(eve::decision::compareOperatorName(condition.compareOperator())));
283 case eve::decision::DeterminismLevel::TickDeterministic: determinism = "tick_deterministic"; break;
284 case eve::decision::DeterminismLevel::ToleranceBounded: determinism = "tolerance_bounded"; break;
299eve::Result<eve::decision::Condition> decodeSkillCondition(const eve::Value& value) { return decodeNode(value); }
RPG-owned Value codec for the shared decision condition tree.
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
Type kind() const noexcept
Compatibility spelling for the former dialogue data tree.
Definition Value.h:85
const T * getIf() const noexcept
Return a typed pointer, or nullptr when the kind differs.
Definition Value.h:180
static Condition hasAttribute(std::string attribute)
Require an attribute to exist.
Definition Condition.cpp:173
static Condition all(std::vector< Condition > children)
Construct a conjunction of child conditions.
Definition Condition.cpp:141
static Condition not_(Condition child)
Construct a logical negation of one child condition.
Definition Condition.cpp:153
static Condition stateEquals(std::string key, Value expected)
Require a named state value to equal the expected value.
Definition Condition.cpp:185
static Condition policyCall(std::string name, Value arguments=Value::Object{}, std::optional< ScriptConditionDeclaration > scriptDeclaration=std::nullopt)
Call a named read-only policy and use its ConditionResult.
Definition Condition.cpp:198
static Condition compare(std::string key, CompareOperator op, Value expected)
Compare a context value against an expected scalar value.
Definition Condition.cpp:159
static Condition authorityCheck(std::string scope)
Require read-only authority for a scope.
Definition Condition.cpp:192
static Condition any(std::vector< Condition > children)
Construct a disjunction of child conditions.
Definition Condition.cpp:147
static Condition hasResource(std::string resource)
Require a resource to exist.
Definition Condition.cpp:179
const char * conditionKindName(ConditionKind kind) noexcept
Return the stable lowercase spelling of a condition node kind. @ownership Borrowed process-static tex...
Definition Condition.cpp:105
DeterminismLevel
Determinism contract declared by a script-backed condition policy.
Definition Condition.h:46
@ ToleranceBounded
Results may vary within a documented numeric tolerance.
@ TickDeterministic
Deterministic when evaluated at the injected simulation tick.
@ BitExact
Same inputs produce the same bits without an external clock.
@ ExplicitlyNondeterministic
Result is intentionally not suitable for replay or lockstep.
const char * compareOperatorName(CompareOperator op) noexcept
Return the stable lowercase spelling of a comparison operator. @ownership Borrowed process-static tex...
Definition Condition.cpp:121
const EditorValue * field(const EditorValue &value, const char *name)
Definition RoadNetworkEditTarget.cpp:15
eve::Result< eve::decision::Condition > decodeSkillCondition(const eve::Value &value)
Decode one Skill condition tree from an owning Value.
Definition SkillConditionCodec.cpp:299
eve::Result< eve::Value > encodeSkillCondition(const eve::decision::Condition &condition)
Encode one validated Skill condition tree as an owning Value.
Definition SkillConditionCodec.cpp:251
@ InvalidArgument
Metadata a script policy must declare before it is used by a condition.
Definition Condition.h:64