diff --git a/crates/bevy_app/src/app.rs b/crates/bevy_app/src/app.rs index 5bf9805429693..b458af2458b16 100644 --- a/crates/bevy_app/src/app.rs +++ b/crates/bevy_app/src/app.rs @@ -1,4 +1,6 @@ -use crate::{CoreStage, Events, Plugin, PluginGroup, PluginGroupBuilder, StartupStage}; +use crate::{ + CoreStage, Events, Plugin, PluginGroup, PluginGroupBuilder, StartupSchedule, StartupStage, +}; pub use bevy_derive::AppLabel; use bevy_ecs::{ prelude::{FromWorld, IntoExclusiveSystem}, @@ -207,7 +209,7 @@ impl App { /// ``` pub fn add_startup_stage(&mut self, label: impl StageLabel, stage: S) -> &mut Self { self.schedule - .stage(CoreStage::Startup, |schedule: &mut Schedule| { + .stage(StartupSchedule, |schedule: &mut Schedule| { schedule.add_stage(label, stage) }); self @@ -238,7 +240,7 @@ impl App { stage: S, ) -> &mut Self { self.schedule - .stage(CoreStage::Startup, |schedule: &mut Schedule| { + .stage(StartupSchedule, |schedule: &mut Schedule| { schedule.add_stage_after(target, label, stage) }); self @@ -269,7 +271,7 @@ impl App { stage: S, ) -> &mut Self { self.schedule - .stage(CoreStage::Startup, |schedule: &mut Schedule| { + .stage(StartupSchedule, |schedule: &mut Schedule| { schedule.add_stage_before(target, label, stage) }); self @@ -483,7 +485,7 @@ impl App { system: impl IntoSystemDescriptor, ) -> &mut Self { self.schedule - .stage(CoreStage::Startup, |schedule: &mut Schedule| { + .stage(StartupSchedule, |schedule: &mut Schedule| { schedule.add_system_to_stage(stage_label, system) }); self @@ -519,7 +521,7 @@ impl App { system_set: SystemSet, ) -> &mut Self { self.schedule - .stage(CoreStage::Startup, |schedule: &mut Schedule| { + .stage(StartupSchedule, |schedule: &mut Schedule| { schedule.add_system_set_to_stage(stage_label, system_set) }); self @@ -588,7 +590,7 @@ impl App { pub fn add_default_stages(&mut self) -> &mut Self { self.add_stage(CoreStage::First, SystemStage::parallel()) .add_stage( - CoreStage::Startup, + StartupSchedule, Schedule::default() .with_run_criteria(RunOnce::default()) .with_stage(StartupStage::PreStartup, SystemStage::parallel()) diff --git a/crates/bevy_app/src/lib.rs b/crates/bevy_app/src/lib.rs index a891c5957b786..2a8eb88c94bae 100644 --- a/crates/bevy_app/src/lib.rs +++ b/crates/bevy_app/src/lib.rs @@ -20,7 +20,9 @@ pub use schedule_runner::*; #[allow(missing_docs)] pub mod prelude { #[doc(hidden)] - pub use crate::{app::App, CoreStage, DynamicPlugin, Plugin, PluginGroup, StartupStage}; + pub use crate::{ + app::App, CoreStage, DynamicPlugin, Plugin, PluginGroup, StartupSchedule, StartupStage, + }; } use bevy_ecs::schedule::StageLabel; @@ -30,11 +32,6 @@ use bevy_ecs::schedule::StageLabel; /// The relative stages are added by [`App::add_default_stages`]. #[derive(Debug, Hash, PartialEq, Eq, Clone, StageLabel)] pub enum CoreStage { - /// Runs only once at the beginning of the app. - /// - /// Consists of the sub-stages defined in [`StartupStage`]. Systems added here are - /// referred to as "startup systems". - Startup, /// Name of app stage that runs before all other app stages First, /// Name of app stage responsible for performing setup before an update. Runs before UPDATE. @@ -47,6 +44,15 @@ pub enum CoreStage { /// Name of app stage that runs after all other app stages Last, } + +/// The label for the Startup [`Schedule`](bevy_ecs::schedule::Schedule), +/// which runs once at the beginning of the app. +/// +/// When targeting a [`Stage`](bevy_ecs::schedule::Stage) inside this Schedule, +/// you need to use [`StartupStage`] instead. +#[derive(Debug, Hash, PartialEq, Eq, Clone, StageLabel)] +pub struct StartupSchedule; + /// The names of the default App startup stages #[derive(Debug, Hash, PartialEq, Eq, Clone, StageLabel)] pub enum StartupStage {