Skip to main content

AnimationMixer

Struct AnimationMixer 

Source
pub struct AnimationMixer {
    pub time: f32,
    pub time_scale: f32,
    pub enabled: bool,
    /* private fields */
}
Expand description

Manages playback and blending of multiple animation actions.

The mixer drives time advancement for all active actions, accumulates sampled animation data into per-node blend buffers, and applies the final blended result to scene nodes once per frame.

§Rest Pose & State Restoration

The mixer tracks which nodes were animated in the previous frame. When a node loses all animation influence (e.g. an action is stopped), it is automatically restored to its rest pose.

§Blending

When multiple actions are active simultaneously, their contributions are combined using weight-based accumulation. If the total accumulated weight for a property is less than 1.0, the rest pose value fills the remainder.

§Events

Animation events fired during the frame are collected and can be consumed via drain_events.

Fields§

§time: f32

Global mixer time in seconds.

§time_scale: f32

Global time scale multiplier applied to all actions.

§enabled: bool

Implementations§

Source§

impl AnimationMixer

Source

pub fn new() -> AnimationMixer

Source

pub fn set_rig(&mut self, rig: Rig)

Sets the logical skeleton used for bone-index → node-handle lookup.

Source

pub fn rig(&self) -> &Rig

Returns a read-only reference to the mixer’s rig.

Source

pub fn list_animations(&self) -> Vec<String>

Returns a list of all registered animation clip names.

Source

pub fn add_action(&mut self, action: AnimationAction) -> ActionHandle

Registers an action and returns its handle.

Source

pub fn get_action(&self, name: &str) -> Option<&AnimationAction>

Read-only access to an action by clip name.

Source

pub fn get_action_by_handle( &self, handle: ActionHandle, ) -> Option<&AnimationAction>

Read-only access to an action by handle.

Source

pub fn action(&mut self, name: &str) -> Option<ActionControl<'_>>

Returns a chainable control wrapper for the named action.

Source

pub fn any_action(&mut self) -> Option<ActionControl<'_>>

Returns a control wrapper for the first registered action.

Source

pub fn get_control(&mut self, handle: ActionHandle) -> Option<ActionControl<'_>>

Returns a control wrapper for an existing handle.

Source

pub fn get_control_by_name(&mut self, name: &str) -> Option<ActionControl<'_>>

Source

pub fn play(&mut self, name: &str)

Plays the named animation, adding it to the active set.

Source

pub fn stop(&mut self, name: &str)

Stops the named animation and removes it from the active set.

Source

pub fn stop_all(&mut self)

Stops all active animations.

Source

pub fn drain_events(&mut self) -> Vec<FiredEvent>

Drains all events fired during the most recent update.

Source

pub fn events(&self) -> &[FiredEvent]

Returns a read-only slice of events fired during the most recent update.

Source

pub fn update(&mut self, dt: f32, target: &mut dyn AnimationTarget)

Advances all active actions and applies blended results to the target.

This is the core per-frame entry point. The update proceeds in four phases:

  1. Time advancement: Each active action’s time is advanced. Animation events that fall within the [t_prev, t_curr] window are collected.
  2. Sampling & accumulation: Active actions sample their tracks and accumulate weighted results into the blend buffer. Track-to-node mapping uses crate::binding::ClipBinding + Rig for O(1) lookup.
  3. Application: Blended values are mixed with the rest pose and written to scene nodes.
  4. Restoration: Nodes that were animated last frame but received no contributions this frame are reset to their rest pose.

Trait Implementations§

Source§

impl Default for AnimationMixer

Source§

fn default() -> AnimationMixer

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Downcast<T> for T

Source§

fn downcast(&self) -> &T

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<R, P> ReadPrimitive<R> for P
where R: Read + ReadEndian<P>, P: Default,

Source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
Source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
Source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,