pub struct ClipPlayerPlugin {
pub clip: AnimationClip,
pub bind_pose: Pose,
pub speed: f32,
pub looping: bool,
pub playhead: f32,
pub playing: bool,
}Expand description
Runtime plugin that samples an AnimationClip each step and writes the
resulting Pose into RuntimeResources for super::SkeletonPlugin to
consume.
Runs at phase::ANIMATE, which is before the POST_SIM phase where
SkeletonPlugin reads the pose.
The plugin starts each frame from a clone of bind_pose, then overlays the
clip’s animated channels. Joints not touched by the clip keep their bind
values; channels not touched by the clip on an animated joint keep their
bind values too. This means a clip can be authored to drive only the
channels it cares about and the bind pose supplies everything else.
§Example
let bind_pose = /* Pose with joint 1 placed at its bind world transform */;
let clip = AnimationClip { duration: 2.0, tracks: vec![/* ... */] };
let player = ClipPlayerPlugin::new(clip, bind_pose);
let runtime = ViewportRuntime::new()
.with_plugin(player)
.with_plugin(skeleton_plugin);Fields§
§clip: AnimationClipClip whose tracks are sampled and applied each step.
bind_pose: PosePer-frame baseline. Cloned each step before the clip is applied.
speed: f32Playback speed multiplier. 1.0 = real time. Negative values play in
reverse.
looping: boolWhether playback wraps at clip.duration. Non-looping playback clamps
the playhead at the endpoints.
playhead: f32Current play position in seconds.
playing: boolWhen false, the playhead does not advance. Manual seeks via playhead
still take effect.
Implementations§
Source§impl ClipPlayerPlugin
impl ClipPlayerPlugin
Sourcepub fn new(clip: AnimationClip, bind_pose: Pose) -> Self
pub fn new(clip: AnimationClip, bind_pose: Pose) -> Self
Create a player that loops clip over bind_pose at real-time speed.
Sourcepub fn with_speed(self, speed: f32) -> Self
pub fn with_speed(self, speed: f32) -> Self
Set the playback speed multiplier.
Sourcepub fn with_looping(self, looping: bool) -> Self
pub fn with_looping(self, looping: bool) -> Self
Set whether playback loops at clip.duration.
Trait Implementations§
Source§impl RuntimePlugin for ClipPlayerPlugin
impl RuntimePlugin for ClipPlayerPlugin
Source§fn priority(&self) -> i32
fn priority(&self) -> i32
phase as base values and offset within a band if needed.Source§fn step(&mut self, ctx: &mut RuntimeStepContext<'_>)
fn step(&mut self, ctx: &mut RuntimeStepContext<'_>)
Source§fn type_name(&self) -> &'static str
fn type_name(&self) -> &'static str
RuntimeStats. Defaults to the concrete type
name; override to disambiguate when several plugins share a type or to
give a friendlier label.Source§fn submit(&mut self, _ctx: &RuntimeStepContext<'_>)
fn submit(&mut self, _ctx: &RuntimeStepContext<'_>)
Source§fn collect(&mut self, _ctx: &mut RuntimeStepContext<'_>)
fn collect(&mut self, _ctx: &mut RuntimeStepContext<'_>)
Source§fn on_event(&mut self, _event: &RuntimeEvent, _ctx: &mut RuntimeStepContext<'_>)
fn on_event(&mut self, _event: &RuntimeEvent, _ctx: &mut RuntimeStepContext<'_>)
Auto Trait Implementations§
impl Freeze for ClipPlayerPlugin
impl RefUnwindSafe for ClipPlayerPlugin
impl Send for ClipPlayerPlugin
impl Sync for ClipPlayerPlugin
impl Unpin for ClipPlayerPlugin
impl UnsafeUnpin for ClipPlayerPlugin
impl UnwindSafe for ClipPlayerPlugin
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&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> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.