载入中...
搜索中...
未找到
AnimLayerMixer.cpp
浏览该文件的文档.
28 eve::DiagnosticCode::InvalidArgument, "animation additive reference must be \"bind\" or \"identity\""));
42void AnimBoneMask::setAll(float weight) { std::fill(weights_.begin(), weights_.end(), clampf(weight, 0.f, 1.f)); }
95 eve::DiagnosticCode::InvalidArgument, std::string("animation mixer ") + role + " skeleton mismatch"));
98 eve::DiagnosticCode::Conflict, std::string("animation mixer ") + role + " is already attached"));
108 if (source == baseSource_) return eve::Result<void>::success(eve::Status::success(eve::StatusCode::NoOp));
111 eve::DiagnosticCode::InvalidArgument, "animation mixer cannot attach itself as a pose source"));
114 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "animation mixer base skeleton mismatch"));
118 eve::Diagnostic::error(eve::DiagnosticCode::Conflict, "animation mixer base is already a layer"));
150AnimPlayer* AnimLayerMixer::getBasePlayer() const { return dynamic_cast<AnimPlayer*>(baseSource_); }
152eve::Result<int> AnimLayerMixer::addPoseLayer(const std::string& name, IAnimPoseSource* source, AnimBoneMask* mask,
156 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "animation mixer layer name is empty"));
159 eve::Diagnostic::error(eve::DiagnosticCode::Conflict, "animation mixer layer name already exists"));
162 eve::DiagnosticCode::InvalidArgument, "animation mixer layer mode must be \"override\" or \"additive\""));
169 layers_.push_back({name, source, mask, 1.f, mode == "additive", true, AnimAdditiveReference::BindPose});
173int AnimLayerMixer::addLayer(const std::string& name, AnimPlayer* player, AnimBoneMask* mask, const std::string& mode) {
192int AnimLayerMixer::addStateMachineLayer(const std::string& name, AnimStateMachine* stateMachine, AnimBoneMask* mask,
216 std::find_if(layers_.begin(), layers_.end(), [&](const Layer& layer) { return layer.name == name; });
236eve::Result<void> AnimLayerMixer::setLayerAdditiveReference(const std::string& name, const std::string& reference) {
243 eve::DiagnosticCode::InvalidArgument, "animation mixer additive reference requires an additive layer"));
250bool AnimLayerMixer::setLayerAdditiveReferenceCompat(const std::string& name, const std::string& reference) {
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
Per-bone weights used by override and additive animation layers.
Definition AnimLayerMixer.h:20
bool setBoneWeight(int boneIndex, float weight)
Set one bone's clamped weight.
Definition AnimLayerMixer.cpp:44
bool setBoneAndChildren(const std::string &boneName, float weight)
Set a bone and all descendants to the same clamped weight.
Definition AnimLayerMixer.cpp:54
bool setBoneWeightByName(const std::string &boneName, float weight)
Set a named bone's clamped weight.
Definition AnimLayerMixer.cpp:50
float getBoneWeight(int boneIndex) const
Return one bone's weight, or zero for an invalid index.
Definition AnimLayerMixer.cpp:67
int getBoneCount() const
Return the number of bones represented by this mask.
Definition AnimLayerMixer.h:36
AnimBoneMask(AnimSkeleton *skeleton)
Create a zero-weight mask for a skeleton; the skeleton is not owned.
Definition AnimLayerMixer.cpp:37
Composable runtime pose graph supporting clips, blends, additive layers, per-bone masks,...
Definition AnimGraph.h:26
std::string getLayerMode(const std::string &name) const
Return "override" / "additive", or empty for unknown names.
Definition AnimLayerMixer.cpp:274
AnimLayerMixer(AnimSkeleton *skeleton)
Create an empty mixer for a skeleton; the skeleton is not owned.
Definition AnimLayerMixer.cpp:72
bool setBaseStateMachine(AnimStateMachine *stateMachine)
Compatibility facade over setBaseSource(AnimStateMachine*).
Definition AnimLayerMixer.cpp:141
void update(float dt)
Legacy seconds facade; explicitly forwards to advance().
Definition AnimLayerMixer.cpp:363
int addStateMachineLayer(const std::string &name, AnimStateMachine *stateMachine, AnimBoneMask *mask, const std::string &mode)
Compatibility facade over addPoseLayer(AnimStateMachine*).
Definition AnimLayerMixer.cpp:192
std::string getEventName(int index) const override
Returns the event name.
Definition AnimLayerMixer.cpp:377
int addLayer(const std::string &name, AnimPlayer *player, AnimBoneMask *mask, const std::string &mode)
Compatibility facade over addPoseLayer(AnimPlayer*).
Definition AnimLayerMixer.cpp:173
bool getLayerEnabled(const std::string &name) const
Return whether a layer is enabled; false for unknown names.
Definition AnimLayerMixer.cpp:269
eve::Result< void > setBaseSource(IAnimPoseSource *source)
Set the borrowed base pose source evaluated before layers.
Definition AnimLayerMixer.cpp:102
bool setBaseGraph(AnimGraph *graph)
Compatibility facade over setBaseSource(AnimGraph*).
Definition AnimLayerMixer.cpp:132
eve::Result< void > advance(const eve::SimulationStep &step) override
Advance all referenced sources (including disabled layers) and compose.
Definition AnimLayerMixer.cpp:333
eve::Result< void > setLayerAdditiveReference(const std::string &name, const std::string &reference)
Set additive reference for an additive layer: "bind" or "identity".
Definition AnimLayerMixer.cpp:236
eve::Result< int > addPoseLayer(const std::string &name, IAnimPoseSource *source, AnimBoneMask *mask, const std::string &mode)
Append a pose layer. mode is "override" or "additive". A null mask affects every bone....
Definition AnimLayerMixer.cpp:152
std::string getLayerAdditiveReference(const std::string &name) const
Return "bind" / "identity", or empty for unknown names.
Definition AnimLayerMixer.cpp:280
bool setLayerAdditiveReferenceCompat(const std::string &name, const std::string &reference)
Compatibility facade over setLayerAdditiveReference.
Definition AnimLayerMixer.cpp:250
int addGraphLayer(const std::string &name, AnimGraph *graph, AnimBoneMask *mask, const std::string &mode)
Compatibility facade over addPoseLayer(AnimGraph*).
Definition AnimLayerMixer.cpp:182
std::string getLayerName(int index) const
Return a layer name, or empty for an invalid index.
Definition AnimLayerMixer.cpp:259
bool setLayerEnabled(const std::string &name, bool enabled)
Enable or disable a layer without removing it. Disabled layers still advance.
Definition AnimLayerMixer.cpp:229
bool setBasePlayer(AnimPlayer *player)
Compatibility facade over setBaseSource(AnimPlayer*).
Definition AnimLayerMixer.cpp:123
std::string getEventPayload(int index) const override
Returns the event payload.
Definition AnimLayerMixer.cpp:382
std::string getEventLayer(int index) const
Source layer name; "base" identifies the base source.
Definition AnimLayerMixer.cpp:372
AnimPlayer * getBasePlayer() const
Return the base when it is an AnimPlayer; otherwise null. @ownership Borrowed @lifetime Valid while t...
Definition AnimLayerMixer.cpp:150
float getLayerWeight(const std::string &name) const
Return a layer weight, or zero for an unknown name.
Definition AnimLayerMixer.cpp:264
bool setLayerWeight(const std::string &name, float weight)
Set a layer's global clamped weight.
Definition AnimLayerMixer.cpp:222
Single-clip (or cross-fading) 3D animation player. Script type: AnimPlayer.
Definition AnimPlayer.h:30
void computeWorld(const AnimSkeleton *skeleton)
Compute world transforms from local pose + skeleton hierarchy. World values readable via getWorld* af...
Definition AnimPose.cpp:203
3D bone hierarchy + bind-pose local TRS for skeletal animation. Independent of ik::Skeleton3D (FABRIK...
Definition AnimSkeleton.h:16
void applyBindPose(class AnimPose *pose) const
Fill pose locals with bind pose.
Definition AnimSkeleton.cpp:132
Clip-driven animation state machine with float/bool/trigger parameters and cross-fade transitions....
Definition AnimStateMachine.h:23
Borrowed pose provider consumed by AnimLayerMixer.
Definition AnimPoseSource.h:20
virtual eve::SimulationTick currentTick() const noexcept=0
Last scheduler tick consumed by advance.
virtual bool hasCurrentTick() const noexcept=0
Whether advance has consumed at least one checked step.
virtual AnimPose * getPose()=0
Most recent local pose; valid after a successful advance. @ownership Borrowed @lifetime Valid while t...
virtual eve::Result< void > advance(const eve::SimulationStep &step)=0
Consume one scheduler step and refresh getPose().
eve::Result< eve::SimulationStep > legacyStep(float seconds, bool hasLastTick, eve::SimulationTick lastTick, const char *owner)
Convert a legacy seconds call to the next local scheduler step.
Definition AnimationTime.h:34
eve::Result< float > secondsForStep(const eve::SimulationStep &step, bool hasLastTick, eve::SimulationTick lastTick, const char *owner)
Validate a scheduler step before an animation object mutates state.
Definition AnimationTime.h:13
Definition Animation.cpp:58
TransformTRS blendTRS(const TransformTRS &a, const TransformTRS &b, float t)
Blend trs.
Definition AnimMath.h:79
AnimAdditiveReference
Reference pose used when converting an additive sample into a delta.
Definition AnimPoseSource.h:60
void applyAdditiveTRS(TransformTRS &base, const TransformTRS &sample, const TransformTRS &reference, float weight)
Apply an additive sample onto base using reference.
Definition AnimMath.h:114
@ InvalidArgument
@ NotFound
@ Conflict
@ NoOp
@ Applied