use crate::prelude::*;
use bevy::prelude::*;
#[derive(Component, Default, Reflect, Clone, Debug)]
#[reflect(Component, Default, Debug)]
#[require(Visibility, Transform, Sprite)]
pub struct TiledAnimation {
pub start: usize,
pub end: usize,
pub timer: Timer,
}
pub(crate) fn plugin(app: &mut App) {
app.register_type::<TiledAnimation>();
app.add_systems(
Update,
animate_sprite.in_set(TiledUpdateSystems::AnimateSprite),
);
}
fn animate_sprite(time: Res<Time>, mut sprite_query: Query<(&mut TiledAnimation, &mut Sprite)>) {
for (mut animation, mut sprite) in sprite_query.iter_mut() {
animation.timer.tick(time.delta());
if animation.timer.just_finished() {
if let Some(atlas) = &mut sprite.texture_atlas {
atlas.index += 1;
if atlas.index >= animation.end {
atlas.index = animation.start;
}
}
}
}
}