载入中...
搜索中...
未找到
AttributeSet.cpp
浏览该文件的文档.
34eve::Result<ParsedAttributeOperation> parseAttributeOperation(std::string_view operation, double value) {
59void AttributeOperationRegistry::registerOperation(const std::string& policyId, Function function) {
63void AttributeOperationRegistry::unregisterOperation(const std::string& policyId) { operations_.erase(policyId); }
69double AttributeOperationRegistry::apply(const std::string& policyId, double current, double value) const {
78void AttributeOperationRegistry::unregisterOp(const std::string& policyId) { unregisterOperation(policyId); }
80AttributeModifier::AttributeModifier(ModifierId modifierId, SourceId sourceId, std::string_view operationName,
104double computeAttributeValue(const AttributeValue& attribute, const AttributeOperationRegistry* customOperations) {
115 case AttributeOperation::MultiplicativePercent: multiplicativePercent *= 1.0 + modifier.value; break;
152 eve::cap::addListener<eve::IStateMutation>(static_cast<eve::IStateMutation*>(worldAdapter_.get()));
157 eve::cap::removeListener<eve::IStateQuery>(static_cast<eve::IStateQuery*>(worldAdapter_.get()));
158 eve::cap::removeListener<eve::IStateMutation>(static_cast<eve::IStateMutation*>(worldAdapter_.get()));
162AttributeSet::AttributeSet(std::string subject) : subject_(std::move(subject)) { publishWorldAdapter(); }
270 return eve::Result<ModifierId>::failure(invalidArgument("attribute modifier value must be finite", "value"));
292 return eve::Result<ModifierId>::success(modifierId, eve::Status::success(eve::StatusCode::Applied));
295bool AttributeSet::addModifier(const std::string& id, const std::string& attribute, const std::string& source,
300 AttributeModifier modifier{id, attribute, source, parsed.value().operation, parsed.value().value, priority};
306 if (id.empty()) return eve::Result<void>::failure(invalidArgument("modifier id must not be empty", "id"));
319 eve::Diagnostic::error(eve::DiagnosticCode::NotFound, "attribute modifier was not found", "id")));
322eve::Result<void> AttributeSet::removeModifier(const AttributeId& attribute, const ModifierId& id) {
324 return eve::Result<void>::failure(invalidArgument("attribute id must not be empty", "attribute"));
325 if (id.empty()) return eve::Result<void>::failure(invalidArgument("modifier id must not be empty", "id"));
330 eve::Diagnostic::error(eve::DiagnosticCode::NotFound, "attribute modifier was not found", "id")));
333 std::find_if(modifiers.begin(), modifiers.end(), [&](const auto& modifier) { return modifier.id == id; });
337 eve::Diagnostic::error(eve::DiagnosticCode::NotFound, "attribute modifier was not found", "id")));
344eve::Result<int> AttributeSet::removeBySource(const SourceId& source, const AttributeId& attribute) {
345 if (source.empty()) return eve::Result<int>::failure(invalidArgument("source id must not be empty", "source"));
Consumer-owned query and mutation contracts for authoritative world state.
AttributeSet implementation of the common world-state contracts.
A structured explanation of a failed, degraded, or noteworthy result.
Definition Diagnostic.h:94
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
void ignore(std::string_view reason={}) const noexcept
Explicitly discard this result after documenting the reason.
Definition Result.h:537
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
Registry for explicitly named custom attribute policies.
Definition AttributeSet.h:67
bool has(const std::string &policyId) const
Return whether a policy is registered.
Definition AttributeSet.cpp:65
void registerOp(const std::string &policyId, Function function)
Compatibility spelling for RPG's former custom-op facade.
Definition AttributeSet.cpp:74
double apply(const std::string &policyId, double current, double value) const
Apply a policy, returning current unchanged when it is absent.
Definition AttributeSet.cpp:69
void unregisterOperation(const std::string &policyId)
Remove a named policy.
Definition AttributeSet.cpp:63
std::function< double(double current, double value)> Function
Definition AttributeSet.h:69
void unregisterOp(const std::string &policyId)
Compatibility spelling for RPG's former custom-op facade.
Definition AttributeSet.cpp:78
void registerOperation(const std::string &policyId, Function function)
Register or replace a named policy; calls execute on the caller thread.
Definition AttributeSet.cpp:59
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
std::string attributeAt(int index) const
Return an attribute id in deterministic lexical order, or an empty string.
Definition AttributeSet.cpp:401
int attributeCount() const
Number of named attribute values, including modifier-only values.
Definition AttributeSet.cpp:399
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
void invalidate(const AttributeId &attribute)
Mark one attribute dirty after an external policy or restore change.
Definition AttributeSet.cpp:363
AttributeSet & operator=(const AttributeSet &other)
Copy a set while rebuilding its internal borrowed enumeration view.
Definition AttributeSet.cpp:174
const std::string & subject() const
Stable game-defined id of the entity or object owning this set.
Definition AttributeSet.cpp:209
AttributeSet(std::string subject={})
Construct a set associated with an optional stable subject id.
Definition AttributeSet.cpp:162
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
eve::Result< int > removeBySource(const SourceId &source, const AttributeId &attribute={})
Remove source modifiers with a structured result containing the count.
Definition AttributeSet.cpp:344
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
All-or-nothing mutation boundary owned by the consumer.
Definition StateAccess.h:107
Read-only world-state boundary owned by consumers such as Dialogue.
Definition StateAccess.h:79
Definition AttributeProjection.cpp:9
double computeAttributeValue(const AttributeValue &attribute, const AttributeOperationRegistry *customOperations)
Compute one attribute using the canonical operation order.
Definition AttributeSet.cpp:104
AttributeOperation
Built-in calculation operation for an attribute modifier.
Definition AttributeSet.h:25
@ MultiplicativePercent
@ AdditivePercent
const char * attributeOperationName(AttributeOperation operation) noexcept
Stable spelling of a built-in attribute operation. @ownership The returned string is a borrowed,...
Definition AttributeSet.cpp:21
eve::Result< ParsedAttributeOperation > parseAttributeOperation(std::string_view operation, double value)
Parse a built-in operation spelling used by existing data and APIs.
Definition AttributeSet.cpp:34
@ InvalidArgument
@ NotFound
@ NotFound
@ NoOp
@ Applied
Definition Container.h:602
One canonical runtime modifier applied to one named attribute.
Definition AttributeSet.h:96
AttributeOperation operation
Definition AttributeSet.h:100
Runtime value and modifiers for exactly one attribute.
Definition AttributeSet.h:140
std::vector< AttributeModifier > modifiers
Definition AttributeSet.h:142
Parsed legacy operation and its normalized value.
Definition AttributeSet.h:54
AttributeOperation operation
Definition AttributeSet.h:55