use crate::query::{ play_animations, play_directional_animations, play_directional_override_animation, play_override_animation, play_simple_animation, sync_child_animation, }; use bevy::prelude::*; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, SystemSet)] pub enum AnimationSystems { TickAnimations, SyncAnimations, } #[derive(Copy, Clone, Debug, PartialEq, Eq, Ord, PartialOrd, Event)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] pub struct AnimationCompleted { pub entity: Entity, pub user_data: u128, } pub struct AnimationSystemsPlugin; impl Plugin for AnimationSystemsPlugin { fn build(&self, app: &mut App) { app.add_event::<AnimationCompleted>(); app.configure_sets( PostUpdate, (AnimationSystems::TickAnimations.before(AnimationSystems::SyncAnimations),), ); app.add_systems( PostUpdate, ( play_animations, play_override_animation, play_directional_animations, play_directional_override_animation, play_simple_animation, ) .in_set(AnimationSystems::TickAnimations), ) .add_systems( PostUpdate, sync_child_animation.in_set(AnimationSystems::SyncAnimations), ); } }