载入中...
搜索中...
未找到
Damage.cpp
浏览该文件的文档.
16 Diagnostic::error(DiagnosticCode::InvalidArgument, "Resolved health damage is invalid", "healthDamage"));
18 Diagnostic::error(DiagnosticCode::InvalidArgument, "Resolved poise damage is invalid", "poiseDamage"));
21 Diagnostic::error(DiagnosticCode::InvalidArgument, "Resolved knockback scale is invalid", "knockbackScale"));
29 : target_(target), request_(request), reactionPolicy_(reactionPolicy), amounts_(std::move(amounts)) {}
55 Result<void> clamp(settlement::SettlementContext& context) override { return context.setClampMax(target_.health); }
57 Result<settlement::PreparedApply> prepareApply(const settlement::SettlementContext& context) override {
71 const settlement::SettlementContext& context, const settlement::SettlementResult& result) override {
112 Result<void> sourceModifiers(settlement::SettlementContext&) override { return Result<void>::success(); }
113 Result<void> targetMitigation(settlement::SettlementContext&) override { return Result<void>::success(); }
114 Result<void> armorShield(settlement::SettlementContext&) override { return Result<void>::success(); }
118 Result<settlement::PreparedApply> prepareApply(const settlement::SettlementContext& context) override {
144 Diagnostic::error(DiagnosticCode::InvalidArgument, "Combat health is outside [0,maxHealth]", "health"));
147 Diagnostic::error(DiagnosticCode::InvalidArgument, "Combat poise is outside [0,maxPoise]", "poise"));
155 Diagnostic::error(DiagnosticCode::InvalidArgument, "Damage type must be a gameplay tag", "damageType"));
157 Diagnostic::error(DiagnosticCode::InvalidArgument, "Health damage is invalid", "healthDamage"));
162 Diagnostic::error(DiagnosticCode::InvalidArgument, "Incoming damage multiplier is invalid", "incomingDamageMultiplier"));
164 Diagnostic::error(DiagnosticCode::InvalidArgument, "Available shield is invalid", "availableShield"));
167 Diagnostic::error(DiagnosticCode::InvalidArgument, "Knockback impulse must be finite", "knockback"));
174 Diagnostic::error(DiagnosticCode::InvalidArgument, "Flinch threshold is invalid", "flinchDamageThreshold"));
175 if (!std::isfinite(staggerPoiseFraction) || staggerPoiseFraction < 0.0 || staggerPoiseFraction > 1.0)
177 Diagnostic::error(DiagnosticCode::InvalidArgument, "Stagger poise fraction must be in [0,1]", "staggerPoiseFraction"));
181Result<DamageAmounts> DamageRuntime::preview(const CombatState& target, const DamageRequest& request) const {
188 DiagnosticCode::InvalidArgument, "Damage request target does not match combat state", "target"));
200Result<DamageOutcome> DamageRuntime::apply(CombatState& target, const DamageRequest& request) const {
232 } else if (before.maxPoise > 0.0 && appliedPoise >= before.maxPoise * policy_.staggerPoiseFraction) {
253 return Result<DamageOutcome>::success(std::move(outcome), Status::success(StatusCode::Applied));
292 Diagnostic::error(DiagnosticCode::InvalidArgument, "Poise recovery amount is invalid", "amount"));
296 return Result<double>::success(recovered, Status::success(changed ? StatusCode::Applied : StatusCode::NoOp));
Deterministic damage, poise, hit-reaction and knockback resolution.
Stable hierarchical gameplay-tag definitions and registry.
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
static Status success(StatusCode code=StatusCode::Ok)
Construct a successful status with an explicit non-error outcome.
Definition Status.h:81
bool isValid() const noexcept
Return whether this reference is valid and non-nil.
Definition SubjectRef.h:38
Result< void > configureSettlementRules(const settlement::SettlementRuleSet &rules)
Replace the optional declarative buff/effect rules used by subsequent damage settlements.
Definition Damage.cpp:279
Result< DamageOutcome > previewSettlement(const CombatState &target, const DamageRequest &request) const
Preview the complete rule, mitigation, shield, clamp and reaction result without mutation.
Definition Damage.cpp:256
Result< DamageAmounts > preview(const CombatState &target, const DamageRequest &request) const
Resolve provider damage amounts before settlement stages, without mutating the target.
Definition Damage.cpp:181
Result< double > recoverPoise(CombatState &target, double amount) const
Restore an explicit poise amount, clamped to maxPoise.
Definition Damage.cpp:287
Result< settlement::SettlementResult > heal(CombatState &target, SubjectRef source, double amount) const
Resolve and atomically commit health restoration through the configured settlement pipeline.
Definition Damage.cpp:262
Result< DamageOutcome > apply(CombatState &target, const DamageRequest &request) const
Resolve and atomically commit one damage request.
Definition Damage.cpp:200
virtual Result< DamageAmounts > evaluate(const DamageRequest &request, const CombatState &target) const =0
Resolve final non-negative amounts without mutating target state.
Deterministically ordered, composable settlement pipeline.
Definition Settlement.h:542
eve::Result< SettlementResult > settle(const SettlementRequest &request, ISettlementPolicy &policy, game_event::GameEventLog *events=nullptr) const
Execute one settlement transaction against a domain policy.
Definition Settlement.cpp:744
Validated immutable-style rule collection installable into pipelines.
Definition SettlementRules.h:77
eve::Result< void > install(SettlementPipeline &pipeline) const
Install a stable snapshot as custom stages on a pipeline.
Definition SettlementRules.cpp:900
Definition ActionDamageSink.cpp:9
@ Flinch
@ Stagger
@ Knockdown
@ Provider
bool isValidGameplayTagName(std::string_view name) noexcept
Returns whether a name is a canonical dot-separated gameplay tag.
Definition GameplayTag.cpp:29
@ InvalidArgument
@ NoOp
@ Applied
Definition Container.h:602
Mutable combat state owned by the gameplay domain for one subject.
Definition Damage.h:37
Result< void > validate() const
Validate finite ranges and the non-nil subject link.
Definition Damage.cpp:139
Provider result prepared before the authoritative state is mutated.
Definition Damage.h:67
Complete owning audit result of one committed damage transaction.
Definition Damage.h:98
Result< void > validate() const
Validate target, canonical gameplay-tag damage type and finite amounts.
Definition Damage.cpp:151
double availableShield
Shield balance available to this transaction; the caller commits reported consumption.
Definition Damage.h:59
double incomingDamageMultiplier
Target-owned effect multiplier applied in the target-mitigation settlement stage.
Definition Damage.h:57
Result< void > validate() const
Validate finite non-negative thresholds and fraction in [0,1].
Definition Damage.cpp:171
double staggerPoiseFraction
Definition Damage.h:91
double flinchDamageThreshold
Definition Damage.h:90
Domain-neutral input to one settlement operation.
Definition Settlement.h:107