From be4d3a02d29b7beed1246117d3d76714d72d9d6f Mon Sep 17 00:00:00 2001 From: Linwei Zhang Date: Mon, 24 Jul 2023 11:10:12 +0800 Subject: [PATCH 1/6] Pust scene_spawner_system in PreUpdate --- crates/bevy_scene/src/lib.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/bevy_scene/src/lib.rs b/crates/bevy_scene/src/lib.rs index e3ca8a2fee573..1505836c42030 100644 --- a/crates/bevy_scene/src/lib.rs +++ b/crates/bevy_scene/src/lib.rs @@ -11,6 +11,7 @@ mod scene_spawner; #[cfg(feature = "serialize")] pub mod serde; +use bevy_ecs::schedule::IntoSystemConfigs; pub use bundle::*; pub use dynamic_scene::*; pub use dynamic_scene_builder::*; @@ -40,9 +41,9 @@ impl Plugin for ScenePlugin { .add_asset::() .init_asset_loader::() .init_resource::() - .add_systems(Update, scene_spawner_system) + .add_systems(PreUpdate, scene_spawner_system) // Systems `*_bundle_spawner` must run before `scene_spawner_system` - .add_systems(PreUpdate, scene_spawner); + .add_systems(PreUpdate, scene_spawner.before(scene_spawner_system)); } } From bf91563601fcc7bb554dc8ced62d4e56485d49fc Mon Sep 17 00:00:00 2001 From: Linwei Zhang Date: Thu, 27 Jul 2023 09:59:51 +0800 Subject: [PATCH 2/6] Use .chain() --- crates/bevy_scene/src/lib.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/crates/bevy_scene/src/lib.rs b/crates/bevy_scene/src/lib.rs index 1505836c42030..6a9876e4d29d9 100644 --- a/crates/bevy_scene/src/lib.rs +++ b/crates/bevy_scene/src/lib.rs @@ -41,9 +41,8 @@ impl Plugin for ScenePlugin { .add_asset::() .init_asset_loader::() .init_resource::() - .add_systems(PreUpdate, scene_spawner_system) // Systems `*_bundle_spawner` must run before `scene_spawner_system` - .add_systems(PreUpdate, scene_spawner.before(scene_spawner_system)); + .add_systems(PreUpdate, (scene_spawner, scene_spawner_system).chain()); } } From efb80f678685b4133c2876fc87d8b0dcfde539f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9E=97=E4=BC=9F?= Date: Sun, 30 Jul 2023 18:01:52 +0800 Subject: [PATCH 3/6] Update crates/bevy_scene/src/lib.rs Co-authored-by: Hennadii Chernyshchyk --- crates/bevy_scene/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_scene/src/lib.rs b/crates/bevy_scene/src/lib.rs index 6a9876e4d29d9..1773de721d978 100644 --- a/crates/bevy_scene/src/lib.rs +++ b/crates/bevy_scene/src/lib.rs @@ -42,7 +42,7 @@ impl Plugin for ScenePlugin { .init_asset_loader::() .init_resource::() // Systems `*_bundle_spawner` must run before `scene_spawner_system` - .add_systems(PreUpdate, (scene_spawner, scene_spawner_system).chain()); + .add_systems(PostUpdate, (scene_spawner, scene_spawner_system).chain()); } } From d6fc397210598d2d02708eb00ab69661e01f3a03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9E=97=E4=BC=9F?= Date: Sun, 30 Jul 2023 18:02:16 +0800 Subject: [PATCH 4/6] Update crates/bevy_scene/src/lib.rs Co-authored-by: Hennadii Chernyshchyk --- crates/bevy_scene/src/lib.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/bevy_scene/src/lib.rs b/crates/bevy_scene/src/lib.rs index 1773de721d978..e6f6fd08a9bac 100644 --- a/crates/bevy_scene/src/lib.rs +++ b/crates/bevy_scene/src/lib.rs @@ -41,7 +41,6 @@ impl Plugin for ScenePlugin { .add_asset::() .init_asset_loader::() .init_resource::() - // Systems `*_bundle_spawner` must run before `scene_spawner_system` .add_systems(PostUpdate, (scene_spawner, scene_spawner_system).chain()); } } From 303872bc73c7c3bd0f2c6163e48e3c3479277c57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9E=97=E4=BC=9F?= Date: Mon, 7 Aug 2023 16:22:16 +0800 Subject: [PATCH 5/6] Update crates/bevy_scene/src/lib.rs Co-authored-by: Hennadii Chernyshchyk --- crates/bevy_scene/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_scene/src/lib.rs b/crates/bevy_scene/src/lib.rs index e6f6fd08a9bac..be23bcb69adf3 100644 --- a/crates/bevy_scene/src/lib.rs +++ b/crates/bevy_scene/src/lib.rs @@ -41,7 +41,7 @@ impl Plugin for ScenePlugin { .add_asset::() .init_asset_loader::() .init_resource::() - .add_systems(PostUpdate, (scene_spawner, scene_spawner_system).chain()); + .add_systems(PreUpdate, (scene_spawner, scene_spawner_system).chain()); } } From 8ac4e52d0626cb8e1318eb822741b494006f9dd4 Mon Sep 17 00:00:00 2001 From: Linwei Zhang Date: Mon, 14 Aug 2023 10:06:38 +0800 Subject: [PATCH 6/6] Add SpawnScene schedule --- crates/bevy_app/src/main_schedule.rs | 6 ++++++ crates/bevy_scene/src/lib.rs | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/crates/bevy_app/src/main_schedule.rs b/crates/bevy_app/src/main_schedule.rs index 194185c366ae7..f72ac80fb00cc 100644 --- a/crates/bevy_app/src/main_schedule.rs +++ b/crates/bevy_app/src/main_schedule.rs @@ -79,6 +79,11 @@ pub struct FixedUpdate; #[derive(ScheduleLabel, Clone, Debug, PartialEq, Eq, Hash)] pub struct Update; +/// The schedule that contains scene spawning. +/// This is run by the [`Main`] schedule. +#[derive(ScheduleLabel, Clone, Debug, PartialEq, Eq, Hash)] +pub struct SpawnScene; + /// The schedule that contains logic that must run after [`Update`]. For example, synchronizing "local transforms" in a hierarchy /// to "global" absolute transforms. This enables the [`PostUpdate`] transform-sync system to react to "local transform" changes in /// [`Update`] without the [`Update`] systems needing to know about (or add scheduler dependencies for) the "global transform sync system". @@ -112,6 +117,7 @@ impl Default for MainScheduleOrder { Box::new(StateTransition), Box::new(RunFixedUpdateLoop), Box::new(Update), + Box::new(SpawnScene), Box::new(PostUpdate), Box::new(Last), ], diff --git a/crates/bevy_scene/src/lib.rs b/crates/bevy_scene/src/lib.rs index be23bcb69adf3..655675e3f32de 100644 --- a/crates/bevy_scene/src/lib.rs +++ b/crates/bevy_scene/src/lib.rs @@ -28,7 +28,7 @@ pub mod prelude { }; } -use bevy_app::prelude::*; +use bevy_app::{prelude::*, SpawnScene}; use bevy_asset::AddAsset; #[derive(Default)] @@ -41,7 +41,7 @@ impl Plugin for ScenePlugin { .add_asset::() .init_asset_loader::() .init_resource::() - .add_systems(PreUpdate, (scene_spawner, scene_spawner_system).chain()); + .add_systems(SpawnScene, (scene_spawner, scene_spawner_system).chain()); } }