From 51edf9cc8f61853d15f4965ac8e2e1f565b665af Mon Sep 17 00:00:00 2001 From: James Liu Date: Mon, 26 Feb 2024 08:05:50 -0800 Subject: [PATCH] Remove the UpdateAssets and AssetEvents schedules (#11986) # Objective Fix #11845. ## Solution Remove the `UpdateAssets` and `AssetEvents` schedules. Moved the `UpdateAssets` systems to `PreUpdate`, and `AssetEvents` systems into `First`. The former is meant to run before any of the event flushes. ## Future Work It'd be ideal if we could manually flush the events for assets to avoid needing two, sort of redundant, systems. This should at least let them potentially run in parallel with all of the systems in the schedules they were moved to. --- ## Changelog Removed: `UpdateAssets` schedule from the main schedule. All systems have been moved to `PreUpdate`. Removed: `AssetEvents` schedule from the main schedule. All systems have been move to `First` with the same system sets. ## Migration Guide TODO --- crates/bevy_asset/src/lib.rs | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/crates/bevy_asset/src/lib.rs b/crates/bevy_asset/src/lib.rs index f18c03397fd72..ef6b35e993df9 100644 --- a/crates/bevy_asset/src/lib.rs +++ b/crates/bevy_asset/src/lib.rs @@ -46,10 +46,10 @@ use crate::{ io::{embedded::EmbeddedAssetRegistry, AssetSourceBuilder, AssetSourceBuilders, AssetSourceId}, processor::{AssetProcessor, Process}, }; -use bevy_app::{App, First, MainScheduleOrder, Plugin, PostUpdate}; +use bevy_app::{App, First, Plugin, PreUpdate}; use bevy_ecs::{ reflect::AppTypeRegistry, - schedule::{IntoSystemConfigs, IntoSystemSetConfigs, ScheduleLabel, SystemSet}, + schedule::{IntoSystemConfigs, IntoSystemSetConfigs, SystemSet}, system::Resource, world::FromWorld, }; @@ -146,7 +146,6 @@ impl AssetPlugin { impl Plugin for AssetPlugin { fn build(&self, app: &mut App) { - app.init_schedule(UpdateAssets).init_schedule(AssetEvents); let embedded = EmbeddedAssetRegistry::default(); { let mut sources = app @@ -218,16 +217,9 @@ impl Plugin for AssetPlugin { .init_asset::() .init_asset::<()>() .add_event::() - .configure_sets( - UpdateAssets, - TrackAssets.after(handle_internal_asset_events), - ) - .add_systems(UpdateAssets, handle_internal_asset_events) + .configure_sets(PreUpdate, TrackAssets.after(handle_internal_asset_events)) + .add_systems(PreUpdate, handle_internal_asset_events) .register_type::(); - - let mut order = app.world.resource_mut::(); - order.insert_after(First, UpdateAssets); - order.insert_after(PostUpdate, AssetEvents); } } @@ -387,10 +379,13 @@ impl AssetApp for App { .register_type::>() .register_type::>() .add_systems( - AssetEvents, - Assets::::asset_events.run_if(Assets::::asset_events_condition), + First, + Assets::::asset_events + .before(bevy_ecs::event::event_update_system::>) + .run_if(Assets::::asset_events_condition) + .in_set(AssetEvents), ) - .add_systems(UpdateAssets, Assets::::track_assets.in_set(TrackAssets)) + .add_systems(PreUpdate, Assets::::track_assets.in_set(TrackAssets)) } fn register_asset_reflect(&mut self) -> &mut Self @@ -422,14 +417,10 @@ impl AssetApp for App { #[derive(SystemSet, Hash, Debug, PartialEq, Eq, Clone)] pub struct TrackAssets; -/// Schedule where [`Assets`] resources are updated. -#[derive(Debug, Hash, PartialEq, Eq, Clone, ScheduleLabel)] -pub struct UpdateAssets; - -/// Schedule where events accumulated in [`Assets`] are applied to the [`AssetEvent`] [`Events`] resource. +/// A system set where events accumulated in [`Assets`] are applied to the [`AssetEvent`] [`Events`] resource. /// /// [`Events`]: bevy_ecs::event::Events -#[derive(Debug, Hash, PartialEq, Eq, Clone, ScheduleLabel)] +#[derive(Debug, Hash, PartialEq, Eq, Clone, SystemSet)] pub struct AssetEvents; #[cfg(test)]