use bevy::asset::AssetApp;
use bevy::pbr::MaterialPlugin;
use bevy::prelude::*;
use bevy::sprite_render::Material2dPlugin;
pub mod asset;
pub mod components;
pub mod material;
pub mod mesh;
pub mod systems;
pub use asset::{
SpineAtlasAsset, SpineAtlasLoader, SpineAtlasLoaderError, SpineSkeletonAsset,
SpineSkeletonJsonLoader, SpineSkeletonJsonLoaderError, SpineSkeletonJsonLoaderSettings,
SpineSkeletonLoader, SpineSkeletonLoaderError, SpineSkeletonLoaderSettings,
};
pub use components::{
PendingAnimation, SpineRender2d, SpineRender3d, SpineSkeleton, SpineSkeletonState,
};
pub use material::{SpineBlendMode, SpineColors, SpineMaterial, SpineMaterial3d, SpineMaterialKey};
pub use mesh::{build_spine_meshes, build_spine_meshes_3d};
pub use systems::{
SpineInitialized, SpineKeyframeEvent, SpineSet, SpineStateEvent, drain_spine_events,
ensure_spine_render_marker, initialize_spine_skeletons, tick_spine_skeletons,
};
#[derive(Default)]
pub struct SpinePlugin;
impl Plugin for SpinePlugin {
fn build(&self, app: &mut App) {
material::spine_material::register_spine_shader(app);
material::spine_material_3d::register_spine_shader_3d(app);
app.init_asset::<SpineAtlasAsset>()
.init_asset::<SpineSkeletonAsset>()
.init_asset_loader::<SpineAtlasLoader>()
.init_asset_loader::<SpineSkeletonLoader>()
.init_asset_loader::<SpineSkeletonJsonLoader>()
.add_plugins(Material2dPlugin::<SpineMaterial>::default())
.add_plugins(MaterialPlugin::<SpineMaterial3d>::default())
.add_message::<SpineStateEvent>()
.add_message::<SpineKeyframeEvent>()
.configure_sets(
Update,
(
SpineSet::EnsureMarkers,
SpineSet::Init,
SpineSet::Tick,
SpineSet::BuildMeshes,
SpineSet::Events,
)
.chain(),
)
.add_systems(
Update,
(
ensure_spine_render_marker.in_set(SpineSet::EnsureMarkers),
initialize_spine_skeletons.in_set(SpineSet::Init),
tick_spine_skeletons.in_set(SpineSet::Tick),
build_spine_meshes.in_set(SpineSet::BuildMeshes),
build_spine_meshes_3d.in_set(SpineSet::BuildMeshes),
drain_spine_events.in_set(SpineSet::Events),
),
);
}
}