pub struct SpriteSheetAnimation<T>where
T: SpriteSheetTexture,{ /* private fields */ }
Expand description
Sprite sheet animation is an animation based on key frames, where each key frame is packed into single image. Usually, all key frames have the same size, but this is not mandatory.
Implementations§
Source§impl<T> SpriteSheetAnimation<T>where
T: SpriteSheetTexture,
impl<T> SpriteSheetAnimation<T>where
T: SpriteSheetTexture,
pub const FRAMES_CONTAINER: &'static str = "frames_container"
pub const CURRENT_FRAME: &'static str = "current_frame"
pub const SPEED: &'static str = "speed"
pub const STATUS: &'static str = "status"
pub const LOOPING: &'static str = "looping"
pub const SIGNALS: &'static str = "signals"
pub const TEXTURE: &'static str = "texture"
pub const MAX_EVENT_CAPACITY: &'static str = "max_event_capacity"
Source§impl<T> SpriteSheetAnimation<T>where
T: SpriteSheetTexture,
impl<T> SpriteSheetAnimation<T>where
T: SpriteSheetTexture,
Sourcepub fn new() -> SpriteSheetAnimation<T>
pub fn new() -> SpriteSheetAnimation<T>
Creates new empty animation.
Sourcepub fn new_from_image_parameters(
params: ImageParameters,
) -> SpriteSheetAnimation<T>
pub fn new_from_image_parameters( params: ImageParameters, ) -> SpriteSheetAnimation<T>
Creates sprite sheet animation using given image parameters. The method is used to create animation for particular range in an image. For example, you have the following sprite sheet:
128 pixels wide
_________________
| 0 | 1 | 2 | 3 |
|___|___|___|___|
| 4 | 5 | 6 | 7 | 128 pixels tall
|___|___|___|___|
| 8 | 9 |10 |11 |
|___|___|___|___|
Let’s assume that there could be three animations:
- 0..3 - run
- 4..6 - idle
- 7..11 - attack
and you want to extract all three animations as separate animations. In this case you could do something like this:
#[derive(PartialEq, Clone, Reflect, Visit, Debug)]
struct MyTexture {}
fn extract_animations() {
let run = SpriteSheetAnimation::<MyTexture>::new_from_image_parameters(ImageParameters {
width: 128,
height: 128,
frame_width: 32,
frame_height: 32,
first_frame: 0,
last_frame: 4,
column_major: false,
});
let idle = SpriteSheetAnimation::<MyTexture>::new_from_image_parameters(ImageParameters {
width: 128,
height: 128,
frame_width: 32,
frame_height: 32,
first_frame: 4,
last_frame: 7,
column_major: false,
});
let attack = SpriteSheetAnimation::<MyTexture>::new_from_image_parameters(ImageParameters {
width: 128,
height: 128,
frame_width: 32,
frame_height: 32,
first_frame: 7,
last_frame: 12,
column_major: false,
});
}
If frames if your sprite sheet are ordered in column-major fashion (when you count them from top-left corner to bottom-left corner and then
starting from new column, etc.), you should set column_major
parameter to true.
Sourcepub fn with_container(
container: SpriteSheetFramesContainer<T>,
) -> SpriteSheetAnimation<T>
pub fn with_container( container: SpriteSheetFramesContainer<T>, ) -> SpriteSheetAnimation<T>
Creates new animation with given frames container.
Sourcepub fn set_texture(&mut self, texture: Option<T>) -> Option<T>
pub fn set_texture(&mut self, texture: Option<T>) -> Option<T>
Sets new texture for the animation.
Sourcepub fn get_max_event_capacity(&self) -> usize
pub fn get_max_event_capacity(&self) -> usize
Gets the maximum capacity of events.
Sourcepub fn set_max_event_capacity(&mut self, max_event_capacity: usize)
pub fn set_max_event_capacity(&mut self, max_event_capacity: usize)
Sets the maximum capacity of events.
Sourcepub fn frames(&self) -> &SpriteSheetFramesContainer<T>
pub fn frames(&self) -> &SpriteSheetFramesContainer<T>
Returns a shared reference to inner frames container.
Sourcepub fn frames_mut(&mut self) -> &mut SpriteSheetFramesContainer<T>
pub fn frames_mut(&mut self) -> &mut SpriteSheetFramesContainer<T>
Returns a mutable reference to inner frames container.
Sourcepub fn add_frame(
&mut self,
frame: Matrix<u32, Const<2>, Const<1>, ArrayStorage<u32, 2, 1>>,
)
pub fn add_frame( &mut self, frame: Matrix<u32, Const<2>, Const<1>, ArrayStorage<u32, 2, 1>>, )
Adds new frame.
Sourcepub fn remove_frame(
&mut self,
index: usize,
) -> Option<Matrix<u32, Const<2>, Const<1>, ArrayStorage<u32, 2, 1>>>
pub fn remove_frame( &mut self, index: usize, ) -> Option<Matrix<u32, Const<2>, Const<1>, ArrayStorage<u32, 2, 1>>>
Remove a frame at given index.
Sourcepub fn current_frame(&self) -> usize
pub fn current_frame(&self) -> usize
Returns current frame index.
Sourcepub fn frame_uv_rect(&self, i: usize) -> Option<Rect<f32>>
pub fn frame_uv_rect(&self, i: usize) -> Option<Rect<f32>>
Tries to fetch UV rectangle at given frame. Returns None
if animation is empty.
Sourcepub fn current_frame_uv_rect(&self) -> Option<Rect<f32>>
pub fn current_frame_uv_rect(&self) -> Option<Rect<f32>>
Tries to fetch UV rectangle at current frame. Returns None
if animation is empty.
Sourcepub fn set_current_frame(&mut self, current_frame: usize)
pub fn set_current_frame(&mut self, current_frame: usize)
Sets current frame of the animation. Input value will be clamped to [0; frame_count] range.
Sourcepub fn is_looping(&self) -> bool
pub fn is_looping(&self) -> bool
Returns true if the animation is looping, false - otherwise.
Sourcepub fn set_looping(&mut self, looping: bool)
pub fn set_looping(&mut self, looping: bool)
Continue animation from beginning (or end in case of negative speed) when ended or stop.
Sourcepub fn set_speed(&mut self, speed: f32)
pub fn set_speed(&mut self, speed: f32)
Sets playback speed in frames per second. The speed can be negative, in this case animation will play in reverse.
Sourcepub fn rewind_to_beginning(&mut self)
pub fn rewind_to_beginning(&mut self)
Sets current frame index to the first frame in the animation.
Sourcepub fn rewind_to_end(&mut self)
pub fn rewind_to_end(&mut self)
Sets current frame index to the last frame in the animation.
Sourcepub fn is_playing(&self) -> bool
pub fn is_playing(&self) -> bool
Returns true
if the animation is playing, false
- otherwise.
Sourcepub fn is_stopped(&self) -> bool
pub fn is_stopped(&self) -> bool
Returns true
if the animation is stopped, false
- otherwise.
Sourcepub fn add_signal(&mut self, signal: Signal)
pub fn add_signal(&mut self, signal: Signal)
Adds new animation signal to the animation.
Sourcepub fn remove_signal(&mut self, id: u64)
pub fn remove_signal(&mut self, id: u64)
Removes animation signal by given id.
Trait Implementations§
Source§impl<T> Clone for SpriteSheetAnimation<T>where
T: Clone + SpriteSheetTexture,
impl<T> Clone for SpriteSheetAnimation<T>where
T: Clone + SpriteSheetTexture,
Source§fn clone(&self) -> SpriteSheetAnimation<T>
fn clone(&self) -> SpriteSheetAnimation<T>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<T> Debug for SpriteSheetAnimation<T>where
T: Debug + SpriteSheetTexture,
impl<T> Debug for SpriteSheetAnimation<T>where
T: Debug + SpriteSheetTexture,
Source§impl<T> Default for SpriteSheetAnimation<T>where
T: SpriteSheetTexture,
impl<T> Default for SpriteSheetAnimation<T>where
T: SpriteSheetTexture,
Source§fn default() -> SpriteSheetAnimation<T>
fn default() -> SpriteSheetAnimation<T>
Source§impl<T> PartialEq for SpriteSheetAnimation<T>where
T: SpriteSheetTexture,
impl<T> PartialEq for SpriteSheetAnimation<T>where
T: SpriteSheetTexture,
Source§impl<T> Reflect for SpriteSheetAnimation<T>
impl<T> Reflect for SpriteSheetAnimation<T>
fn source_path() -> &'static str
fn type_name(&self) -> &'static str
fn doc(&self) -> &'static str
Source§fn assembly_name(&self) -> &'static str
fn assembly_name(&self) -> &'static str
#[derive(Reflect)]
) to ensure that this method will return correct assembly
name. In other words - there’s no guarantee, that any implementation other than proc-macro
will return a correct name of the assembly. Alternatively, you can use env!("CARGO_PKG_NAME")
as an implementation.Source§fn type_assembly_name() -> &'static str
fn type_assembly_name() -> &'static str
#[derive(Reflect)]
) to ensure that this method will return correct assembly
name. In other words - there’s no guarantee, that any implementation other than proc-macro
will return a correct name of the assembly. Alternatively, you can use env!("CARGO_PKG_NAME")
as an implementation.fn fields_info(&self, func: &mut dyn FnMut(&[FieldInfo<'_, '_>]))
fn into_any(self: Box<SpriteSheetAnimation<T>>) -> Box<dyn Any>
fn set( &mut self, value: Box<dyn Reflect>, ) -> Result<Box<dyn Reflect>, Box<dyn Reflect>>
Source§fn set_field(
&mut self,
name: &str,
value: Box<dyn Reflect>,
func: &mut dyn FnMut(Result<Box<dyn Reflect>, Box<dyn Reflect>>),
)
fn set_field( &mut self, name: &str, value: Box<dyn Reflect>, func: &mut dyn FnMut(Result<Box<dyn Reflect>, Box<dyn Reflect>>), )
#[reflect(setter = ..)]
or falls back to
Reflect::field_mut
fn as_any(&self, func: &mut dyn FnMut(&(dyn Any + 'static)))
fn as_any_mut(&mut self, func: &mut dyn FnMut(&mut (dyn Any + 'static)))
fn as_reflect(&self, func: &mut dyn FnMut(&(dyn Reflect + 'static)))
fn as_reflect_mut(&mut self, func: &mut dyn FnMut(&mut (dyn Reflect + 'static)))
fn fields(&self, func: &mut dyn FnMut(&[&(dyn Reflect + 'static)]))
fn fields_mut( &mut self, func: &mut dyn FnMut(&mut [&mut (dyn Reflect + 'static)]), )
fn field( &self, name: &str, func: &mut dyn FnMut(Option<&(dyn Reflect + 'static)>), )
fn field_mut( &mut self, name: &str, func: &mut dyn FnMut(Option<&mut (dyn Reflect + 'static)>), )
fn as_array(&self, func: &mut dyn FnMut(Option<&(dyn ReflectArray + 'static)>))
fn as_array_mut( &mut self, func: &mut dyn FnMut(Option<&mut (dyn ReflectArray + 'static)>), )
fn as_list(&self, func: &mut dyn FnMut(Option<&(dyn ReflectList + 'static)>))
fn as_list_mut( &mut self, func: &mut dyn FnMut(Option<&mut (dyn ReflectList + 'static)>), )
fn as_inheritable_variable( &self, func: &mut dyn FnMut(Option<&(dyn ReflectInheritableVariable + 'static)>), )
fn as_inheritable_variable_mut( &mut self, func: &mut dyn FnMut(Option<&mut (dyn ReflectInheritableVariable + 'static)>), )
fn as_hash_map( &self, func: &mut dyn FnMut(Option<&(dyn ReflectHashMap + 'static)>), )
fn as_hash_map_mut( &mut self, func: &mut dyn FnMut(Option<&mut (dyn ReflectHashMap + 'static)>), )
Source§impl<T> TypeUuidProvider for SpriteSheetAnimation<T>where
T: SpriteSheetTexture,
impl<T> TypeUuidProvider for SpriteSheetAnimation<T>where
T: SpriteSheetTexture,
Source§impl<T> Visit for SpriteSheetAnimation<T>
impl<T> Visit for SpriteSheetAnimation<T>
Source§fn visit(&mut self, name: &str, visitor: &mut Visitor) -> Result<(), VisitError>
fn visit(&mut self, name: &str, visitor: &mut Visitor) -> Result<(), VisitError>
Auto Trait Implementations§
impl<T> Freeze for SpriteSheetAnimation<T>where
T: Freeze,
impl<T> RefUnwindSafe for SpriteSheetAnimation<T>where
T: RefUnwindSafe,
impl<T> Send for SpriteSheetAnimation<T>where
T: Send,
impl<T> Sync for SpriteSheetAnimation<T>where
T: Sync,
impl<T> Unpin for SpriteSheetAnimation<T>where
T: Unpin,
impl<T> UnwindSafe for SpriteSheetAnimation<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> AsyncTaskResult for T
impl<T> AsyncTaskResult for T
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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>
. 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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
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> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Any
. Could be used to downcast a trait object
to a particular type.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Any
. Could be used to downcast a trait object
to a particular type.fn into_any(self: Box<T>) -> Box<dyn Any>
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> FieldValue for Twhere
T: 'static,
impl<T> FieldValue for Twhere
T: 'static,
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> MessageData for T
impl<T> MessageData for T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian()
.Source§impl<T> ReflectBase for Twhere
T: Reflect,
impl<T> ReflectBase for Twhere
T: Reflect,
fn as_any_raw(&self) -> &(dyn Any + 'static)
fn as_any_raw_mut(&mut self) -> &mut (dyn Any + 'static)
Source§impl<T> ResolvePath for Twhere
T: Reflect,
impl<T> ResolvePath for Twhere
T: Reflect,
fn resolve_path<'p>( &self, path: &'p str, func: &mut dyn FnMut(Result<&(dyn Reflect + 'static), ReflectPathError<'p>>), )
fn resolve_path_mut<'p>( &mut self, path: &'p str, func: &mut dyn FnMut(Result<&mut (dyn Reflect + 'static), ReflectPathError<'p>>), )
fn get_resolve_path<'p, T>(
&self,
path: &'p str,
func: &mut dyn FnMut(Result<&T, ReflectPathError<'p>>),
)where
T: Reflect,
fn get_resolve_path_mut<'p, T>(
&mut self,
path: &'p str,
func: &mut dyn FnMut(Result<&mut T, ReflectPathError<'p>>),
)where
T: Reflect,
Source§impl<T> ScriptMessagePayload for T
impl<T> ScriptMessagePayload for T
Source§fn as_any_ref(&self) -> &(dyn Any + 'static)
fn as_any_ref(&self) -> &(dyn Any + 'static)
self
as &dyn Any
Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
self
as &dyn Any
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.