载入中...
搜索中...
未找到
AttributeProjection.cpp
浏览该文件的文档.
28 Diagnostic::error(DiagnosticCode::StaleHandle, "attribute projection owner is not a live ECS generation", "owner", {}, "attributes.projection"));
35 Diagnostic::error(DiagnosticCode::Conflict, "attribute projection cannot be rebound to another owner", "owner", {}, "attributes.projection"));
51 Diagnostic::error(DiagnosticCode::InvariantViolation, "attribute projection revision overflowed", "revision", {}, "attributes.projection"));
62 Diagnostic::error(DiagnosticCode::InvalidArgument, "attribute projection seed requires finite named bases", "bases", {}, "attributes.projection"));
73 Diagnostic::error(DiagnosticCode::InvalidArgument, "attribute base requires a non-empty finite value", "attribute", {}, "attributes.projection"));
84 Diagnostic::error(DiagnosticCode::InvalidArgument, "attribute delta requires a non-empty finite value", "attribute", {}, "attributes.projection"));
113Result<AttributeProjectionSnapshot> AttributeProjection::snapshot(std::span<const std::string_view> attributes) const {
117 Diagnostic::error(DiagnosticCode::InvalidArgument, "snapshot attribute name is empty", "attributes", {},
134Result<void> AttributeProjection::restore(const AttributeProjectionSnapshot& snapshotValue, Revision expectedRevision) {
137 Diagnostic::error(DiagnosticCode::StaleHandle, "attribute snapshot owner is stale or does not match", "owner", {}, "attributes.projection"));
140 Diagnostic::error(DiagnosticCode::Conflict, "attribute snapshot revision does not match current state", "revision", {}, "attributes.projection"));
147 Diagnostic::error(DiagnosticCode::InvalidArgument, "attribute snapshot contains invalid base data", "bases", {}, "attributes.projection"));
155 if (modifier != nullptr && contains(names, modifier->attribute)) toRemove.push_back(modifier->id);
161 Diagnostic::error(DiagnosticCode::InvariantViolation, "attribute snapshot could not remove candidate modifier", "modifiers", {}, "attributes.projection"));
171 Diagnostic::error(DiagnosticCode::InvalidArgument, "attribute snapshot modifier is outside its allow-list", "modifiers", {}, "attributes.projection"));
175 Diagnostic::error(DiagnosticCode::InvalidArgument, "attribute snapshot contains an invalid modifier", "modifiers", {}, "attributes.projection"));
Owner-aware canonical attribute state shared by gameplay adapters.
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 has(std::string_view attribute) const
Return whether the canonical set contains a base or modifier for the name.
Definition AttributeProjection.cpp:100
Result< void > bindOwner(ecs::EntityHandle owner)
Bind the projection to one live generation-qualified ECS owner.
Definition AttributeProjection.cpp:25
Result< double > getFinal(std::string_view attribute, double fallback=0.0) const
Read a deterministic final value, or the supplied default when absent.
Definition AttributeProjection.cpp:92
Result< AttributeProjectionSnapshot > snapshot(std::span< const std::string_view > attributes) const
Capture only named attributes and their modifiers.
Definition AttributeProjection.cpp:113
Result< void > initialize(std::span< const AttributeSnapshotBase > values)
Seed base values once from an existing domain compatibility field.
Definition AttributeProjection.cpp:56
bool isStale() const noexcept
Return whether the bound owner no longer resolves at its generation.
Definition AttributeProjection.cpp:39
Result< void > modifyBase(std::string_view attribute, double delta)
Add to a canonical base value and advance the projection revision.
Definition AttributeProjection.cpp:81
Result< void > setBase(std::string_view attribute, double value)
Set a canonical base value and advance the projection revision.
Definition AttributeProjection.cpp:70
const ecs::EntityHandle & owner() const noexcept
Return the owner handle used for stale detection.
Definition AttributeProjection.h:64
AttributeProjection(std::string subject={})
Construct an empty projection with an optional stable subject id.
Definition AttributeProjection.cpp:23
Result< ModifierId > addModifier(AttributeModifier modifier)
Add a canonical modifier using the shared source/priority/sequence rules.
Definition AttributeProjection.cpp:104
Generic owning collection of canonical attributes and modifiers.
Definition AttributeSet.h:160
double getFinal(const AttributeId &attribute, double fallback=0.0, const AttributeOperationRegistry *customOperations=nullptr) const
Return the deterministic final value after all modifiers.
Definition AttributeSet.cpp:236
eve::Result< ModifierId > addModifier(AttributeModifier modifier)
Add or replace a canonical modifier and return its stable id.
Definition AttributeSet.cpp:262
void modifyBase(const AttributeId &attribute, double delta)
Add delta to a base value, creating it from zero when absent.
Definition AttributeSet.cpp:219
void setBase(const AttributeId &attribute, double value)
Set or replace a base value. Empty attribute ids are ignored for compatibility.
Definition AttributeSet.cpp:211
const AttributeModifier * modifierAt(int index) const
Return a modifier by deterministic sequence order, or null when out of range.
Definition AttributeSet.cpp:393
double getBase(const AttributeId &attribute, double fallback=0.0) const
Return a base value, or fallback when absent.
Definition AttributeSet.cpp:231
bool has(const AttributeId &attribute) const
Return whether a base value or modifier names the attribute.
Definition AttributeSet.cpp:227
eve::Result< void > removeModifier(const ModifierId &id)
Remove one modifier with a structured result.
Definition AttributeSet.cpp:305
constexpr std::optional< StrongUint64 > incremented() const noexcept
Returns the next value, or empty instead of unsigned wraparound.
Definition StrongUint64.h:30
Definition AttributeProjection.cpp:9
@ InvalidArgument
@ InvariantViolation
@ StaleHandle
@ Conflict
@ NoOp
@ Applied
Definition Container.h:602
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
std::vector< AttributeModifier > modifiers
Definition AttributeProjection.h:44
std::vector< AttributeSnapshotBase > bases
Definition AttributeProjection.h:43
ecs::EntityHandle owner
Definition AttributeProjection.h:41
Revision capturedRevision
Definition AttributeProjection.h:42