载入中...
搜索中...
未找到
EffectDefinitionRuntime.cpp
浏览该文件的文档.
14eve::Result<eve::definition::DefinitionHandle> currentHandle(eve::definitions::DefinitionRegistry& registry,
36 if (*integer < std::numeric_limits<int>::min() || *integer > std::numeric_limits<int>::max()) return false;
46 if (!integer || *integer < 0 || static_cast<std::uint64_t>(*integer) > std::numeric_limits<std::uint32_t>::max())
66bool readEnum(const eve::Value::Object& object, const char* name, const char* const* names, const Enum* values,
81bool readOptionalEnum(const eve::Value::Object& object, const char* name, const char* const* names, const Enum* values,
96 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "effect definition payload must be an object",
105 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "effect stackKey must be a string",
133 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "effect stackCount must be positive",
145 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "effect stackCount exceeds maxStacks",
148 constexpr StackMode stackModeValues[] = {StackMode::Replace, StackMode::NewInstance, StackMode::Reuse,
150 if (!readOptionalEnum(*object, "stackMode", stackModeNames, stackModeValues, std::size(stackModeNames),
153 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "effect stackMode is invalid", "stackMode", {},
156 constexpr StackCountPolicy stackCountPolicyValues[] = {StackCountPolicy::Keep, StackCountPolicy::Increment,
158 if (!readOptionalEnum(*object, "stackCountPolicy", stackCountPolicyNames, stackCountPolicyValues,
161 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "effect stackCountPolicy is invalid",
164 constexpr DurationPolicy durationPolicyValues[] = {DurationPolicy::Keep, DurationPolicy::Replace,
169 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "effect durationPolicy is invalid",
172 constexpr MagnitudePolicy magnitudePolicyValues[] = {MagnitudePolicy::Keep, MagnitudePolicy::Replace,
177 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "effect magnitudePolicy is invalid",
180 constexpr OverflowPolicy overflowPolicyValues[] = {OverflowPolicy::Reject, OverflowPolicy::Clamp,
185 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "effect overflowPolicy is invalid",
194 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "effect tags must be an array", "tags", {},
211 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "effect payload must be an object",
219 eve::DiagnosticCode::InvalidArgument, "effect payload member could not be stored", "payload." + key,
236eve::Result<EffectDefinitionRuntime> EffectDefinitionRuntime::create(eve::definitions::DefinitionRegistry& registry,
242 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "effect definition reference is invalid", {},
246 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "effect subject must not be empty", "subject",
263const EffectRuntimeState& EffectDefinitionRuntime::state() const noexcept { return runtime_.state(); }
302eve::Result<eve::definition::ReloadOutcome> EffectDefinitionRuntime::reload(eve::definition::ReloadPolicy policy) {
305 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "effect definition registry is not bound",
312 auto rebuild = [defaultState](const EffectRuntimeState& oldState, const eve::definition::InstanceIdentity&,
316 rebuilt.remaining = rebuilt.duration > 0.0 ? std::min(oldState.remaining, rebuilt.duration) : -1.0;
318 rebuilt.maxStacks == 0 ? oldState.stackCount : std::min(oldState.stackCount, rebuilt.maxStacks);
Strongly typed effect definition/runtime adapter.
Owning, renderer-independent dynamic values.
const LogicalId & id() const noexcept
Return the stable logical definition identity.
Definition ResourceRef.h:97
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
std::string_view name() const noexcept
Returns the name component as a view into this object.
Definition Identity.cpp:63
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
static Result< Value > fromJson(std::string_view json)
Parse one strict JSON value into an owning Value.
Definition Value.cpp:57
static eve::Result< RuntimeInstance > create(eve::PersistentId instanceId, eve::DefinitionRef definition, eve::Generation definitionGeneration, State state, bool active=true)
Construct a runtime instance after validating its identity.
Definition DefinitionRuntime.h:321
Deterministic registry of topic-neutral, versioned JSON definitions.
Definition Definitions.h:58
eve::ResultRef< const Definition > resolveHandle(const DefinitionHandle &handle) const
Resolves a generation-qualified handle and reports stale identities.
Definition Definitions.cpp:319
eve::Result< DefinitionHandle > handle(const std::string &type, const std::string &id) const
Returns the current generation-qualified handle through Result.
Definition Definitions.cpp:325
std::string format() const
Formats the ID in lower-case canonical UUID text.
Definition Identity.h:173
static constexpr Id128 fromUuid(const Id128< OtherTag > &value) noexcept
Re-tags an existing UUID at an explicit domain boundary.
Definition Identity.h:136
Binds a typed effect runtime to a generation-qualified definition.
Definition EffectDefinitionRuntime.h:45
eve::Result< eve::definition::ReloadOutcome > reload(eve::definition::ReloadPolicy policy)
Resolve the registry's current generation and execute a policy.
Definition EffectDefinitionRuntime.cpp:302
bool isActive() const noexcept
Return whether the effect is active for reload policy decisions.
Definition EffectDefinitionRuntime.cpp:273
static eve::Result< EffectDefinitionRuntime > create(eve::definitions::DefinitionRegistry ®istry, eve::DefinitionRef definition, std::string subject, std::string source, eve::PersistentId instanceId, eve::definition::ReloadPolicy policy=eve::definition::ReloadPolicy::KeepInstanceValues)
Create a typed effect runtime from a registry definition.
Definition EffectDefinitionRuntime.cpp:236
const eve::definition::InstanceIdentity & identity() const noexcept
Borrow the unified instance identity.
Definition EffectDefinitionRuntime.cpp:259
eve::Result< void > applyTo(EffectInstance *effect) const
Atomically project the typed runtime into an EffectInstance.
Definition EffectDefinitionRuntime.cpp:275
const EffectRuntimeState & state() const noexcept
Borrow the strongly typed effect runtime state.
Definition EffectDefinitionRuntime.cpp:263
void setActive(bool active) noexcept
Mark this effect active/inactive for RejectWhileActive.
Definition EffectDefinitionRuntime.cpp:271
eve::definition::DefinitionHandle definitionHandle() const noexcept
Borrow the current generation-qualified definition handle.
Definition EffectDefinitionRuntime.cpp:267
Definition EffectContainer.cpp:10
StackMode
Determines whether a matching application replaces, reuses, or creates an instance.
Definition EffectTypes.h:31
@ Replace
@ Accumulate
@ NewInstance
OverflowPolicy
Determines what happens when a stack-count limit would be exceeded.
Definition EffectTypes.h:43
@ ReplaceOldest
DurationPolicy
Determines how an application changes an existing remaining duration.
Definition EffectTypes.h:37
StackCountPolicy
Determines how an application changes an existing stack count.
Definition EffectTypes.h:34
@ Increment
MagnitudePolicy
Determines how an application changes an existing magnitude value.
Definition EffectTypes.h:40
bool readString(const eve::Value::Object &object, const char *name, std::string &output)
Definition ArtifactProvider.cpp:20
const EditorValue * field(const EditorValue &value, const char *name)
Definition RoadNetworkEditTarget.cpp:15
@ InvalidArgument
A generation-qualified reference to one definition incarnation.
Definition DefinitionRuntime.h:69
Canonical identity carried by every typed runtime instance.
Definition DefinitionRuntime.h:87
eve::DefinitionRef definition
Definition DefinitionRuntime.h:89
eve::PersistentId instanceId
Definition DefinitionRuntime.h:88
One immutable view of a registered versioned JSON definition.
Definition Definitions.h:31
eve::EffectId identity
UUID-backed identity for persistence/event boundaries; nil in the legacy facade.
Definition EffectTypes.h:147
EffectPolicy policy
Typed application policy projected from the current definition.
Definition EffectTypes.h:145
eve::definition::InstanceIdentity definitionIdentity
Canonical definition link used by the typed definition adapter.
Definition EffectTypes.h:154
eve::definition::ReloadPolicy reloadPolicy
Definition EffectTypes.h:155
Typed mutable lifecycle values for one effect instance.
Definition EffectDefinitionRuntime.h:24
std::vector< std::string > tags
Definition EffectDefinitionRuntime.h:34
std::uint32_t maxStacks
Definition EffectDefinitionRuntime.h:31
std::uint32_t stackCount
Definition EffectDefinitionRuntime.h:30
std::string stackKey
Definition EffectDefinitionRuntime.h:25
EffectPayload payload
Definition EffectDefinitionRuntime.h:33