use bevy_app::{App, MainScheduleOrder, PreUpdate};
use bevy_ecs::schedule::ScheduleLabel;
#[derive(ScheduleLabel, Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub struct ImguiBeginFrame;
#[derive(ScheduleLabel, Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub struct ImguiPrimaryContextPass;
#[derive(ScheduleLabel, Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub struct ImguiEndFrame;
pub(crate) fn install_imgui_schedules(app: &mut App) {
app.init_schedule(ImguiBeginFrame)
.init_schedule(ImguiPrimaryContextPass)
.init_schedule(ImguiEndFrame)
.init_resource::<MainScheduleOrder>();
let mut order = app.world_mut().resource_mut::<MainScheduleOrder>();
insert_after_if_missing(&mut order, PreUpdate, ImguiBeginFrame);
insert_after_if_missing(&mut order, ImguiBeginFrame, ImguiPrimaryContextPass);
insert_after_if_missing(&mut order, ImguiPrimaryContextPass, ImguiEndFrame);
}
fn insert_after_if_missing(
order: &mut MainScheduleOrder,
after: impl ScheduleLabel,
schedule: impl ScheduleLabel,
) {
if order.labels.iter().any(|current| (**current).eq(&schedule)) {
return;
}
order.insert_after(after, schedule);
}