载入中...
搜索中...
未找到
SettlementAdapter.cpp
浏览该文件的文档.
20bool isHealingKind(std::string_view kind) noexcept { return kind == "heal" || kind == "healing"; }
27const eve::Value* VehicleSettlementAdapter::contextValue(const settlement::SettlementContext& context,
54bool VehicleSettlementAdapter::isDamage(const settlement::SettlementContext& context) const noexcept {
58bool VehicleSettlementAdapter::isHealing(const settlement::SettlementContext& context) const noexcept {
75 auto hpResult = VehicleAttributeAdapter::read(vehicle_, VehicleAttributeAdapter::healthAttribute);
77 auto maxHpResult = VehicleAttributeAdapter::read(vehicle_, VehicleAttributeAdapter::maxHealthAttribute);
83 eve::DiagnosticCode::InvariantViolation, "Vehicle health component is outside validated bounds", "health"));
89eve::Result<void> VehicleSettlementAdapter::sourceModifiers(settlement::SettlementContext& context) {
103 const double criticalMultiplier = numberValue(contextValue(context, "critical_multiplier")).value_or(1.0);
106 eve::DiagnosticCode::InvalidArgument, "Vehicle critical multiplier must be finite and at least one",
130eve::Result<void> VehicleSettlementAdapter::armorShield(settlement::SettlementContext& context) {
135 if (!zone.empty() && vehicle_.definition().operator->() != nullptr && vehicle_.definition()->def != nullptr) {
140 eve::DiagnosticCode::InvariantViolation, "Vehicle armor-zone multiplier is invalid", "armor_zone"));
146 const double penetration = std::clamp(numberValue(contextValue(context, "penetration")).value_or(0.0), 0.0, 1.0);
149 const double incidence = std::clamp(numberValue(contextValue(context, "incidence")).value_or(1.0), 0.0, 1.0);
154 auto armorResult = VehicleAttributeAdapter::read(vehicle_, VehicleAttributeAdapter::armorAttribute);
159 eve::DiagnosticCode::InvariantViolation, "Vehicle armor attribute is outside validated bounds", "armor"));
187 auto hpResult = VehicleAttributeAdapter::read(vehicle_, VehicleAttributeAdapter::healthAttribute);
189 auto maxHpResult = VehicleAttributeAdapter::read(vehicle_, VehicleAttributeAdapter::maxHealthAttribute);
206 auto hpResult = VehicleAttributeAdapter::read(vehicle_, VehicleAttributeAdapter::healthAttribute);
208 auto maxHpResult = VehicleAttributeAdapter::read(vehicle_, VehicleAttributeAdapter::maxHealthAttribute);
219 if (!beforeSnapshotResult) return eve::Result<settlement::PreparedApply>::failure(beforeSnapshotResult.status());
232 std::make_shared<Pending>(Pending{&vehicle_, std::move(beforeSnapshot), vehicle_.stateFlags()->destroyed,
236 auto applied = VehicleAttributeAdapter::setBase(*pending->vehicle, VehicleAttributeAdapter::healthAttribute,
Selective canonical health and armor adapter for vehicles.
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
const T * getIf() const noexcept
Return a typed pointer, or nullptr when the kind differs.
Definition Value.h:180
Prepared domain mutation used to make settlement application atomic.
Definition Settlement.h:281
Mutable calculation frame visible to policy and custom stage code.
Definition Settlement.h:338
static constexpr std::string_view healthAttribute
Definition VehicleAttributes.h:28
static eve::Result< double > read(VehicleEntity &vehicle, std::string_view attribute)
Read a selected final combat attribute and refresh health projection.
Definition VehicleAttributes.cpp:65
static eve::Result< void > restore(VehicleEntity &vehicle, const eve::attributes::AttributeProjectionSnapshot &snapshot, eve::Revision expectedRevision)
Restore a vehicle attribute snapshot after owner/revision checks.
Definition VehicleAttributes.cpp:130
static eve::Result< void > setBase(VehicleEntity &vehicle, std::string_view attribute, double value)
Set a selected canonical base and refresh the compatibility health fields.
Definition VehicleAttributes.cpp:84
static eve::Result< eve::attributes::AttributeProjectionSnapshot > snapshot(VehicleEntity &vehicle)
Capture health/max_health/armor with owner generation and revision.
Definition VehicleAttributes.cpp:120
static constexpr std::string_view maxHealthAttribute
Definition VehicleAttributes.h:29
static constexpr std::string_view armorAttribute
Definition VehicleAttributes.h:30
eve::Result< void > sourceModifiers(settlement::SettlementContext &context) override
Apply source-side modifiers such as critical or elemental power.
Definition SettlementAdapter.cpp:89
eve::Result< void > armorShield(settlement::SettlementContext &context) override
Apply armor and shield policy, recording absorbed amount.
Definition SettlementAdapter.cpp:130
VehicleSettlementAdapter(VehicleEntity &vehicle, SubjectRef targetRef)
Bind an existing vehicle health component to a stable subject id.
Definition SettlementAdapter.cpp:24
eve::Result< void > targetMitigation(settlement::SettlementContext &context) override
Apply target mitigation such as resistance or penetration rules.
Definition SettlementAdapter.cpp:123
eve::Result< void > validate(settlement::SettlementContext &context) override
Validate request and target-owned state without mutating it.
Definition SettlementAdapter.cpp:62
eve::Result< settlement::PreparedApply > prepareApply(const settlement::SettlementContext &context) override
Build an atomic candidate mutation without publishing it.
Definition SettlementAdapter.cpp:204
eve::Result< void > clamp(settlement::SettlementContext &context) override
Configure policy-specific amount bounds for the generic clamp.
Definition SettlementAdapter.cpp:186
@ InvalidArgument
@ Unsupported
@ InvariantViolation
@ Conflict
@ Pending
@ Applied
Transaction-safe snapshot of selected attributes and their modifiers.
Definition AttributeProjection.h:40
Vehicle health/armor policy adapter for the common settlement pipeline.