use bevy::{
app::MainScheduleOrder,
ecs::schedule::{ScheduleBuildSettings, ScheduleLabel},
prelude::*,
};
pub struct GameSchedulesPlugin;
impl GameSchedulesPlugin {
fn insert_schedule(
app: &mut App,
after: impl ScheduleLabel,
schedule_label: impl ScheduleLabel + Clone,
) {
let mut schedule = Schedule::new(schedule_label.clone());
schedule.set_build_settings(ScheduleBuildSettings {
auto_insert_apply_deferred: false,
..default()
});
app.add_schedule(schedule);
let mut main_schedule_order = app.world.resource_mut::<MainScheduleOrder>();
main_schedule_order.insert_after(after, schedule_label);
}
}
impl Plugin for GameSchedulesPlugin {
fn build(&self, app: &mut App) {
Self::insert_schedule(app, First, InputSchedule);
Self::insert_schedule(app, InputSchedule, PreMovement);
Self::insert_schedule(app, PreMovement, Movement);
Self::insert_schedule(app, Movement, PostMovement);
}
}
#[derive(ScheduleLabel, Clone, Debug, PartialEq, Eq, Hash)]
pub struct InputSchedule;
#[derive(ScheduleLabel, Clone, Debug, PartialEq, Eq, Hash)]
pub struct PreMovement;
#[derive(ScheduleLabel, Clone, Debug, PartialEq, Eq, Hash)]
pub struct Movement;
#[derive(ScheduleLabel, Clone, Debug, PartialEq, Eq, Hash)]
pub struct PostMovement;