载入中...
搜索中...
未找到
AbilitySystem.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
7#include "action/Action.h"
9#include "tags/GameplayTag.h"
10
11#include <map>
12#include <string>
13#include <string_view>
14#include <vector>
15
16namespace eve::action {
17
20
23
29
34 Duration cooldown = Duration::zero();
35 AbilityInstancingPolicy instancing = AbilityInstancingPolicy::PerOwner;
36 AbilityActivationGroup activationGroup = AbilityActivationGroup::Independent;
37 std::vector<AbilityTrigger> triggers;
38
40 [[nodiscard]] Result<void> validate() const;
41};
42
43struct AbilityGrantIdTag;
44struct AbilityActivationIdTag;
45struct AbilityInstanceIdTag;
52
60
70
79public:
81 explicit AbilityRuntime(ActionRuntime& runtime) : runtime_(runtime) {}
82
84 [[nodiscard]] Result<void> registerDefinition(AbilityDefinition definition);
92 [[nodiscard]] Result<void> replaceDefinition(AbilityDefinition definition);
94 [[nodiscard]] Result<AbilityGrantId> grant(std::string ownerId, const LogicalId& definitionId);
96 [[nodiscard]] Result<void> revoke(AbilityGrantId grantId);
98 [[nodiscard]] Result<AbilityGrantState> findGrant(AbilityGrantId grantId) const;
99
106 [[nodiscard]] Result<AbilityActivation> activate(AbilityGrantId grantId, ActionRequest request,
109 [[nodiscard]] std::vector<AbilityGrantId> matchingGrants(std::string_view ownerId,
110 std::string_view gameplayEventTag) const;
112 [[nodiscard]] Result<void> advanceCooldowns(Duration delta);
114 [[nodiscard]] Result<std::size_t> synchronize();
116 [[nodiscard]] std::vector<AbilityActivation> activeActivations() const;
117
118private:
119 struct GrantRecord {
121 AbilityInstanceId ownerInstanceId;
122 };
123
124 [[nodiscard]] Result<AbilityGrantId> nextGrantId();
125 [[nodiscard]] Result<AbilityActivationId> nextActivationId();
126 [[nodiscard]] Result<AbilityInstanceId> nextInstanceId();
127 [[nodiscard]] bool grantHasActiveActivation(AbilityGrantId grantId) const;
128
129 ActionRuntime& runtime_;
130 std::map<std::string, AbilityDefinition> definitions_;
131 std::map<AbilityGrantId, GrantRecord> grants_;
132 std::map<AbilityActivationId, AbilityActivation> activations_;
133 AbilityGrantId nextGrant_{1};
134 AbilityActivationId nextActivation_{1};
135 AbilityInstanceId nextInstance_{1};
136};
137
138} // namespace eve::action
Renderer- and ruleset-neutral gameplay action pipeline.
#define EVENGINE_API_PLATFORM
Definition Export.h:107
Stable hierarchical gameplay-tag definitions and registry.
const GltfImportRequest & request
AbilityInstancingPolicy instancing
Internal storage primitive for domain-owned unsigned values.
LogicalId definition
SimulationTick tick
Signed, fixed-resolution simulation duration in nanoseconds.
Definition Time.h:43
static constexpr Duration zero() noexcept
Return zero duration.
Definition Time.h:60
Human-readable, scoped identifier in the form namespace:name.
Definition Identity.h:411
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Owner-thread coordinator for grant and activation state.
AbilityRuntime(ActionRuntime &runtime)
Construct a system borrowing the action runtime used for submissions.
Deterministic action lifecycle coordinator.
Definition Action.h:485
AbilityActivationGroup
Concurrency policy modeled after independent and exclusive ability groups.
eve::detail::StrongUint64< AbilityInstanceIdTag > AbilityInstanceId
Opaque mutable-instance identity; zero explicitly means NonInstanced.
AbilityInstancingPolicy
Controls where mutable ability instance state is allocated.
GameplayTagMatch
Selects exact or hierarchical descendant matching.
Definition GameplayTag.h:23
Owning link between an ability activation and its action execution.
AbilityActivationGroup group
Canonical immutable-by-convention definition of a grantable ability.
std::vector< AbilityTrigger > triggers
Owning snapshot of one granted ability's mutable state.
One gameplay-event trigger declared by an ability definition.
tags::GameplayTagMatch match
Immutable-by-convention definition of one action kind.
Definition Action.h:90
One caller-owned request to instantiate an action execution.
Definition Action.h:127