use bevy::prelude::*;
use bevy::reflect::TypePath;
use crate::anim::{AsepriteAnimation, refresh_animations, update_animations};
use crate::info::AsepriteInfo;
use crate::loader::AsepriteLoader;
pub struct AsepritePlugin;
impl Plugin for AsepritePlugin {
fn build(&self, app: &mut bevy::prelude::App) {
app.init_asset::<AsepriteAsset>()
.register_asset_loader(AsepriteLoader)
.add_systems(Update, update_animations.in_set(AsepriteSystems::Animate))
.add_systems(Update, refresh_animations.in_set(AsepriteSystems::Refresh));
}
}
#[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)]
pub enum AsepriteSystems {
Animate,
Refresh,
}
#[derive(Debug, TypePath, Asset)]
pub struct AsepriteAsset {
pub info: AsepriteInfo,
pub atlas_layout: Handle<TextureAtlasLayout>,
pub atlas_texture: Handle<Image>,
}
#[derive(Component, Default, Clone)]
#[require(Sprite)]
pub struct Aseprite {
pub asset: Handle<AsepriteAsset>,
pub anim: AsepriteAnimation,
}