载入中...
搜索中...
未找到
AbilitySystem.cpp
浏览该文件的文档.
10 return phase == ActionPhase::Completed || phase == ActionPhase::Cancelled || phase == ActionPhase::Failed;
19 Diagnostic::error(DiagnosticCode::Conflict, std::string(domain) + " identity space exhausted", {}));
27 if (!id.isValid()) return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "Ability id is invalid", "id"));
29 return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "Ability cooldown must be non-negative", "cooldown"));
34 return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "Ability trigger tag is invalid", "triggers[" + std::to_string(i) + "].gameplayTag"));
44 return Result<void>::failure(Diagnostic::error(DiagnosticCode::AlreadyExists, "Ability definition is already registered", key));
55 return Result<void>::failure(Diagnostic::error(DiagnosticCode::NotFound, "Ability definition is not registered", key));
61 return Result<void>::failure(Diagnostic::error(DiagnosticCode::Conflict, "Granted ability cannot change its instancing policy during hot reload", "instancing"));
67Result<AbilityGrantId> AbilityRuntime::grant(std::string ownerId, const LogicalId& definitionId) {
74 Diagnostic::error(DiagnosticCode::NotFound, "Ability definition is not registered", definitionId.format()));
90 if (found == grants_.end()) return Result<void>::failure(Diagnostic::error(DiagnosticCode::NotFound, "Ability grant was not found", "grantId"));
92 return Result<void>::failure(Diagnostic::error(DiagnosticCode::Conflict, "Active ability grant cannot be revoked", "grantId"));
105Result<AbilityActivation> AbilityRuntime::activate(AbilityGrantId grantId, ActionRequest request, SimulationTick tick) {
113 Diagnostic::error(DiagnosticCode::NotFound, "Granted ability definition was removed", "definitionId"));
116 Diagnostic::error(DiagnosticCode::PreconditionViolation, "Ability is on cooldown", "cooldown"));
119 Diagnostic::error(DiagnosticCode::InvalidArgument, "Ability request action id does not match", "actionId"));
120 if (definition->second.instancing != AbilityInstancingPolicy::PerExecution && grantHasActiveActivation(grantId))
127 if (active.ownerId != grant->second.state.ownerId || active.group == AbilityActivationGroup::Independent)
146 DiagnosticCode::Conflict, "Could not replace the active exclusive ability", "activationGroup"));
177 return Result<AbilityActivation>::success(std::move(activation), Status::success(StatusCode::Applied));
198 return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "Ability cooldown delta must be non-negative", "delta"));
202 Duration::fromNanoseconds(delta.nanoseconds() >= remaining ? 0 : remaining - delta.nanoseconds());
204 return Result<void>::success(Status::success(delta.isZero() ? StatusCode::NoOp : StatusCode::Applied));
225Result<AbilityGrantId> AbilityRuntime::nextGrantId() { return takeNext(nextGrant_, "ability grant"); }
229Result<AbilityInstanceId> AbilityRuntime::nextInstanceId() { return takeNext(nextInstance_, "ability instance"); }
Grants, cooldowns, instancing, activation groups and gameplay-event triggers.
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
constexpr std::int64_t nanoseconds() const noexcept
Return the exact signed nanosecond representation.
Definition Time.h:69
static constexpr Duration fromNanoseconds(std::int64_t nanoseconds) noexcept
Construct an exact duration from nanoseconds.
Definition Time.h:55
Human-readable, scoped identifier in the form namespace:name.
Definition Identity.h:411
const std::string & format() const noexcept
Returns the canonical namespace:name representation.
Definition Identity.h:436
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
static Status success(StatusCode code=StatusCode::Ok)
Construct a successful status with an explicit non-error outcome.
Definition Status.h:81
Result< AbilityActivation > activate(AbilityGrantId grantId, ActionRequest request, SimulationTick tick)
Submit an activation after cooldown, instancing and group checks.
Definition AbilitySystem.cpp:105
Result< AbilityGrantState > findGrant(AbilityGrantId grantId) const
Return an owning grant-state snapshot.
Definition AbilitySystem.cpp:97
Result< std::size_t > synchronize()
Remove links whose ActionRuntime execution reached a terminal phase.
Definition AbilitySystem.cpp:207
Result< void > revoke(AbilityGrantId grantId)
Revoke an inactive grant. Active grants must be synchronized/cancelled first.
Definition AbilitySystem.cpp:88
Result< void > registerDefinition(AbilityDefinition definition)
Register one canonical definition; duplicate ids are rejected.
Definition AbilitySystem.cpp:39
Result< void > advanceCooldowns(Duration delta)
Decrease every cooldown using injected deterministic time.
Definition AbilitySystem.cpp:196
std::vector< AbilityActivation > activeActivations() const
Return owning active-link snapshots in activation-id order.
Definition AbilitySystem.cpp:218
Result< void > replaceDefinition(AbilityDefinition definition)
Transactionally replace one registered definition for future activations.
Definition AbilitySystem.cpp:49
Result< AbilityGrantId > grant(std::string ownerId, const LogicalId &definitionId)
Grant a registered definition to a non-empty owner identity.
Definition AbilitySystem.cpp:67
std::vector< AbilityGrantId > matchingGrants(std::string_view ownerId, std::string_view gameplayEventTag) const
Return grants whose declared gameplay-event triggers match an event tag.
Definition AbilitySystem.cpp:180
Result< void > cancel(ActionExecutionId id, SimulationTick tick)
Cancel a non-terminal execution before its Active transaction.
Definition Action.cpp:514
const ActionExecution * find(ActionExecutionId id) const noexcept
Find a borrowed read-only execution view, or null when absent.
Definition Action.cpp:168
Result< ActionExecutionId > submit(ActionDefinition definition, ActionRequest request)
Submit a validated definition/request pair in Requested phase.
Definition Action.cpp:148
constexpr std::uint64_t value() const noexcept
Returns the underlying value at an explicit protocol boundary.
Definition StrongUint64.h:26
Definition AbilityAsset.cpp:9
@ ExclusiveBlocking
@ Independent
@ Completed
@ Cancelled
@ Failed
eve::detail::StrongUint64< AbilityGrantIdTag > AbilityGrantId
Opaque identity of one owner-to-definition grant.
Definition AbilitySystem.h:47
@ PerExecution
constexpr HexDirection next(HexDirection d) noexcept
The next direction clockwise (NW wraps to NE).
Definition HexMetrics.h:76
bool isValidGameplayTagName(std::string_view name) noexcept
Returns whether a name is a canonical dot-separated gameplay tag.
Definition GameplayTag.cpp:29
@ InvalidArgument
@ NotFound
@ PreconditionViolation
@ AlreadyExists
@ Conflict
@ NoOp
@ Applied
Owning link between an ability activation and its action execution.
Definition AbilitySystem.h:62
Canonical immutable-by-convention definition of a grantable ability.
Definition AbilitySystem.h:31
std::vector< AbilityTrigger > triggers
Definition AbilitySystem.h:37
Result< void > validate() const
Validate identity, action, cooldown and gameplay-event trigger invariants.
Definition AbilitySystem.cpp:26
Owning snapshot of one granted ability's mutable state.
Definition AbilitySystem.h:54
Result< void > validate() const
Validate definition invariants without changing the definition.
Definition Action.cpp:56
One caller-owned request to instantiate an action execution.
Definition Action.h:127