载入中...
搜索中...
未找到
Effects.cpp
浏览该文件的文档.
24eve::Result<EffectDefinition> effectDefinitionFromBinding(const std::string& type, int priority, float duration,
30 eve::DiagnosticCode::InvalidArgument, "unknown effect stack policy", "policy", {}, "effects.squirrel"));
63 std::invoke(std::forward<Release>(release), ref).ignore("rollback failed owned effects allocation");
67 auto result = eve::script::projectStatusResult(vm, eve::Status::success(eve::StatusCode::Applied));
108 "EffectPayload", std::function<EffectPayload*()>([]() -> EffectPayload* { return nullptr; }), false);
115 payload.addFunc("setJson", [vm](EffectPayload* value, const std::string& key, const std::string& json) {
137 table.addClass<Effect>("Effect", std::function<Effect*()>([]() -> Effect* { return nullptr; }), false);
139 effect.addFunc("getSubject", [](Effect* value) { return value ? value->subject : std::string{}; });
141 effect.addFunc("getSource", [](Effect* value) { return value ? value->source : std::string{}; });
142 effect.addFunc("getStackKey", [](Effect* value) { return value ? value->stackKey : std::string{}; });
144 effect.addFunc("getDuration", [](Effect* value) { return value ? static_cast<float>(value->duration) : 0.0f; });
145 effect.addFunc("getRemaining", [](Effect* value) { return value ? static_cast<float>(value->remaining) : 0.0f; });
146 effect.addFunc("getMagnitude", [](Effect* value) { return value ? static_cast<float>(value->magnitude) : 0.0f; });
147 effect.addFunc("getStackCount", [](Effect* value) { return value ? static_cast<int>(value->stackCount) : 0; });
148 effect.addFunc("getPayload", [](Effect* value) -> EffectPayload* { return value ? &value->payload : nullptr; });
163 effect.addFunc("hasTag", [](Effect* value, const std::string& tag) { return value && value->hasTag(tag); });
172 event.addFunc("getKind", [](EffectEvent* value) { return value ? eventKindName(value->kind) : std::string{}; });
173 event.addFunc("getEffectId", [](EffectEvent* value) { return value ? value->effectId : std::string{}; });
174 event.addFunc("getSubject", [](EffectEvent* value) { return value ? value->subject : std::string{}; });
175 event.addFunc("getType", [](EffectEvent* value) { return value ? value->type : std::string{}; });
176 event.addFunc("getSource", [](EffectEvent* value) { return value ? value->source : std::string{}; });
177 event.addFunc("getReason", [](EffectEvent* value) { return value ? value->reason : std::string{}; });
180 "EffectContainer", std::function<EffectContainer*()>([]() -> EffectContainer* { return nullptr; }), false);
181 container.addFunc("apply", [vm](EffectContainer* value, const std::string& subject, const std::string& type,
191 auto definition = effectDefinitionFromBinding(type, priority, duration, stackKey, policyNameValue);
206 [vm](EffectContainer* value, const std::string& subject, const std::string& type, const std::string& source,
207 int priority, float duration, const std::string& stackKey, const std::string& policyNameValue) {
211 eve::Result<eve::EffectId>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument,
215 auto definition = effectDefinitionFromBinding(type, priority, duration, stackKey, policyNameValue);
225 return eve::script::projectResult(vm, value->applyCanonical(input, subject, source), [](eve::EffectId id) {
229 container.addFunc("remove", [vm](EffectContainer* value, const std::string& id, const std::string& reason) {
241 eve::Result<EffectUpdateSummary>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument,
257 container.addFunc("subjectAt", [](EffectContainer* value, const std::string& subject, int index) -> Effect* {
275 std::function<ScriptEffectContainer*()>([]() -> ScriptEffectContainer* { return nullptr; }), false);
280 "handle", [](ScriptEffectContainer* value) { return value ? value->reference.packed() : std::uint64_t{0}; });
295 "apply", [vm](ScriptEffectContainer* value, const std::string& subject, const std::string& type,
313 auto definition = effectDefinitionFromBinding(type, priority, duration, stackKey, policyNameValue);
330 eve::DiagnosticCode::InvalidArgument, "owned effect container proxy must not be null", "container",
338 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "owned effect container handle is stale",
349 ownedContainer.addFunc("find", [](ScriptEffectContainer* value, const std::string& id) -> Effect* {
350 auto containerView = value ? Effects::resolve(value->reference) : eve::script::Borrowed<EffectContainer>();
354 auto containerView = value ? Effects::resolve(value->reference) : eve::script::Borrowed<EffectContainer>();
358 auto containerView = value ? Effects::resolve(value->reference) : eve::script::Borrowed<EffectContainer>();
361 ownedContainer.addFunc("subjectCount", [](ScriptEffectContainer* value, const std::string& subject) {
362 auto containerView = value ? Effects::resolve(value->reference) : eve::script::Borrowed<EffectContainer>();
366 "subjectAt", [](ScriptEffectContainer* value, const std::string& subject, int index) -> Effect* {
367 auto containerView = value ? Effects::resolve(value->reference) : eve::script::Borrowed<EffectContainer>();
371 "taggedCount", [](ScriptEffectContainer* value, const std::string& subject, const std::string& tag) {
372 auto containerView = value ? Effects::resolve(value->reference) : eve::script::Borrowed<EffectContainer>();
377 [](ScriptEffectContainer* value, const std::string& subject, const std::string& tag, int index) -> Effect* {
378 auto containerView = value ? Effects::resolve(value->reference) : eve::script::Borrowed<EffectContainer>();
382 auto containerView = value ? Effects::resolve(value->reference) : eve::script::Borrowed<EffectContainer>();
386 auto containerView = value ? Effects::resolve(value->reference) : eve::script::Borrowed<EffectContainer>();
390 auto containerView = value ? Effects::resolve(value->reference) : eve::script::Borrowed<EffectContainer>();
394 "remove", [vm](ScriptEffectContainer* value, const std::string& id, const std::string& reason) {
409 "applyCanonical", [vm](ScriptEffectContainer* value, const std::string& subject, const std::string& type,
427 auto definition = effectDefinitionFromBinding(type, priority, duration, stackKey, policyNameValue);
431 eve::Result<eve::EffectId>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument,
449 vm, Effects::newContainer(), [](EffectContainerHandleRef ref) { return Effects::release(ref); });
Public effects umbrella and script module facade.
The single Squirrel projection for common Result, Status and Value.
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 success(StatusCode code=StatusCode::Ok)
Construct a successful status with an explicit non-error outcome.
Definition Status.h:81
void clearEvents()
Clears retained events without resetting their sequence counter.
Definition EffectContainer.cpp:623
int taggedCount(const std::string &subject, const std::string &tag) const
Returns active subject instances containing a tag.
Definition EffectContainer.cpp:591
int effectCount() const
Returns active instance count in deterministic creation order.
Definition EffectContainer.cpp:558
int subjectCount(const std::string &subject) const
Returns active instance count for a subject.
Definition EffectContainer.cpp:572
void clear()
Removes all active instances and retained events, resetting id sequences.
Definition EffectContainer.cpp:529
Deterministic JSON-compatible payload carried by a definition or instance.
Definition EffectTypes.h:63
std::string toJson() const
Serializes all fields as a deterministic JSON object.
Definition EffectTypes.cpp:51
void setBool(const std::string &key, bool value)
Sets a JSON boolean field.
Definition EffectTypes.cpp:19
void setString(const std::string &key, const std::string &value)
Sets a JSON string field.
Definition EffectTypes.cpp:10
std::string getJson(const std::string &key) const
Serializes a field's typed Value to JSON text, or returns empty when absent/invalid.
Definition EffectTypes.cpp:43
static bool isStale(EffectContainerHandleRef reference) noexcept
Reports whether a container reference is invalid for the current module.
Definition Effects.cpp:97
static eve::Result< void > release(EffectContainerHandleRef reference)
Releases a container owned by the Effects module.
Definition Effects.cpp:88
static eve::Result< EffectContainerHandleRef > newContainer()
Allocates a container and returns its generation-qualified ownership reference.
Definition Effects.cpp:77
static eve::script::Borrowed< EffectContainer > resolve(EffectContainerHandleRef reference) noexcept
Resolves a live container as a non-owning observation.
Definition Effects.cpp:82
Non-owning C++ observation with no implicit lifetime extension.
Definition RuntimeRegistry.h:42
Definition EffectContainer.cpp:10
@ Replace
@ Refresh
bool parsePolicy(const std::string &name, StackPolicy &policy)
Parses a lowercase legacy stack policy name.
Definition EffectTypes.cpp:108
@ Replace
@ NewInstance
std::string eventKindName(EffectEventKind kind)
Returns the stable lowercase name of an event kind.
Definition EffectTypes.cpp:120
eve::script::RuntimeHandleRef< EffectContainerHandleTag > EffectContainerHandleRef
Generation-qualified reference to a module-owned effect container.
Definition Effects.h:21
EffectInstance Effect
Backward-compatible name for the runtime instance type.
Definition EffectTypes.h:170
@ Borrowed
ssq::Table projectStatusResult(HSQUIRRELVM vm, const Status &status)
Project a checked native status that carries no payload.
Definition SquirrelBinding.cpp:454
const char * objectSemanticName(ObjectSemantic semantic) noexcept
Returns the stable name used by diagnostics and documentation.
Definition SquirrelOwnership.h:52
ssq::Table projectResult(HSQUIRRELVM vm, Result< void > &&result)
Consume and project a void native Result using the common schema.
Definition SquirrelBinding.cpp:470
@ InvalidArgument
@ Failed
@ StaleHandle
@ Applied
@ Rejected
Definition Container.h:602
std::string tagAt(int index) const
Returns a tag by lexical index, or an empty string.
Definition EffectTypes.cpp:94
Handle plus owner-lifetime epoch for a non-ECS registry object.
Definition RuntimeRegistry.h:91