diff --git a/crates/bevy_app/src/app_builder.rs b/crates/bevy_app/src/app_builder.rs index 8fe4f2a06a89ec..fe019d3a1897de 100644 --- a/crates/bevy_app/src/app_builder.rs +++ b/crates/bevy_app/src/app_builder.rs @@ -6,7 +6,7 @@ use crate::{ }; use bevy_ecs::{ clear_trackers_system, FromResources, IntoExclusiveSystem, IntoSystem, Resources, RunOnce, - Schedule, Stage, SystemDescriptor, SystemStage, World, + Schedule, Stage, SystemDescriptor, SystemSet, SystemStage, World, }; use bevy_utils::tracing::debug; @@ -129,6 +129,10 @@ impl AppBuilder { self.add_system_to_stage(stage::UPDATE, system) } + pub fn add_system_set(&mut self, system_set: SystemSet) -> &mut Self { + self.add_system_set_to_stage(stage::UPDATE, system_set) + } + pub fn add_system_to_stage( &mut self, stage_name: &'static str, @@ -138,6 +142,17 @@ impl AppBuilder { self } + pub fn add_system_set_to_stage( + &mut self, + stage_name: &'static str, + system_set: SystemSet, + ) -> &mut Self { + self.app + .schedule + .add_system_set_to_stage(stage_name, system_set); + self + } + pub fn add_startup_system(&mut self, system: impl Into) -> &mut Self { self.add_startup_system_to_stage(startup_stage::STARTUP, system) } diff --git a/crates/bevy_ecs/src/schedule/mod.rs b/crates/bevy_ecs/src/schedule/mod.rs index 5532c0f4d5c143..e825436b4bd1a6 100644 --- a/crates/bevy_ecs/src/schedule/mod.rs +++ b/crates/bevy_ecs/src/schedule/mod.rs @@ -125,6 +125,23 @@ impl Schedule { self } + pub fn add_system_set_to_stage( + &mut self, + stage_name: &'static str, + system_set: SystemSet, + ) -> &mut Self { + let stage = self + .get_stage_mut::(stage_name) + .unwrap_or_else(|| { + panic!( + "Stage '{}' does not exist or is not a SystemStage", + stage_name + ) + }); + stage.add_system_set(system_set); + self + } + pub fn stage &mut T>( &mut self, name: &str,