1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
use bevy::{
prelude::{App, World},
ecs::schedule::{Schedule, ScheduleLabel},
};
#[derive(ScheduleLabel, Clone, Debug, PartialEq, Eq, Hash)]
pub struct Init;
#[derive(ScheduleLabel, Clone, Debug, PartialEq, Eq, Hash)]
pub struct Run;
#[derive(ScheduleLabel, Clone, Debug, PartialEq, Eq, Hash)]
pub struct Draw;
pub(crate) fn plugin(app: &mut App) {
app.add_schedule(Schedule::new(Init));
app.add_schedule(Schedule::new(Run));
app.add_schedule(Schedule::new(Draw));
// app.configure_schedule(Update, |sched| {
// sched.set_run_if(in_state(RunState::Run));
// });
// app.configure_schedule(Draw, |sched| {
// sched.set_run_if(in_state(RunState::Run));
// });
// {
// let mut order = app.world_mut().resource_mut::<MainScheduleOrder>();
// order.insert_after(bevy::prelude::Update, Update);
// order.insert_after(Update, 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::core::FrameCount>();
// bevy::log::info!("Ran schedule {:?} in frame {}", &label, &frame_count.0);
}
}
}