diff --git a/crates/bevy_app/src/main_schedule.rs b/crates/bevy_app/src/main_schedule.rs index 1a22dc8a5cc5a..eedca809e2973 100644 --- a/crates/bevy_app/src/main_schedule.rs +++ b/crates/bevy_app/src/main_schedule.rs @@ -195,6 +195,16 @@ impl MainScheduleOrder { self.labels.insert(index + 1, schedule.intern()); } + /// Adds the given `schedule` before the `before` schedule in the main list of schedules. + pub fn insert_before(&mut self, before: impl ScheduleLabel, schedule: impl ScheduleLabel) { + let index = self + .labels + .iter() + .position(|current| (**current).eq(&before)) + .unwrap_or_else(|| panic!("Expected {before:?} to exist")); + self.labels.insert(index, schedule.intern()); + } + /// Adds the given `schedule` after the `after` schedule in the list of startup schedules. pub fn insert_startup_after( &mut self, @@ -208,6 +218,20 @@ impl MainScheduleOrder { .unwrap_or_else(|| panic!("Expected {after:?} to exist")); self.startup_labels.insert(index + 1, schedule.intern()); } + + /// Adds the given `schedule` before the `before` schedule in the list of startup schedules. + pub fn insert_startup_before( + &mut self, + before: impl ScheduleLabel, + schedule: impl ScheduleLabel, + ) { + let index = self + .startup_labels + .iter() + .position(|current| (**current).eq(&before)) + .unwrap_or_else(|| panic!("Expected {before:?} to exist")); + self.startup_labels.insert(index, schedule.intern()); + } } impl Main { @@ -291,6 +315,16 @@ impl FixedMainScheduleOrder { .unwrap_or_else(|| panic!("Expected {after:?} to exist")); self.labels.insert(index + 1, schedule.intern()); } + + /// Adds the given `schedule` before the `before` schedule + pub fn insert_before(&mut self, before: impl ScheduleLabel, schedule: impl ScheduleLabel) { + let index = self + .labels + .iter() + .position(|current| (**current).eq(&before)) + .unwrap_or_else(|| panic!("Expected {before:?} to exist")); + self.labels.insert(index, schedule.intern()); + } } impl FixedMain {