载入中...
搜索中...
未找到
WeaponAttributes.cpp
浏览该文件的文档.
16 return name == WeaponAttributeAdapter::manaAttribute || name == WeaponAttributeAdapter::maxManaAttribute ||
17 name == WeaponAttributeAdapter::staminaAttribute || name == WeaponAttributeAdapter::maxStaminaAttribute;
25bool isManaOrStamina(ResourceKind kind) noexcept { return kind == ResourceKind::Mana || kind == ResourceKind::Stamina; }
42 eve::Status::failure(bound.code(), eve::Diagnostic::error(eve::DiagnosticCode::Failed, "weapon attribute owner could not be bound", "owner", {}, "weapon.attributes")));
57 eve::Status::failure(initialized.code(), eve::Diagnostic::error(eve::DiagnosticCode::Failed, "weapon attribute state could not be initialized", "attributes", {}, "weapon.attributes")));
65 eve::Status::failure(ready.code(), eve::Diagnostic::error(eve::DiagnosticCode::Failed, "weapon attributes are not available", "attributes", {}, "weapon.attributes")));
67 if (!isManaOrStamina(resource.kind)) return eve::Result<void>::success(eve::Status::success(eve::StatusCode::NoOp));
70 eve::Status::failure(current.code(), eve::Diagnostic::error(eve::DiagnosticCode::Failed, "weapon resource attribute could not be read", "resource", {}, "weapon.attributes")));
73 eve::Status::failure(maximum.code(), eve::Diagnostic::error(eve::DiagnosticCode::Failed, "weapon maximum resource attribute could not be read", "resource", {}, "weapon.attributes")));
74 if (!std::isfinite(current.value()) || !std::isfinite(maximum.value()) || current.value() < 0.0 ||
78 eve::Diagnostic::error(eve::DiagnosticCode::InvariantViolation, "weapon mana/stamina attributes are outside validated bounds", "resource", {}, "weapon.attributes"));
84eve::Result<double> WeaponAttributeAdapter::read(WeaponEntity& weapon, std::string_view attribute) {
87 eve::DiagnosticCode::Unsupported, "weapon attribute is outside the mana/stamina projection", "attribute",
93 eve::Diagnostic::error(eve::DiagnosticCode::Failed, "weapon compatibility projection failed", "resource",
98 value.code(), eve::Diagnostic::error(eve::DiagnosticCode::Failed, "weapon attribute read failed",
103eve::Result<void> WeaponAttributeAdapter::setBase(WeaponEntity& weapon, std::string_view attribute, double value) {
106 eve::Diagnostic::error(eve::DiagnosticCode::Unsupported, "weapon attribute is outside the mana/stamina projection", "attribute", {}, "weapon.attributes"));
109 eve::Status::failure(ready.code(), eve::Diagnostic::error(eve::DiagnosticCode::Failed, "weapon attributes are not available", "attributes", {}, "weapon.attributes")));
118 eve::Status::failure(ready.code(), eve::Diagnostic::error(eve::DiagnosticCode::Failed, "weapon attributes are not available", "attributes", {}, "weapon.attributes")));
122 eve::Diagnostic::error(eve::DiagnosticCode::Unsupported, "weapon trigger resource is not mana or stamina", "resource.kind", {}, "weapon.attributes"));
126 eve::Status::failure(current.code(), eve::Diagnostic::error(eve::DiagnosticCode::Failed, "weapon trigger resource could not be read", "resource", {}, "weapon.attributes")));
129 eve::Diagnostic::error(eve::DiagnosticCode::Conflict, "weapon does not have enough mana or stamina", "resource", {}, "weapon.attributes"));
130 if (resource.infinite) return eve::Result<void>::success(eve::Status::success(eve::StatusCode::NoOp));
139 eve::attributes::AttributeOperation operation, double value, eve::attributes::ModifierPriority priority) {
142 eve::DiagnosticCode::InvalidArgument, "weapon modifier requires a selected attribute and non-empty source",
147 ready.code(), eve::Diagnostic::error(eve::DiagnosticCode::Failed, "weapon attributes are not available",
156 eve::Diagnostic::error(eve::DiagnosticCode::Failed, "weapon compatibility projection failed", "resource",
161eve::Result<eve::attributes::AttributeProjectionSnapshot> WeaponAttributeAdapter::snapshot(WeaponEntity& weapon) {
165 ready.code(), eve::Diagnostic::error(eve::DiagnosticCode::Failed, "weapon attributes are not available",
176 eve::Status::failure(ready.code(), eve::Diagnostic::error(eve::DiagnosticCode::Failed, "weapon attributes are not available", "attributes", {}, "weapon.attributes")));
Selective canonical mana/stamina adapter for weapons.
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 failure(StatusCode code, Diagnostic diagnostic)
Construct a failed status with one diagnostic.
Definition Status.h:84
static Status success(StatusCode code=StatusCode::Ok)
Construct a successful status with an explicit non-error outcome.
Definition Status.h:81
static eve::Result< void > setBase(WeaponEntity &weapon, std::string_view attribute, double value)
Set a selected canonical base and refresh Resource compatibility fields.
Definition WeaponAttributes.cpp:103
static eve::Result< void > project(WeaponEntity &weapon)
Project canonical Mana/Stamina values into the legacy Resource component.
Definition WeaponAttributes.cpp:62
static eve::Result< double > read(WeaponEntity &weapon, std::string_view attribute)
Read a selected final mana/stamina attribute.
Definition WeaponAttributes.cpp:84
static eve::Result< eve::attributes::AttributeProjectionSnapshot > snapshot(WeaponEntity &weapon)
Capture selected resource attributes with owner generation and revision.
Definition WeaponAttributes.cpp:161
static constexpr std::string_view manaAttribute
Definition WeaponAttributes.h:28
static eve::Result< eve::attributes::ModifierId > addModifier(WeaponEntity &weapon, std::string id, std::string_view attribute, std::string source, eve::attributes::AttributeOperation operation, double value, eve::attributes::ModifierPriority priority=eve::attributes::priority::runtime)
Add a modifier using the shared operation/priority/sequence contract.
Definition WeaponAttributes.cpp:137
static constexpr std::string_view staminaAttribute
Definition WeaponAttributes.h:30
static constexpr std::string_view maxManaAttribute
Definition WeaponAttributes.h:29
static eve::Result< void > ensure(WeaponEntity &weapon)
Bind and seed the selected resource attributes exactly once.
Definition WeaponAttributes.cpp:39
static constexpr std::string_view maxStaminaAttribute
Definition WeaponAttributes.h:31
static eve::Result< void > consumeTriggerResource(WeaponEntity &weapon)
Consume the current weapon's canonical Mana/Stamina trigger cost.
Definition WeaponAttributes.cpp:115
static eve::Result< void > restore(WeaponEntity &weapon, const eve::attributes::AttributeProjectionSnapshot &snapshot, eve::Revision expectedRevision)
Restore selected resource attributes after owner/revision checks.
Definition WeaponAttributes.cpp:171
AttributeOperation
Built-in calculation operation for an attribute modifier.
Definition AttributeSet.h:25
载具模块入口(eve.Vehicle):定义注册 / 实体工厂 / RTS 命令 / 帧调度。 设计文档:docs/dev/通用载具系统设计.md
Definition RTSArchetype.h:10
@ Stamina
@ InvalidArgument
@ Unsupported
@ InvariantViolation
@ Failed
@ Conflict
@ NoOp
@ Applied
One canonical runtime modifier applied to one named attribute.
Definition AttributeSet.h:96
Transaction-safe snapshot of selected attributes and their modifiers.
Definition AttributeProjection.h:40
One base value captured by an attribute projection snapshot.
Definition AttributeProjection.h:28