bevy/bevy_app/src/schedule_runner.rs

41 lines
1.1 KiB
Rust
Raw Normal View History

2020-04-06 03:19:02 +00:00
use super::{App, AppBuilder, AppPlugin};
2020-03-30 18:52:33 +00:00
use std::{thread, time::Duration};
#[derive(Copy, Clone, Debug)]
pub enum RunMode {
2020-04-04 19:43:16 +00:00
Loop { wait: Option<Duration> },
2020-03-30 18:52:33 +00:00
Once,
}
impl Default for RunMode {
fn default() -> Self {
2020-04-04 19:43:16 +00:00
RunMode::Loop { wait: None }
2020-03-30 18:52:33 +00:00
}
}
#[derive(Default)]
pub struct ScheduleRunnerPlugin {
2020-03-30 18:52:33 +00:00
pub run_mode: RunMode,
}
impl AppPlugin for ScheduleRunnerPlugin {
2020-04-06 03:19:02 +00:00
fn build(&self, app: &mut AppBuilder) {
2020-03-30 18:52:33 +00:00
let run_mode = self.run_mode;
app.set_runner(move |mut app: App| match run_mode {
RunMode::Once => {
2020-04-06 03:19:02 +00:00
if let Some(ref mut schedule) = app.schedule {
schedule.execute(&mut app.world, &mut app.resources);
}
2020-03-30 18:52:33 +00:00
}
2020-04-04 19:43:16 +00:00
RunMode::Loop { wait } => loop {
2020-04-06 03:19:02 +00:00
if let Some(ref mut schedule) = app.schedule {
schedule.execute(&mut app.world, &mut app.resources);
}
2020-03-30 18:52:33 +00:00
if let Some(wait) = wait {
thread::sleep(wait);
}
},
2020-04-06 03:19:02 +00:00
});
2020-03-30 18:52:33 +00:00
}
}