载入中...
搜索中...
未找到
AbilityAsset.cpp
浏览该文件的文档.
27 if (!item || !item->isString()) return invalid<std::string>("expected text field", std::move(path));
33 if (!item || !item->isInt64()) return invalid<std::int64_t>("expected integer field", std::move(path));
48 if (!std::isfinite(result)) return invalid<double>("numeric field must be finite", std::move(path));
74 if (value == "per_owner") return Result<AbilityInstancingPolicy>::success(AbilityInstancingPolicy::PerOwner);
90 if (value == "independent") return Result<AbilityActivationGroup>::success(AbilityActivationGroup::Independent);
158Result<std::vector<std::string>> decodeStrings(const Value& parent, std::string_view name, std::string path);
166 return invalid<std::vector<decision::Condition>>("expected children array", path + ".children");
181 return Result<decision::Condition>::success(decision::Condition::all(std::move(decoded).takeValue()));
183 return Result<decision::Condition>::success(decision::Condition::any(std::move(decoded).takeValue()));
186 return Result<decision::Condition>::success(decision::Condition::not_(std::move(decoded.value().front())));
193 if (!op || !expected) return invalid<decision::Condition>("compare condition is incomplete", path);
207 return Result<decision::Condition>::success(decision::Condition::stateEquals(key.value(), *expected));
219 if (!arguments) return invalid<decision::Condition>("policy arguments are missing", path + ".arguments");
231 return invalid<decision::Condition>("script condition declaration is invalid", path + ".script");
249Result<std::vector<std::string>> decodeStrings(const Value& parent, std::string_view name, std::string path) {
251 if (!source || !source->isArray()) return invalid<std::vector<std::string>>("expected text array", path);
294Result<std::array<double, 3>> vector3(const Value& value, std::string_view name, std::string path) {
303 result[index] = component.isDouble() ? component.asDouble() : static_cast<double>(component.asInt());
362 if (!maxRange) return invalid<sensing::TargetingSpec>("maximum range is missing", "action.targetingSpec.maxRange");
365 result.maxRange = static_cast<float>(maxRange->isDouble() ? maxRange->asDouble() : maxRange->asInt());
374 if (!zone->isString()) return invalid<sensing::TargetingSpec>("zone must be text", "action.targetingSpec.zone");
376 if (!id) return invalid<sensing::TargetingSpec>("zone id is invalid", "action.targetingSpec.zone");
389 return invalid<sensing::TargetingSpec>("world area is invalid", "action.targetingSpec.worldArea");
419 return invalid<sensing::TargetingSpec>("grid area is invalid", "action.targetingSpec.gridArea");
427 auto decoded = shape.value() == 0 ? sensing::GridArea::box2D(a, b) : sensing::GridArea::box3D(a, b);
436Result<Duration> durationField(const Value& value, std::string_view nsName, std::string_view msName,
442 if (raw.value() < 0) return invalid<Duration>("duration must be non-negative", std::move(path));
445 return Result<Duration>::success(Duration::fromNanoseconds(version == 1 ? raw.value() * 1'000'000 : raw.value()));
456 costs.emplace_back(Value::Object{{"resource", item.resource.value()}, {"amount", item.amount.value()}});
494 auto rootFields = rejectUnknown(value, {"schema", "schemaVersion", "id", "action", "cooldownNs", "cooldownMs",
503 if (versionRaw.value() < 1 || versionRaw.value() > static_cast<std::int64_t>(kAbilityAssetSchemaVersion))
536 auto activeRequired = boolean(*actionValue, "activeExecutionRequired", "action.activeExecutionRequired");
549 auto recover = durationField(*timing, "recoverNs", "recoverMs", version, "action.timing.recover");
569 if (!cost->isArray()) return invalid<AbilityDefinition>("action cost must be an array or null", "action.cost");
573 auto resourceName = text(array[index], "resource", "action.cost[" + std::to_string(index) + "].resource");
575 auto amount = integer(array[index], "amount", "action.cost[" + std::to_string(index) + "].amount");
597 return invalid<AbilityDefinition>("ability trigger is invalid", "triggers[" + std::to_string(index) + "]");
Versioned persistent codec for ability definitions.
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 constexpr Duration fromNanoseconds(std::int64_t nanoseconds) noexcept
Construct an exact duration from nanoseconds.
Definition Time.h:55
static std::optional< LogicalId > parse(std::string_view text)
Parses a scoped logical name.
Definition Identity.cpp:36
const T & value() const &
Borrow the value from a const lvalue after checking success.
Definition Result.h:308
const Status & status() const noexcept
Inspect the structured operation status.
Definition Result.h:269
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
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
static Result< GridArea > box2D(GridPoint minimum, GridPoint maximum)
Creates an inclusive 2D grid rectangle.
Definition Targeting.cpp:221
static Result< GridArea > box3D(GridPoint minimum, GridPoint maximum)
Creates an inclusive 3D grid box.
Definition Targeting.cpp:227
static GridPoint grid3D(std::int32_t x, std::int32_t y, std::int32_t z) noexcept
Creates a 3D integer grid point.
Definition Targeting.cpp:146
static GridPoint grid2D(std::int32_t x, std::int32_t y) noexcept
Creates a 2D integer grid point.
Definition Targeting.cpp:142
static Result< WorldArea > circle2D(WorldPoint center, float radius)
Creates a finite non-negative 2D world circle.
Definition Targeting.cpp:150
static Result< WorldArea > box3D(WorldPoint minimum, WorldPoint maximum)
Creates an axis-aligned 3D world box from inclusive corners.
Definition Targeting.cpp:172
static Result< WorldArea > sphere3D(WorldPoint center, float radius)
Creates a finite non-negative 3D world sphere.
Definition Targeting.cpp:164
static Result< WorldArea > box2D(WorldPoint minimum, WorldPoint maximum)
Creates an axis-aligned 2D world box from inclusive corners.
Definition Targeting.cpp:158
static Result< WorldPoint > world3D(float x, float y, float z)
Creates a finite 3D world point.
Definition Targeting.cpp:135
static Result< WorldPoint > world2D(float x, float y)
Creates a finite 2D world point.
Definition Targeting.cpp:128
static std::optional< ZoneRef > fromLogicalId(LogicalId id)
Creates a zone reference from a valid logical ID.
Definition Targeting.cpp:123
Definition AbilityAsset.cpp:9
constexpr std::uint64_t kAbilityAssetSchemaVersion
Definition AbilityAsset.h:13
constexpr std::string_view kAbilityAssetSchemaId
Definition AbilityAsset.h:12
AbilityActivationGroup
Concurrency policy modeled after independent and exclusive ability groups.
Definition AbilitySystem.h:22
@ ExclusiveBlocking
@ ExclusiveReplaceable
@ Independent
Result< Value > encodeAbilityAsset(const AbilityDefinition &definition)
Encode one validated ability definition as canonical schema version 2 data.
Definition AbilityAsset.cpp:450
Result< AbilityDefinition > decodeAbilityAsset(const Value &value)
Decode schema version 2 or migrate version 1 millisecond data to the current definition.
Definition AbilityAsset.cpp:493
@ Query
The request supplies a sensing query resolved during validation.
@ Explicit
The request already owns the selected ECS target handles.
AbilityInstancingPolicy
Controls where mutable ability instance state is allocated.
Definition AbilitySystem.h:19
@ NonInstanced
@ PerExecution
std::variant< std::monostate, std::int64_t, double, std::string, bool > Value
Definition Database.h:26
@ NotEqual
@ GreaterEqual
@ LessEqual
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
@ HasAttribute
@ StateEquals
@ AuthorityCheck
@ HasResource
@ PolicyCall
DeterminismLevel
Determinism contract declared by a script-backed condition policy.
Definition Condition.h:46
@ 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
std::string_view coordinateSpaceName(CoordinateSpace space) noexcept
Returns the stable protocol name for a coordinate space.
Definition Targeting.cpp:556
@ Neutral
@ NotRequired
@ Required
@ InvalidArgument
@ Object
Canonical immutable-by-convention definition of a grantable ability.
Definition AbilitySystem.h:31
AbilityActivationGroup activationGroup
Definition AbilitySystem.h:36
std::vector< AbilityTrigger > triggers
Definition AbilitySystem.h:37
AbilityInstancingPolicy instancing
Definition AbilitySystem.h:35
Result< void > validate() const
Validate identity, action, cooldown and gameplay-event trigger invariants.
Definition AbilitySystem.cpp:26
bool activeExecutionRequired
Whether Active must call the injected executor even with no effect ids.
Definition Action.h:106
std::vector< std::string > effectIds
Stable effect-definition ids interpreted by the active executor.
Definition Action.h:104
std::optional< ActionTimeline > timeline
Optional versioned choreography authored by the action editor.
Definition Action.h:110
std::optional< resource::CostSpec > cost
Optional canonical cost reserved and committed by the pipeline.
Definition Action.h:102
std::optional< sensing::TargetingSpec > targetingSpec
Constraints used when targetingMode is Query.
Definition Action.h:100
Metadata a script policy must declare before it is used by a condition.
Definition Condition.h:64
A checked target-count and spatial constraint description.
Definition Targeting.h:310
LineOfSightMode lineOfSight
Whether an injected LOS provider must confirm each candidate.
Definition Targeting.h:340
Result< void > validate() const
Validates count, range, tags, zone and coordinate-space invariants.
Definition Targeting.cpp:240
std::vector< std::string > excludedTags
Tags that exclude a candidate when present.
Definition Targeting.h:332
float maxRange
Maximum distance, in world units or grid cells; positive infinity means unbounded.
Definition Targeting.h:328
float minRange
Minimum distance, in world units or grid cells according to space.
Definition Targeting.h:326
std::optional< ZoneRef > zone
Optional logical zone membership required from candidates.
Definition Targeting.h:334
std::vector< std::string > requiredTags
All tags that each candidate must contain.
Definition Targeting.h:330
CoordinateSpace space
Required coordinate space for origin, candidates and area.
Definition Targeting.h:312
std::optional< WorldArea > worldArea
Optional World2D/World3D area constraint.
Definition Targeting.h:336
std::uint32_t minCount
Minimum number of candidates required in the resolved set.
Definition Targeting.h:316