载入中...
搜索中...
未找到
AttackVfxRuntime.cpp
浏览该文件的文档.
54 return Result<AttackVfxInstanceState*>::failure(Diagnostic::error(DiagnosticCode::NotFound, std::string("attack VFX handle slot out of range"), std::string("handle")));
57 return Result<AttackVfxInstanceState*>::failure(Diagnostic::error(DiagnosticCode::StaleHandle, std::string("stale attack VFX handle"), std::string("handle")));
68 Result<LogicalId> resolveSkinId(const AttackVfxRecipe& recipe, const AttackVfxRequest& request) const {
71 return Result<LogicalId>::failure(Diagnostic::error(DiagnosticCode::NotFound, std::string("skin override is not registered"), std::string("skinOverride")));
76 return Result<LogicalId>::failure(Diagnostic::error(DiagnosticCode::NotFound, std::string("recipe skinId is not registered"), std::string("skinId")));
148 return Result<void>::failure(Diagnostic::error(DiagnosticCode::NotFound, std::string("recipe missing while starting layers"), std::string("recipeId")));
156 auto started = startOneLayer(slot, phaseIndex, authored, authored.layers[layerIndex], layerIndex, skin,
312 Result<void> exitPhase(Slot& slot, std::size_t phaseIndex, AttackVfxFrame& frame, std::string_view cue,
378 clearImmediately ? std::optional<AttackVfxStopBehavior>(AttackVfxStopBehavior::ClearImmediately)
431 if (capacity == 0) return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, std::string("pool capacity must be > 0"), std::string("capacity")));
434 return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvariantViolation, std::string("cannot resize pool while instances are live"), std::string("capacity")));
461 return Result<void>::failure(Diagnostic::error(DiagnosticCode::Conflict, std::string("cannot replace recipe while instances are live"), std::string("recipeId")));
490Result<AttackVfxHandle> AttackVfxRuntime::play(const LogicalId& recipeId, const AttackVfxRequest& request) {
493 return Result<AttackVfxHandle>::failure(Diagnostic::error(DiagnosticCode::NotFound, std::string("recipe is not registered"), std::string("recipeId")));
513 return Result<AttackVfxHandle>::failure(Diagnostic::error(DiagnosticCode::Failed, std::string("attack VFX pool is full"), std::string("pool")));
557 return Result<AttackVfxFrame>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, std::string("cue must be non-empty"), std::string("cue")));
575 return Result<AttackVfxFrame>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, std::string("dtSeconds must be finite and >= 0"), std::string("dt")));
687 auto finished = impl_->finishInstance(handle.slot, frame, mode == AttackVfxStopMode::Cancel ? "cancel" : "clear",
Pluggable AttackVfx layer backends registered via capability listeners.
Pooled AttackVfx orchestration with optional layer executors.
std::array< std::uint64_t, kPixelChunkSize *kPixelChunkSize > updated
Definition PixelWorld.cpp:53
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
Human-readable, scoped identifier in the form namespace:name.
Definition Identity.h:411
const std::string & format() const noexcept
Returns the canonical namespace:name representation.
Definition Identity.h:436
const Status & status() const noexcept
Inspect the structured operation status.
Definition Result.h:269
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
Result< void > configurePool(std::uint32_t capacity)
Resize the instance pool. Fails when any slot is occupied.
Definition AttackVfxRuntime.cpp:430
Result< void > registerSkin(const AttackVfxSkin &skin)
Validate and store a reusable skin keyed by skin.id.
Definition AttackVfxRuntime.cpp:471
std::optional< AttackVfxInstanceState > inspect(AttackVfxHandle handle) const
Snapshot one live instance; empty when the handle is stale.
Definition AttackVfxRuntime.cpp:693
Result< AttackVfxFrame > stop(AttackVfxHandle handle, AttackVfxStopMode mode)
Stop one instance using the requested teardown mode.
Definition AttackVfxRuntime.cpp:678
Result< void > registerRecipe(const AttackVfxRecipe &recipe)
Validate and store an immutable recipe copy keyed by recipe.id.
Definition AttackVfxRuntime.cpp:455
std::size_t activeCount() const noexcept
Number of occupied slots.
Definition AttackVfxRuntime.cpp:699
Result< AttackVfxHandle > play(const LogicalId &recipeId, const AttackVfxRequest &request)
Spawn one instance from a registered recipe.
Definition AttackVfxRuntime.cpp:490
Result< AttackVfxFrame > signal(AttackVfxHandle handle, std::string_view cue)
Deliver a named cue to one live instance (e.g. "impact", "cancel").
Definition AttackVfxRuntime.cpp:555
std::optional< AttackVfxRecipe > findRecipe(const LogicalId &id) const
Return a copy of a registered recipe when present.
Definition AttackVfxRuntime.cpp:478
std::optional< AttackVfxSkin > findSkin(const LogicalId &id) const
Return a copy of a registered skin when present.
Definition AttackVfxRuntime.cpp:484
Result< AttackVfxFrame > advance(double dtSeconds)
Advance all live instances by injected simulation seconds.
Definition AttackVfxRuntime.cpp:573
Definition MeshVfxPackage.h:10
AttackVfxLayerRole
Which existing presentation backend a layer binds to.
Definition AttackVfxRecipe.h:40
@ Particles
AttackVfxPhaseKind
Attack presentation phase along the cast → hit → linger timeline.
Definition AttackVfxRecipe.h:30
@ ClearImmediately
@ StopEmitting
@ StopEmitting
@ InvalidArgument
@ NotFound
@ InvariantViolation
@ Failed
@ StaleHandle
@ Conflict
@ NotFound
@ NoOp
@ Unsupported
@ Rejected
Definition Container.h:602
Observable frame events emitted by advance/signal/stop.
Definition AttackVfxRuntime.h:79
@ LayerStarted
@ InstanceStopped
@ CueConsumed
@ LayerSkipped
Owning result of one atomic orchestration step.
Definition AttackVfxRuntime.h:101
std::vector< AttackVfxHandle > advanced
Definition AttackVfxRuntime.h:102
std::vector< AttackVfxFrameEvent > events
Definition AttackVfxRuntime.h:104
std::vector< AttackVfxHandle > stopped
Definition AttackVfxRuntime.h:103
Generation-qualified reference to one pooled attack VFX instance.
Definition AttackVfxRuntime.h:27
Owning observable state for one live instance.
Definition AttackVfxRuntime.h:68
Opaque executor-owned layer instance identity.
Definition AttackVfxLayerExecutor.h:22
Borrowed start context for one layer inside an entering phase.
Definition AttackVfxLayerExecutor.h:37
AttackVfxHandle instance
Definition AttackVfxLayerExecutor.h:38
One presentation layer slot inside a phase.
Definition AttackVfxRecipe.h:106
Live observation of one phase inside an instance.
Definition AttackVfxRuntime.h:58
One timeline phase that owns zero or more layers.
Definition AttackVfxRecipe.h:124
std::vector< AttackVfxLayer > layers
Definition AttackVfxRecipe.h:130
Versioned attack VFX composition recipe.
Definition AttackVfxRecipe.h:189
std::optional< LogicalId > skinId
Definition AttackVfxRecipe.h:195
Result< void > validate() const
Validate id, phases, optional skin, and budget invariants.
Definition AttackVfxRecipe.cpp:542
std::optional< AttackVfxSkin > skin
Definition AttackVfxRecipe.h:196
std::size_t phaseIndex
Definition AttackVfxRuntime.cpp:33
AttackVfxStopBehavior stopBehavior
Definition AttackVfxRuntime.cpp:30
std::size_t layerIndex
Definition AttackVfxRuntime.cpp:31
AttackVfxLayerRole role
Definition AttackVfxRuntime.cpp:28
AttackVfxPhaseKind phase
Definition AttackVfxRuntime.cpp:32
AttackVfxLayerHandle handle
Definition AttackVfxRuntime.cpp:29
std::vector< LiveLayer > layers
Definition AttackVfxRuntime.cpp:37
std::vector< LivePhase > phaseLayers
Definition AttackVfxRuntime.cpp:43
std::optional< AttackVfxInstanceState > state
Definition AttackVfxRuntime.cpp:42
std::uint32_t generation
Definition AttackVfxRuntime.cpp:41
std::vector< LiveLayer > draining
Definition AttackVfxRuntime.cpp:44
Result< AttackVfxInstanceState * > resolve(AttackVfxHandle handle)
Definition AttackVfxRuntime.cpp:52
Result< void > stopPhaseLayers(Slot &slot, std::size_t phaseIndex, std::optional< AttackVfxStopBehavior > behaviorOverride=std::nullopt)
Definition AttackVfxRuntime.cpp:194
void armTimedPhases(AttackVfxInstanceState &state)
Definition AttackVfxRuntime.cpp:329
Result< void > clearDraining(Slot &slot, AttackVfxStopBehavior behavior)
Definition AttackVfxRuntime.cpp:212
Result< void > startPhaseLayers(Slot &slot, std::size_t phaseIndex, AttackVfxFrame &frame)
Definition AttackVfxRuntime.cpp:144
Result< void > exitPhase(Slot &slot, std::size_t phaseIndex, AttackVfxFrame &frame, std::string_view cue, std::optional< AttackVfxStopBehavior > behaviorOverride=std::nullopt)
Definition AttackVfxRuntime.cpp:312
Result< LogicalId > resolveSkinId(const AttackVfxRecipe &recipe, const AttackVfxRequest &request) const
Definition AttackVfxRuntime.cpp:68
const AttackVfxSkin * skinFor(const AttackVfxInstanceState &state) const
Definition AttackVfxRuntime.cpp:82
std::unordered_map< std::string, AttackVfxRecipe > recipes
Definition AttackVfxRuntime.cpp:48
void stopAllOccupied()
Definition AttackVfxRuntime.cpp:410
std::vector< Slot > slots
Definition AttackVfxRuntime.cpp:47
Result< void > stopLiveLayer(LiveLayer &live, AttackVfxStopBehavior behavior)
Definition AttackVfxRuntime.cpp:182
std::unordered_map< std::string, AttackVfxSkin > skins
Definition AttackVfxRuntime.cpp:49
const AttackVfxInstanceState * peek(AttackVfxHandle handle) const noexcept
Definition AttackVfxRuntime.cpp:61
Result< void > startOneLayer(Slot &slot, std::size_t phaseIndex, const AttackVfxPhase &authored, const AttackVfxLayer &layer, std::size_t layerIndex, const AttackVfxSkin *skin, AttackVfxFrame &frame)
Definition AttackVfxRuntime.cpp:103
Result< void > applyCue(Slot &slot, std::string_view cue, AttackVfxFrame &frame)
Definition AttackVfxRuntime.cpp:341
AttackVfxLayerStartRequest makeLayerRequest(const AttackVfxInstanceState &state, AttackVfxPhaseKind phase, std::size_t phaseIndex, std::size_t layerIndex, const AttackVfxLayer *layer, const AttackVfxSkin *skin) const
Definition AttackVfxRuntime.cpp:88
std::uint64_t tickSerial
Definition AttackVfxRuntime.cpp:50
Result< void > finishInstance(std::size_t slotIndex, AttackVfxFrame &frame, std::string_view cue, bool clearImmediately)
Definition AttackVfxRuntime.cpp:372
Result< void > enterPhase(Slot &slot, std::size_t phaseIndex, AttackVfxFrame &frame)
Definition AttackVfxRuntime.cpp:297
Result< void > updateDraining(Slot &slot, double dtSeconds)
Definition AttackVfxRuntime.cpp:254
Result< void > updateLiveLayer(Slot &slot, LiveLayer &live, double dtSeconds)
Definition AttackVfxRuntime.cpp:224
Result< void > updatePhaseLayers(Slot &slot, std::size_t phaseIndex, double dtSeconds)
Definition AttackVfxRuntime.cpp:244
Reusable elemental / style skin applied at play time.
Definition AttackVfxRecipe.h:152
Result< void > validate() const
Validate id, palette range, and finite profile values.
Definition AttackVfxRecipe.cpp:519
std::string statusOverlayUri
Definition AttackVfxRecipe.h:158