载入中...
搜索中...
未找到
GuardWindowState.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
7#include "combat/Damage.h"
8#include "common/SubjectRef.h"
9
10#include <cstdint>
11#include <functional>
12#include <map>
13#include <string>
14#include <vector>
15
16namespace eve::combat {
17
19enum class GuardMode : std::uint8_t { Block, Parry };
20
22enum class GuardResult : std::uint8_t { None, Blocked, Parried };
23
31
35using GuardSubjectResolver = std::function<Result<SubjectRef>(ecs::EntityHandle)>;
36
44public:
46 explicit GuardWindowState(GuardSubjectResolver resolver);
48 ~GuardWindowState() override;
49
51 void setEnabled(bool enabled);
53 [[nodiscard]] bool enabled() const;
56 [[nodiscard]] bool supports(action::ActionStateWindowKind kind) const noexcept override;
59 [[nodiscard]] Result<void> enter(const action::ActionStateWindowBinding& binding,
60 const action::ActionTimelineEvent& event,
61 const action::ActionNotifyContext& context) override;
65 const action::ActionTimelineEvent& event,
66 const action::ActionNotifyContext& context) override;
67
69 [[nodiscard]] Result<GuardEvaluation> evaluate(SubjectRef defender, SubjectRef attacker) const;
74 [[nodiscard]] Result<GuardEvaluation> mitigate(SubjectRef defender, DamageRequest& request) const;
76 [[nodiscard]] std::vector<GuardMode> activeModes(SubjectRef subject) const;
78 [[nodiscard]] std::size_t activeCount() const noexcept { return active_.size(); }
79
80private:
81 using ActiveKey = std::pair<action::ActionExecutionId, std::string>;
82 struct ActiveGuard {
85 GuardMode mode = GuardMode::Block;
86 };
87
88 GuardSubjectResolver resolver_;
89 std::map<ActiveKey, ActiveGuard> active_;
90};
91
92} // namespace eve::combat
Typed combat/input/collision action-state window contracts.
int subject
Definition AnimSmr.cpp:163
Deterministic damage, poise, hit-reaction and knockback resolution.
#define EVENGINE_API_BACKENDS
Definition Export.h:108
const GltfImportRequest & request
TokenKind kind
eve::action::ActionVfxBinding binding
Stable reference to a runtime gameplay subject.
const VegetationPresetContext & context
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Strong, domain-neutral reference to a runtime subject.
Definition SubjectRef.h:26
Optional target-domain adapter for paired action state windows.
Authoritative projection of active block/parry Montage windows.
std::size_t activeCount() const noexcept
Number of retained active window keys.
ActionStateWindowKind
Stable semantic kind for one built-in state window.
std::function< Result< SubjectRef >(ecs::EntityHandle)> GuardSubjectResolver
Resolves an owning stable subject from a generation-qualified ECS handle.
GuardMode
Guard mode authored on a combat:guard-window timeline item.
GuardResult
How an incoming hit interacts with an active guard window.
bool enabled
Context linking a routed event to its action execution.
Owning validated state-window request authored on an action timeline.
Owning event projection returned by the runtime sampler.
Owning input for one damage transaction.
Definition Damage.h:49
Owning audit of one guard evaluation.