use bevy::{
ecs::schedule::ScheduleLabel,
prelude::{App, World},
};
#[derive(ScheduleLabel, Clone, Debug, PartialEq, Eq, Hash)]
pub struct Init;
#[derive(ScheduleLabel, Clone, Debug, PartialEq, Eq, Hash)]
pub struct Update;
#[derive(ScheduleLabel, Clone, Debug, PartialEq, Eq, Hash)]
pub struct Draw;
pub(crate) fn plugin(app: &mut App) {
app.init_schedule(Init);
app.init_schedule(Update);
app.init_schedule(Draw);
}
pub(crate) fn run_schedule(label: impl ScheduleLabel + Clone) -> impl FnMut(&mut World) {
move |world: &mut World| {
if let Err(e) = world.try_run_schedule(label.clone()) {
bevy::log::error!("Cannot run schedule {:?} because {e}", &label);
} else {
let frame_count = world.resource::<bevy::diagnostic::FrameCount>();
bevy::log::trace!("Ran schedule {:?} in frame {}", &label, &frame_count.0);
}
}
}