diff --git a/crates/bevy_asset/src/lib.rs b/crates/bevy_asset/src/lib.rs index 14dc7ddcf40ca9..81924e27a1b152 100644 --- a/crates/bevy_asset/src/lib.rs +++ b/crates/bevy_asset/src/lib.rs @@ -145,7 +145,7 @@ impl Plugin for AssetPlugin { watch_for_changes, } => { let source_reader = app - .world + .world_mut() .resource_mut::() .get_source_reader(source); app.insert_resource(AssetServer::new(source_reader, *watch_for_changes)); @@ -155,7 +155,7 @@ impl Plugin for AssetPlugin { watch_for_changes, } => { let destination_reader = app - .world + .world_mut() .resource_mut::() .get_destination_reader(destination); app.insert_resource(AssetServer::new(destination_reader, *watch_for_changes)); @@ -165,7 +165,7 @@ impl Plugin for AssetPlugin { destination, watch_for_changes, } => { - let mut asset_providers = app.world.resource_mut::(); + let mut asset_providers = app.world_mut().resource_mut::(); let processor = AssetProcessor::new(&mut asset_providers, source, destination); let destination_reader = asset_providers.get_destination_reader(source); // the main asset server gates loads based on asset state @@ -190,7 +190,7 @@ impl Plugin for AssetPlugin { ) .add_systems(UpdateAssets, server::handle_internal_asset_events); - let mut order = app.world.resource_mut::(); + let mut order = app.world_mut().resource_mut::(); order.insert_after(First, UpdateAssets); order.insert_after(PostUpdate, AssetEvents); } @@ -275,20 +275,24 @@ pub trait AssetApp { impl AssetApp for App { fn register_asset_loader(&mut self, loader: L) -> &mut Self { - self.world.resource::().register_loader(loader); + self.world() + .resource::() + .register_loader(loader); self } fn init_asset_loader(&mut self) -> &mut Self { - let loader = L::from_world(&mut self.world); + let loader = L::from_world(self.world_mut()); self.register_asset_loader(loader) } fn init_asset(&mut self) -> &mut Self { let assets = Assets::::default(); - self.world.resource::().register_asset(&assets); - if self.world.contains_resource::() { - let processor = self.world.resource::(); + self.world() + .resource::() + .register_asset(&assets); + if self.world().contains_resource::() { + let processor = self.world().resource::(); // The processor should have its own handle provider separate from the Asset storage // to ensure the id spaces are entirely separate. Not _strictly_ necessary, but // desirable. @@ -311,7 +315,7 @@ impl AssetApp for App { where A: Asset + Reflect + FromReflect + GetTypeRegistration, { - let type_registry = self.world.resource::(); + let type_registry = self.world().resource::(); { let mut type_registry = type_registry.write(); @@ -325,21 +329,21 @@ impl AssetApp for App { } fn preregister_asset_loader(&mut self, extensions: &[&str]) -> &mut Self { - self.world + self.world_mut() .resource_mut::() .preregister_loader::(extensions); self } fn register_asset_processor(&mut self, processor: P) -> &mut Self { - if let Some(asset_processor) = self.world.get_resource::() { + if let Some(asset_processor) = self.world().get_resource::() { asset_processor.register_processor(processor); } self } fn set_default_asset_processor(&mut self, extension: &str) -> &mut Self { - if let Some(asset_processor) = self.world.get_resource::() { + if let Some(asset_processor) = self.world().get_resource::() { asset_processor.set_default_processor::

(extension); } self @@ -364,7 +368,7 @@ pub struct AssetEvents; #[macro_export] macro_rules! load_internal_asset { ($app: ident, $handle: expr, $path_str: expr, $loader: expr) => {{ - let mut assets = $app.world.resource_mut::<$crate::Assets<_>>(); + let mut assets = $app.world_mut().resource_mut::<$crate::Assets<_>>(); assets.insert($handle, ($loader)( include_str!($path_str), std::path::Path::new(file!()) @@ -376,7 +380,7 @@ macro_rules! load_internal_asset { }}; // we can't support params without variadic arguments, so internal assets with additional params can't be hot-reloaded ($app: ident, $handle: ident, $path_str: expr, $loader: expr $(, $param:expr)+) => {{ - let mut assets = $app.world.resource_mut::<$crate::Assets<_>>(); + let mut assets = $app.world_mut().resource_mut::<$crate::Assets<_>>(); assets.insert($handle, ($loader)( include_str!($path_str), std::path::Path::new(file!()) @@ -393,7 +397,7 @@ macro_rules! load_internal_asset { #[macro_export] macro_rules! load_internal_binary_asset { ($app: ident, $handle: expr, $path_str: expr, $loader: expr) => {{ - let mut assets = $app.world.resource_mut::<$crate::Assets<_>>(); + let mut assets = $app.world_mut().resource_mut::<$crate::Assets<_>>(); assets.insert( $handle, ($loader)( @@ -525,7 +529,7 @@ mod tests { fn run_app_until(app: &mut App, mut predicate: impl FnMut(&mut World) -> Option<()>) { for _ in 0..LARGE_ITERATION_COUNT { app.update(); - if (predicate)(&mut app.world).is_some() { + if (predicate)(app.world_mut()).is_some() { return; } } @@ -611,13 +615,13 @@ mod tests { .init_resource::() .register_asset_loader(CoolTextLoader) .add_systems(Update, store_asset_events); - let asset_server = app.world.resource::().clone(); + let asset_server = app.world().resource::().clone(); let handle: Handle = asset_server.load(a_path); let a_id = handle.id(); - let entity = app.world.spawn(handle).id(); + let entity = app.world_mut().spawn(handle).id(); app.update(); { - let a_text = get::(&app.world, a_id); + let a_text = get::(app.world(), a_id); let (a_load, a_deps, a_rec_deps) = asset_server.get_load_states(a_id).unwrap(); assert!(a_text.is_none(), "a's asset should not exist yet"); assert_eq!(a_load, LoadState::Loading, "a should still be loading"); @@ -799,27 +803,27 @@ mod tests { }); { - let mut texts = app.world.resource_mut::>(); + let mut texts = app.world_mut().resource_mut::>(); let a = texts.get_mut(a_id).unwrap(); a.text = "Changed".to_string(); } - app.world.despawn(entity); + app.world_mut().despawn(entity); app.update(); assert_eq!( - app.world.resource::>().len(), + app.world().resource::>().len(), 0, "CoolText asset entities should be despawned when no more handles exist" ); app.update(); // this requires a second update because the parent asset was freed in the previous app.update() assert_eq!( - app.world.resource::>().len(), + app.world().resource::>().len(), 0, "SubText asset entities should be despawned when no more handles exist" ); - let events = app.world.remove_resource::().unwrap(); - let id_results = app.world.remove_resource::().unwrap(); + let events = app.world_mut().remove_resource::().unwrap(); + let id_results = app.world_mut().remove_resource::().unwrap(); let expected_events = vec![ AssetEvent::Added { id: a_id }, AssetEvent::LoadedWithDependencies { @@ -909,7 +913,7 @@ mod tests { let (mut app, gate_opener) = test_app(dir); app.init_asset::() .register_asset_loader(CoolTextLoader); - let asset_server = app.world.resource::().clone(); + let asset_server = app.world().resource::().clone(); let handle: Handle = asset_server.load(a_path); let a_id = handle.id(); { @@ -925,7 +929,7 @@ mod tests { ); } - app.world.spawn(handle); + app.world_mut().spawn(handle); gate_opener.open(a_path); gate_opener.open(b_path); gate_opener.open(c_path); @@ -1002,7 +1006,7 @@ mod tests { let id = { let handle = { - let mut texts = app.world.resource_mut::>(); + let mut texts = app.world_mut().resource_mut::>(); texts.add(CoolText { text: hello.clone(), embedded: empty.clone(), @@ -1015,7 +1019,7 @@ mod tests { { let text = app - .world + .world() .resource::>() .get(&handle) .unwrap(); @@ -1026,16 +1030,16 @@ mod tests { // handle is dropped app.update(); assert!( - app.world.resource::>().get(id).is_none(), + app.world().resource::>().get(id).is_none(), "asset has no handles, so it should have been dropped last update" ); // remove event is emitted app.update(); - let events = std::mem::take(&mut app.world.resource_mut::().0); + let events = std::mem::take(&mut app.world_mut().resource_mut::().0); let expected_events = vec![AssetEvent::Added { id }, AssetEvent::Removed { id }]; assert_eq!(events, expected_events); - let dep_handle = app.world.resource::().load(dep_path); + let dep_handle = app.world().resource::().load(dep_path); let a = CoolText { text: "a".to_string(), embedded: empty, @@ -1043,19 +1047,19 @@ mod tests { dependencies: vec![dep_handle.clone()], sub_texts: Vec::new(), }; - let a_handle = app.world.resource::().load_asset(a); + let a_handle = app.world().resource::().load_asset(a); app.update(); // TODO: ideally it doesn't take two updates for the added event to emit app.update(); - let events = std::mem::take(&mut app.world.resource_mut::().0); + let events = std::mem::take(&mut app.world_mut().resource_mut::().0); let expected_events = vec![AssetEvent::Added { id: a_handle.id() }]; assert_eq!(events, expected_events); gate_opener.open(dep_path); loop { app.update(); - let events = std::mem::take(&mut app.world.resource_mut::().0); + let events = std::mem::take(&mut app.world_mut().resource_mut::().0); if events.is_empty() { continue; } @@ -1069,7 +1073,7 @@ mod tests { break; } app.update(); - let events = std::mem::take(&mut app.world.resource_mut::().0); + let events = std::mem::take(&mut app.world_mut().resource_mut::().0); let expected_events = vec![AssetEvent::Added { id: dep_handle.id(), }]; @@ -1116,7 +1120,7 @@ mod tests { app.init_asset::() .init_asset::() .register_asset_loader(CoolTextLoader); - let asset_server = app.world.resource::().clone(); + let asset_server = app.world().resource::().clone(); let handle: Handle = asset_server.load_folder("text"); gate_opener.open(a_path); gate_opener.open(b_path); diff --git a/crates/bevy_asset/src/reflect.rs b/crates/bevy_asset/src/reflect.rs index 6e00323826de1b..694bd322334699 100644 --- a/crates/bevy_asset/src/reflect.rs +++ b/crates/bevy_asset/src/reflect.rs @@ -254,7 +254,7 @@ mod tests { .register_asset_reflect::(); let reflect_asset = { - let type_registry = app.world.resource::(); + let type_registry = app.world().resource::(); let type_registry = type_registry.read(); type_registry @@ -267,9 +267,9 @@ mod tests { field: "test".into(), }; - let handle = reflect_asset.add(&mut app.world, &value); + let handle = reflect_asset.add(app.world_mut(), &value); let strukt = match reflect_asset - .get_mut(&mut app.world, handle) + .get_mut(app.world_mut(), handle) .unwrap() .reflect_mut() { @@ -281,19 +281,19 @@ mod tests { .unwrap() .apply(&String::from("edited")); - assert_eq!(reflect_asset.len(&app.world), 1); - let ids: Vec<_> = reflect_asset.ids(&app.world).collect(); + assert_eq!(reflect_asset.len(app.world()), 1); + let ids: Vec<_> = reflect_asset.ids(app.world()).collect(); assert_eq!(ids.len(), 1); let fetched_handle = UntypedHandle::Weak(ids[0]); let asset = reflect_asset - .get(&app.world, fetched_handle.clone_weak()) + .get(app.world(), fetched_handle.clone_weak()) .unwrap(); assert_eq!(asset.downcast_ref::().unwrap().field, "edited"); reflect_asset - .remove(&mut app.world, fetched_handle) + .remove(app.world_mut(), fetched_handle) .unwrap(); - assert_eq!(reflect_asset.len(&app.world), 0); + assert_eq!(reflect_asset.len(app.world()), 0); } } diff --git a/crates/bevy_core/src/lib.rs b/crates/bevy_core/src/lib.rs index e5682d3a92262a..6c03b5d7940ea0 100644 --- a/crates/bevy_core/src/lib.rs +++ b/crates/bevy_core/src/lib.rs @@ -30,7 +30,6 @@ use std::marker::PhantomData; use std::ops::Range; use std::path::{Path, PathBuf}; -#[cfg(not(target_arch = "wasm32"))] #[cfg(not(target_arch = "wasm32"))] use bevy_tasks::tick_global_task_pools_on_main_thread; @@ -206,7 +205,7 @@ mod tests { )); app.update(); - let frame_count = app.world.resource::(); + let frame_count = app.world().resource::(); assert_eq!(1, frame_count.0); } } diff --git a/crates/bevy_core_pipeline/src/blit/mod.rs b/crates/bevy_core_pipeline/src/blit/mod.rs index b6698838f4a54b..838f3afab4ad42 100644 --- a/crates/bevy_core_pipeline/src/blit/mod.rs +++ b/crates/bevy_core_pipeline/src/blit/mod.rs @@ -16,10 +16,9 @@ impl Plugin for BlitPlugin { } fn finish(&self, app: &mut App) { - let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { return; }; - render_app .init_resource::() .init_resource::>(); diff --git a/crates/bevy_core_pipeline/src/bloom/mod.rs b/crates/bevy_core_pipeline/src/bloom/mod.rs index 9f8d0aec2946f4..79222a5f8f5054 100644 --- a/crates/bevy_core_pipeline/src/bloom/mod.rs +++ b/crates/bevy_core_pipeline/src/bloom/mod.rs @@ -55,11 +55,9 @@ impl Plugin for BloomPlugin { UniformComponentPlugin::::default(), )); - let render_app = match app.get_sub_app_mut(RenderApp) { - Ok(render_app) => render_app, - Err(_) => return, + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { + return; }; - render_app .init_resource::>() .init_resource::>() @@ -101,11 +99,9 @@ impl Plugin for BloomPlugin { } fn finish(&self, app: &mut App) { - let render_app = match app.get_sub_app_mut(RenderApp) { - Ok(render_app) => render_app, - Err(_) => return, + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { + return; }; - render_app .init_resource::() .init_resource::(); diff --git a/crates/bevy_core_pipeline/src/contrast_adaptive_sharpening/mod.rs b/crates/bevy_core_pipeline/src/contrast_adaptive_sharpening/mod.rs index 89879938e8a8bb..b832f0a69270ca 100644 --- a/crates/bevy_core_pipeline/src/contrast_adaptive_sharpening/mod.rs +++ b/crates/bevy_core_pipeline/src/contrast_adaptive_sharpening/mod.rs @@ -113,9 +113,8 @@ impl Plugin for CASPlugin { UniformComponentPlugin::::default(), )); - let render_app = match app.get_sub_app_mut(RenderApp) { - Ok(render_app) => render_app, - Err(_) => return, + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { + return; }; render_app .init_resource::>() @@ -152,9 +151,8 @@ impl Plugin for CASPlugin { } fn finish(&self, app: &mut App) { - let render_app = match app.get_sub_app_mut(RenderApp) { - Ok(render_app) => render_app, - Err(_) => return, + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { + return; }; render_app.init_resource::(); } diff --git a/crates/bevy_core_pipeline/src/core_2d/mod.rs b/crates/bevy_core_pipeline/src/core_2d/mod.rs index 49f4260b203fc7..967907a6535dc6 100644 --- a/crates/bevy_core_pipeline/src/core_2d/mod.rs +++ b/crates/bevy_core_pipeline/src/core_2d/mod.rs @@ -46,11 +46,9 @@ impl Plugin for Core2dPlugin { app.register_type::() .add_plugins(ExtractComponentPlugin::::default()); - let render_app = match app.get_sub_app_mut(RenderApp) { - Ok(render_app) => render_app, - Err(_) => return, + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { + return; }; - render_app .init_resource::>() .add_systems(ExtractSchedule, extract_core_2d_camera_phases) diff --git a/crates/bevy_core_pipeline/src/core_3d/mod.rs b/crates/bevy_core_pipeline/src/core_3d/mod.rs index 04f4f0973998f8..8772ef239bc0ff 100644 --- a/crates/bevy_core_pipeline/src/core_3d/mod.rs +++ b/crates/bevy_core_pipeline/src/core_3d/mod.rs @@ -71,11 +71,9 @@ impl Plugin for Core3dPlugin { .register_type::() .add_plugins((SkyboxPlugin, ExtractComponentPlugin::::default())); - let render_app = match app.get_sub_app_mut(RenderApp) { - Ok(render_app) => render_app, - Err(_) => return, + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { + return; }; - render_app .init_resource::>() .init_resource::>() diff --git a/crates/bevy_core_pipeline/src/fxaa/mod.rs b/crates/bevy_core_pipeline/src/fxaa/mod.rs index f26e63a2d08c24..cb6d2a942a23b7 100644 --- a/crates/bevy_core_pipeline/src/fxaa/mod.rs +++ b/crates/bevy_core_pipeline/src/fxaa/mod.rs @@ -86,9 +86,8 @@ impl Plugin for FxaaPlugin { app.register_type::(); app.add_plugins(ExtractComponentPlugin::::default()); - let render_app = match app.get_sub_app_mut(RenderApp) { - Ok(render_app) => render_app, - Err(_) => return, + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { + return; }; render_app .init_resource::>() @@ -114,9 +113,8 @@ impl Plugin for FxaaPlugin { } fn finish(&self, app: &mut App) { - let render_app = match app.get_sub_app_mut(RenderApp) { - Ok(render_app) => render_app, - Err(_) => return, + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { + return; }; render_app.init_resource::(); } diff --git a/crates/bevy_core_pipeline/src/msaa_writeback.rs b/crates/bevy_core_pipeline/src/msaa_writeback.rs index 0646d4ce67ffbc..b818fd6568688e 100644 --- a/crates/bevy_core_pipeline/src/msaa_writeback.rs +++ b/crates/bevy_core_pipeline/src/msaa_writeback.rs @@ -20,10 +20,9 @@ pub struct MsaaWritebackPlugin; impl Plugin for MsaaWritebackPlugin { fn build(&self, app: &mut App) { - let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { return; }; - render_app.add_systems( Render, prepare_msaa_writeback_pipelines.in_set(RenderSet::Prepare), diff --git a/crates/bevy_core_pipeline/src/skybox/mod.rs b/crates/bevy_core_pipeline/src/skybox/mod.rs index bd2035d6b1b357..751304d45cde40 100644 --- a/crates/bevy_core_pipeline/src/skybox/mod.rs +++ b/crates/bevy_core_pipeline/src/skybox/mod.rs @@ -34,11 +34,9 @@ impl Plugin for SkyboxPlugin { app.add_plugins(ExtractComponentPlugin::::default()); - let render_app = match app.get_sub_app_mut(RenderApp) { - Ok(render_app) => render_app, - Err(_) => return, + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { + return; }; - render_app .init_resource::>() .add_systems( @@ -51,13 +49,10 @@ impl Plugin for SkyboxPlugin { } fn finish(&self, app: &mut App) { - let render_app = match app.get_sub_app_mut(RenderApp) { - Ok(render_app) => render_app, - Err(_) => return, + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { + return; }; - - let render_device = render_app.world.resource::().clone(); - + let render_device = render_app.world().resource::().clone(); render_app.insert_resource(SkyboxPipeline::new(&render_device)); } } diff --git a/crates/bevy_core_pipeline/src/taa/mod.rs b/crates/bevy_core_pipeline/src/taa/mod.rs index e61dccc5d4bf5c..c0334de223d307 100644 --- a/crates/bevy_core_pipeline/src/taa/mod.rs +++ b/crates/bevy_core_pipeline/src/taa/mod.rs @@ -56,10 +56,9 @@ impl Plugin for TemporalAntiAliasPlugin { app.insert_resource(Msaa::Off) .register_type::(); - let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { return; }; - render_app .init_resource::>() .add_systems(ExtractSchedule, extract_taa_settings) @@ -84,10 +83,9 @@ impl Plugin for TemporalAntiAliasPlugin { } fn finish(&self, app: &mut App) { - let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { return; }; - render_app.init_resource::(); } } diff --git a/crates/bevy_core_pipeline/src/tonemapping/mod.rs b/crates/bevy_core_pipeline/src/tonemapping/mod.rs index 2af1d48b6eed09..ad6529a73cd8dd 100644 --- a/crates/bevy_core_pipeline/src/tonemapping/mod.rs +++ b/crates/bevy_core_pipeline/src/tonemapping/mod.rs @@ -47,8 +47,8 @@ impl Plugin for TonemappingPlugin { Shader::from_wgsl ); - if !app.world.is_resource_added::() { - let mut images = app.world.resource_mut::>(); + if !app.world().is_resource_added::() { + let mut images = app.world_mut().resource_mut::>(); #[cfg(feature = "tonemapping_luts")] let tonemapping_luts = { @@ -91,20 +91,22 @@ impl Plugin for TonemappingPlugin { ExtractComponentPlugin::::default(), )); - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { - render_app - .init_resource::>() - .add_systems( - Render, - prepare_view_tonemapping_pipelines.in_set(RenderSet::Prepare), - ); - } + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { + return; + }; + render_app + .init_resource::>() + .add_systems( + Render, + prepare_view_tonemapping_pipelines.in_set(RenderSet::Prepare), + ); } fn finish(&self, app: &mut App) { - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { - render_app.init_resource::(); - } + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { + return; + }; + render_app.init_resource::(); } } diff --git a/crates/bevy_core_pipeline/src/upscaling/mod.rs b/crates/bevy_core_pipeline/src/upscaling/mod.rs index 76475c8692bf5b..671287d14cce0f 100644 --- a/crates/bevy_core_pipeline/src/upscaling/mod.rs +++ b/crates/bevy_core_pipeline/src/upscaling/mod.rs @@ -13,7 +13,7 @@ pub struct UpscalingPlugin; impl Plugin for UpscalingPlugin { fn build(&self, app: &mut App) { - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { render_app.add_systems( Render, prepare_view_upscaling_pipelines.in_set(RenderSet::Prepare), diff --git a/crates/bevy_diagnostic/src/diagnostic.rs b/crates/bevy_diagnostic/src/diagnostic.rs index 693642c5d6a393..a207243153157d 100644 --- a/crates/bevy_diagnostic/src/diagnostic.rs +++ b/crates/bevy_diagnostic/src/diagnostic.rs @@ -1,4 +1,4 @@ -use bevy_app::App; +use bevy_app::{App, SubApp}; use bevy_ecs::system::{Deferred, Res, Resource, SystemBuffer, SystemParam}; use bevy_log::warn; use bevy_utils::{Duration, Instant, StableHashMap, Uuid}; @@ -288,10 +288,6 @@ impl SystemBuffer for DiagnosticsBuffer { /// Extend [`App`] with new `register_diagnostic` function. pub trait RegisterDiagnostic { - fn register_diagnostic(&mut self, diagnostic: Diagnostic) -> &mut Self; -} - -impl RegisterDiagnostic for App { /// Register a new [`Diagnostic`] with an [`App`]. /// /// Will initialize a [`DiagnosticsStore`] if it doesn't exist. @@ -307,11 +303,22 @@ impl RegisterDiagnostic for App { /// .add_plugins(DiagnosticsPlugin) /// .run(); /// ``` + fn register_diagnostic(&mut self, diagnostic: Diagnostic) -> &mut Self; +} + +impl RegisterDiagnostic for SubApp { fn register_diagnostic(&mut self, diagnostic: Diagnostic) -> &mut Self { self.init_resource::(); - let mut diagnostics = self.world.resource_mut::(); + let mut diagnostics = self.world_mut().resource_mut::(); diagnostics.add(diagnostic); self } } + +impl RegisterDiagnostic for App { + fn register_diagnostic(&mut self, diagnostic: Diagnostic) -> &mut Self { + SubApp::register_diagnostic(self.main_mut(), diagnostic); + self + } +} diff --git a/crates/bevy_gizmos/src/lib.rs b/crates/bevy_gizmos/src/lib.rs index 79f696e1f063e1..57b646ce6d56e4 100644 --- a/crates/bevy_gizmos/src/lib.rs +++ b/crates/bevy_gizmos/src/lib.rs @@ -93,7 +93,7 @@ impl Plugin for GizmoPlugin { .after(TransformSystem::TransformPropagate), ); - let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { return; }; @@ -111,11 +111,11 @@ impl Plugin for GizmoPlugin { } fn finish(&self, app: &mut bevy_app::App) { - let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { return; }; - let render_device = render_app.world.resource::(); + let render_device = render_app.world().resource::(); let layout = render_device.create_bind_group_layout(&BindGroupLayoutDescriptor { entries: &[BindGroupLayoutEntry { binding: 0, diff --git a/crates/bevy_gizmos/src/pipeline_2d.rs b/crates/bevy_gizmos/src/pipeline_2d.rs index 2ec777e8ca52b5..bfbdaeeeccc8b0 100644 --- a/crates/bevy_gizmos/src/pipeline_2d.rs +++ b/crates/bevy_gizmos/src/pipeline_2d.rs @@ -27,7 +27,7 @@ pub struct LineGizmo2dPlugin; impl Plugin for LineGizmo2dPlugin { fn build(&self, app: &mut App) { - let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { return; }; @@ -43,7 +43,7 @@ impl Plugin for LineGizmo2dPlugin { } fn finish(&self, app: &mut App) { - let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { return; }; diff --git a/crates/bevy_gizmos/src/pipeline_3d.rs b/crates/bevy_gizmos/src/pipeline_3d.rs index acb827dff3346f..b68c217853513b 100644 --- a/crates/bevy_gizmos/src/pipeline_3d.rs +++ b/crates/bevy_gizmos/src/pipeline_3d.rs @@ -25,7 +25,7 @@ use bevy_render::{ pub struct LineGizmo3dPlugin; impl Plugin for LineGizmo3dPlugin { fn build(&self, app: &mut App) { - let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { return; }; @@ -41,7 +41,7 @@ impl Plugin for LineGizmo3dPlugin { } fn finish(&self, app: &mut App) { - let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { return; }; diff --git a/crates/bevy_gltf/src/lib.rs b/crates/bevy_gltf/src/lib.rs index 8474ab66e77c74..32dbe4b97e6aad 100644 --- a/crates/bevy_gltf/src/lib.rs +++ b/crates/bevy_gltf/src/lib.rs @@ -49,9 +49,8 @@ impl Plugin for GltfPlugin { } fn finish(&self, app: &mut App) { - let supported_compressed_formats = match app.world.get_resource::() { + let supported_compressed_formats = match app.world().get_resource::() { Some(render_device) => CompressedImageFormats::from_features(render_device.features()), - None => CompressedImageFormats::NONE, }; app.register_asset_loader(GltfLoader { diff --git a/crates/bevy_log/src/lib.rs b/crates/bevy_log/src/lib.rs index a912d7d984b5c5..3ff3fa4b273c7a 100644 --- a/crates/bevy_log/src/lib.rs +++ b/crates/bevy_log/src/lib.rs @@ -152,7 +152,7 @@ impl Plugin for LogPlugin { } })) .build(); - app.world.insert_non_send_resource(guard); + app.insert_non_send_resource(guard); chrome_layer }; diff --git a/crates/bevy_pbr/src/lib.rs b/crates/bevy_pbr/src/lib.rs index 228de223caa984..5239d2bb82fed8 100644 --- a/crates/bevy_pbr/src/lib.rs +++ b/crates/bevy_pbr/src/lib.rs @@ -236,18 +236,19 @@ impl Plugin for PbrPlugin { ), ); - app.world.resource_mut::>().insert( - Handle::::default(), - StandardMaterial { - base_color: Color::rgb(1.0, 0.0, 0.5), - unlit: true, - ..Default::default() - }, - ); + app.world_mut() + .resource_mut::>() + .insert( + Handle::::default(), + StandardMaterial { + base_color: Color::rgb(1.0, 0.0, 0.5), + unlit: true, + ..Default::default() + }, + ); - let render_app = match app.get_sub_app_mut(RenderApp) { - Ok(render_app) => render_app, - Err(_) => return, + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { + return; }; // Extract the required data from the main world @@ -268,8 +269,8 @@ impl Plugin for PbrPlugin { ) .init_resource::(); - let shadow_pass_node = ShadowPassNode::new(&mut render_app.world); - let mut graph = render_app.world.resource_mut::(); + let shadow_pass_node = ShadowPassNode::new(render_app.world_mut()); + let mut graph = render_app.world_mut().resource_mut::(); let draw_3d_graph = graph .get_sub_graph_mut(bevy_core_pipeline::core_3d::graph::NAME) .unwrap(); @@ -281,9 +282,8 @@ impl Plugin for PbrPlugin { } fn finish(&self, app: &mut App) { - let render_app = match app.get_sub_app_mut(RenderApp) { - Ok(render_app) => render_app, - Err(_) => return, + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { + return; }; // Extract the required data from the main world diff --git a/crates/bevy_pbr/src/material.rs b/crates/bevy_pbr/src/material.rs index 8f6c59ce0f7c34..af1407f6db7760 100644 --- a/crates/bevy_pbr/src/material.rs +++ b/crates/bevy_pbr/src/material.rs @@ -186,7 +186,7 @@ where app.init_asset::() .add_plugins(ExtractComponentPlugin::>::extract_visible()); - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { render_app .init_resource::>() .add_render_command::>() @@ -222,7 +222,7 @@ where } fn finish(&self, app: &mut App) { - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { render_app.init_resource::>(); } } diff --git a/crates/bevy_pbr/src/prepass/mod.rs b/crates/bevy_pbr/src/prepass/mod.rs index 3c9bdd7ddb4ec8..dd230965d1d1b5 100644 --- a/crates/bevy_pbr/src/prepass/mod.rs +++ b/crates/bevy_pbr/src/prepass/mod.rs @@ -95,7 +95,7 @@ where Shader::from_wgsl ); - let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { return; }; @@ -110,7 +110,7 @@ where } fn finish(&self, app: &mut bevy_app::App) { - let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { return; }; @@ -134,7 +134,10 @@ where M::Data: PartialEq + Eq + Hash + Clone, { fn build(&self, app: &mut bevy_app::App) { - let no_prepass_plugin_loaded = app.world.get_resource::().is_none(); + let no_prepass_plugin_loaded = app + .world() + .get_resource::() + .is_none(); if no_prepass_plugin_loaded { app.insert_resource(AnyPrepassPluginLoaded) @@ -149,7 +152,7 @@ where ); } - let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { return; }; diff --git a/crates/bevy_pbr/src/render/fog.rs b/crates/bevy_pbr/src/render/fog.rs index 10fb61ff2bcc9d..78b69cde3670a6 100644 --- a/crates/bevy_pbr/src/render/fog.rs +++ b/crates/bevy_pbr/src/render/fog.rs @@ -132,7 +132,7 @@ impl Plugin for FogPlugin { app.register_type::(); app.add_plugins(ExtractComponentPlugin::::default()); - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { render_app .init_resource::() .add_systems(Render, prepare_fog.in_set(RenderSet::PrepareResources)); diff --git a/crates/bevy_pbr/src/render/mesh.rs b/crates/bevy_pbr/src/render/mesh.rs index a8127d0ce59ea3..4cf2c1b9b016c4 100644 --- a/crates/bevy_pbr/src/render/mesh.rs +++ b/crates/bevy_pbr/src/render/mesh.rs @@ -107,7 +107,7 @@ impl Plugin for MeshRenderPlugin { load_internal_asset!(app, SKINNING_HANDLE, "skinning.wgsl", Shader::from_wgsl); load_internal_asset!(app, MORPH_HANDLE, "morph.wgsl", Shader::from_wgsl); - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { render_app .init_resource::() .init_resource::() @@ -132,9 +132,9 @@ impl Plugin for MeshRenderPlugin { fn finish(&self, app: &mut bevy_app::App) { let mut mesh_bindings_shader_defs = Vec::with_capacity(1); - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { if let Some(per_object_buffer_batch_size) = GpuArrayBuffer::::batch_size( - render_app.world.resource::(), + render_app.world().resource::(), ) { mesh_bindings_shader_defs.push(ShaderDefVal::UInt( "PER_OBJECT_BUFFER_BATCH_SIZE".into(), @@ -144,7 +144,7 @@ impl Plugin for MeshRenderPlugin { render_app .insert_resource(GpuArrayBuffer::::new( - render_app.world.resource::(), + render_app.world().resource::(), )) .init_resource::(); } diff --git a/crates/bevy_pbr/src/ssao/mod.rs b/crates/bevy_pbr/src/ssao/mod.rs index 3a31c0afbe6209..364f4ebc06c08d 100644 --- a/crates/bevy_pbr/src/ssao/mod.rs +++ b/crates/bevy_pbr/src/ssao/mod.rs @@ -82,12 +82,12 @@ impl Plugin for ScreenSpaceAmbientOcclusionPlugin { } fn finish(&self, app: &mut App) { - let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { return; }; if !render_app - .world + .world() .resource::() .get_texture_format_features(TextureFormat::R16Float) .allowed_usages @@ -98,7 +98,7 @@ impl Plugin for ScreenSpaceAmbientOcclusionPlugin { } if render_app - .world + .world() .resource::() .limits() .max_storage_textures_per_shader_stage diff --git a/crates/bevy_pbr/src/wireframe.rs b/crates/bevy_pbr/src/wireframe.rs index 58dd5ada642517..b6a275d4f4da86 100644 --- a/crates/bevy_pbr/src/wireframe.rs +++ b/crates/bevy_pbr/src/wireframe.rs @@ -44,7 +44,7 @@ impl Plugin for WireframePlugin { ExtractComponentPlugin::::default(), )); - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { render_app .add_render_command::() .init_resource::>() @@ -53,7 +53,7 @@ impl Plugin for WireframePlugin { } fn finish(&self, app: &mut bevy_app::App) { - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { render_app.init_resource::(); } } diff --git a/crates/bevy_render/src/camera/mod.rs b/crates/bevy_render/src/camera/mod.rs index 2a92ff159692c9..d24ff7baca9550 100644 --- a/crates/bevy_render/src/camera/mod.rs +++ b/crates/bevy_render/src/camera/mod.rs @@ -35,13 +35,13 @@ impl Plugin for CameraPlugin { ExtractResourcePlugin::::default(), )); - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { render_app .init_resource::() .add_systems(ExtractSchedule, extract_cameras) .add_systems(Render, sort_cameras.in_set(RenderSet::ManageViews)); - let camera_driver_node = CameraDriverNode::new(&mut render_app.world); - let mut render_graph = render_app.world.resource_mut::(); + let camera_driver_node = CameraDriverNode::new(render_app.world_mut()); + let mut render_graph = render_app.world_mut().resource_mut::(); render_graph.add_node(crate::main_graph::node::CAMERA_DRIVER, camera_driver_node); } } diff --git a/crates/bevy_render/src/extract_component.rs b/crates/bevy_render/src/extract_component.rs index df555d392a96ba..6ef5061d49004e 100644 --- a/crates/bevy_render/src/extract_component.rs +++ b/crates/bevy_render/src/extract_component.rs @@ -80,7 +80,7 @@ impl Default for UniformComponentPlugin { impl Plugin for UniformComponentPlugin { fn build(&self, app: &mut App) { - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { render_app .insert_resource(ComponentUniforms::::default()) .add_systems( @@ -181,7 +181,7 @@ impl ExtractComponentPlugin { impl Plugin for ExtractComponentPlugin { fn build(&self, app: &mut App) { - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { if self.only_extract_visible { render_app.add_systems(ExtractSchedule, extract_visible_components::); } else { diff --git a/crates/bevy_render/src/extract_resource.rs b/crates/bevy_render/src/extract_resource.rs index ea8f7e81fd52c7..2f63faa7bf91c4 100644 --- a/crates/bevy_render/src/extract_resource.rs +++ b/crates/bevy_render/src/extract_resource.rs @@ -31,7 +31,7 @@ impl Default for ExtractResourcePlugin { impl Plugin for ExtractResourcePlugin { fn build(&self, app: &mut App) { - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { render_app.add_systems(ExtractSchedule, extract_resource::); } } diff --git a/crates/bevy_render/src/globals.rs b/crates/bevy_render/src/globals.rs index 3ceed24476c751..1c0d447f9032af 100644 --- a/crates/bevy_render/src/globals.rs +++ b/crates/bevy_render/src/globals.rs @@ -21,7 +21,7 @@ impl Plugin for GlobalsPlugin { load_internal_asset!(app, GLOBALS_TYPE_HANDLE, "globals.wgsl", Shader::from_wgsl); app.register_type::(); - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { render_app .init_resource::() .init_resource::)); } } diff --git a/crates/bevy_render/src/render_graph/app.rs b/crates/bevy_render/src/render_graph/app.rs index 185260f95b7d91..ea0c1daf3cfbc3 100644 --- a/crates/bevy_render/src/render_graph/app.rs +++ b/crates/bevy_render/src/render_graph/app.rs @@ -1,10 +1,10 @@ -use bevy_app::App; +use bevy_app::{App, SubApp}; use bevy_ecs::world::FromWorld; use bevy_log::warn; use super::{Node, RenderGraph}; -/// Adds common [`RenderGraph`] operations to [`App`]. +/// Adds common [`RenderGraph`] operations to [`SubApp`] (and [`App`](bevy_app::App)). pub trait RenderGraphApp { // Add a sub graph to the [`RenderGraph`] fn add_render_sub_graph(&mut self, sub_graph_name: &'static str) -> &mut Self; @@ -31,14 +31,14 @@ pub trait RenderGraphApp { ) -> &mut Self; } -impl RenderGraphApp for App { +impl RenderGraphApp for SubApp { fn add_render_graph_node( &mut self, sub_graph_name: &'static str, node_name: &'static str, ) -> &mut Self { - let node = T::from_world(&mut self.world); - let mut render_graph = self.world.get_resource_mut::().expect( + let node = T::from_world(self.world_mut()); + let mut render_graph = self.world_mut().get_resource_mut::().expect( "RenderGraph not found. Make sure you are using add_render_graph_node on the RenderApp", ); if let Some(graph) = render_graph.get_sub_graph_mut(sub_graph_name) { @@ -54,7 +54,7 @@ impl RenderGraphApp for App { sub_graph_name: &'static str, edges: &[&'static str], ) -> &mut Self { - let mut render_graph = self.world.get_resource_mut::().expect( + let mut render_graph = self.world_mut().get_resource_mut::().expect( "RenderGraph not found. Make sure you are using add_render_graph_edges on the RenderApp", ); if let Some(graph) = render_graph.get_sub_graph_mut(sub_graph_name) { @@ -71,7 +71,7 @@ impl RenderGraphApp for App { output_edge: &'static str, input_edge: &'static str, ) -> &mut Self { - let mut render_graph = self.world.get_resource_mut::().expect( + let mut render_graph = self.world_mut().get_resource_mut::().expect( "RenderGraph not found. Make sure you are using add_render_graph_edge on the RenderApp", ); if let Some(graph) = render_graph.get_sub_graph_mut(sub_graph_name) { @@ -83,10 +83,45 @@ impl RenderGraphApp for App { } fn add_render_sub_graph(&mut self, sub_graph_name: &'static str) -> &mut Self { - let mut render_graph = self.world.get_resource_mut::().expect( + let mut render_graph = self.world_mut().get_resource_mut::().expect( "RenderGraph not found. Make sure you are using add_render_sub_graph on the RenderApp", ); render_graph.add_sub_graph(sub_graph_name, RenderGraph::default()); self } } + +impl RenderGraphApp for App { + fn add_render_graph_node( + &mut self, + sub_graph_name: &'static str, + node_name: &'static str, + ) -> &mut Self { + SubApp::add_render_graph_node::(self.main_mut(), sub_graph_name, node_name); + self + } + + fn add_render_graph_edge( + &mut self, + sub_graph_name: &'static str, + output_edge: &'static str, + input_edge: &'static str, + ) -> &mut Self { + SubApp::add_render_graph_edge(self.main_mut(), sub_graph_name, output_edge, input_edge); + self + } + + fn add_render_graph_edges( + &mut self, + sub_graph_name: &'static str, + edges: &[&'static str], + ) -> &mut Self { + SubApp::add_render_graph_edges(self.main_mut(), sub_graph_name, edges); + self + } + + fn add_render_sub_graph(&mut self, sub_graph_name: &'static str) -> &mut Self { + SubApp::add_render_sub_graph(self.main_mut(), sub_graph_name); + self + } +} diff --git a/crates/bevy_render/src/render_phase/draw.rs b/crates/bevy_render/src/render_phase/draw.rs index 405467ebeccc0b..73f415b4794a91 100644 --- a/crates/bevy_render/src/render_phase/draw.rs +++ b/crates/bevy_render/src/render_phase/draw.rs @@ -1,5 +1,5 @@ use crate::render_phase::{PhaseItem, TrackedRenderPass}; -use bevy_app::App; +use bevy_app::{App, SubApp}; use bevy_ecs::{ entity::Entity, query::{QueryState, ROQueryItem, ReadOnlyWorldQuery}, @@ -283,16 +283,16 @@ pub trait AddRenderCommand { C::Param: ReadOnlySystemParam; } -impl AddRenderCommand for App { +impl AddRenderCommand for SubApp { fn add_render_command + Send + Sync + 'static>( &mut self, ) -> &mut Self where C::Param: ReadOnlySystemParam, { - let draw_function = RenderCommandState::::new(&mut self.world); + let draw_function = RenderCommandState::::new(self.world_mut()); let draw_functions = self - .world + .world() .get_resource::>() .unwrap_or_else(|| { panic!( @@ -305,3 +305,15 @@ impl AddRenderCommand for App { self } } + +impl AddRenderCommand for App { + fn add_render_command + Send + Sync + 'static>( + &mut self, + ) -> &mut Self + where + C::Param: ReadOnlySystemParam, + { + SubApp::add_render_command::(self.main_mut()); + self + } +} diff --git a/crates/bevy_render/src/texture/mod.rs b/crates/bevy_render/src/texture/mod.rs index 7f08ec46c93a3b..996bedfd95fea4 100644 --- a/crates/bevy_render/src/texture/mod.rs +++ b/crates/bevy_render/src/texture/mod.rs @@ -86,12 +86,14 @@ impl Plugin for ImagePlugin { .register_type::() .init_asset::() .register_asset_reflect::(); - app.world + + app.world_mut() .resource_mut::>() .insert(Handle::default(), Image::default()); + #[cfg(feature = "basis-universal")] if let Some(processor) = app - .world + .world() .get_resource::() { processor.register_processor::>( @@ -101,7 +103,7 @@ impl Plugin for ImagePlugin { .set_default_processor::>("png"); } - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { render_app.init_resource::().add_systems( Render, update_texture_cache_system.in_set(RenderSet::Cleanup), @@ -134,9 +136,9 @@ impl Plugin for ImagePlugin { app.init_asset_loader::(); } - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { let default_sampler = { - let device = render_app.world.resource::(); + let device = render_app.world().resource::(); device.create_sampler(&self.default_sampler.clone()) }; render_app diff --git a/crates/bevy_render/src/view/mod.rs b/crates/bevy_render/src/view/mod.rs index 012a62f76d80cb..e0fb8b2a8a4d72 100644 --- a/crates/bevy_render/src/view/mod.rs +++ b/crates/bevy_render/src/view/mod.rs @@ -51,7 +51,7 @@ impl Plugin for ViewPlugin { // NOTE: windows.is_changed() handles cases where a window was resized .add_plugins((ExtractResourcePlugin::::default(), VisibilityPlugin)); - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { render_app.init_resource::().add_systems( Render, ( diff --git a/crates/bevy_render/src/view/visibility/mod.rs b/crates/bevy_render/src/view/visibility/mod.rs index f55563751ff78d..ab4b483f10eeb2 100644 --- a/crates/bevy_render/src/view/visibility/mod.rs +++ b/crates/bevy_render/src/view/visibility/mod.rs @@ -496,59 +496,59 @@ mod test { app.add_systems(Update, visibility_propagate_system); let root1 = app - .world + .world_mut() .spawn(VisibilityBundle { visibility: Visibility::Hidden, ..Default::default() }) .id(); - let root1_child1 = app.world.spawn(VisibilityBundle::default()).id(); + let root1_child1 = app.world_mut().spawn(VisibilityBundle::default()).id(); let root1_child2 = app - .world + .world_mut() .spawn(VisibilityBundle { visibility: Visibility::Hidden, ..Default::default() }) .id(); - let root1_child1_grandchild1 = app.world.spawn(VisibilityBundle::default()).id(); - let root1_child2_grandchild1 = app.world.spawn(VisibilityBundle::default()).id(); + let root1_child1_grandchild1 = app.world_mut().spawn(VisibilityBundle::default()).id(); + let root1_child2_grandchild1 = app.world_mut().spawn(VisibilityBundle::default()).id(); - app.world + app.world_mut() .entity_mut(root1) .push_children(&[root1_child1, root1_child2]); - app.world + app.world_mut() .entity_mut(root1_child1) .push_children(&[root1_child1_grandchild1]); - app.world + app.world_mut() .entity_mut(root1_child2) .push_children(&[root1_child2_grandchild1]); - let root2 = app.world.spawn(VisibilityBundle::default()).id(); - let root2_child1 = app.world.spawn(VisibilityBundle::default()).id(); + let root2 = app.world_mut().spawn(VisibilityBundle::default()).id(); + let root2_child1 = app.world_mut().spawn(VisibilityBundle::default()).id(); let root2_child2 = app - .world + .world_mut() .spawn(VisibilityBundle { visibility: Visibility::Hidden, ..Default::default() }) .id(); - let root2_child1_grandchild1 = app.world.spawn(VisibilityBundle::default()).id(); - let root2_child2_grandchild1 = app.world.spawn(VisibilityBundle::default()).id(); + let root2_child1_grandchild1 = app.world_mut().spawn(VisibilityBundle::default()).id(); + let root2_child2_grandchild1 = app.world_mut().spawn(VisibilityBundle::default()).id(); - app.world + app.world_mut() .entity_mut(root2) .push_children(&[root2_child1, root2_child2]); - app.world + app.world_mut() .entity_mut(root2_child1) .push_children(&[root2_child1_grandchild1]); - app.world + app.world_mut() .entity_mut(root2_child2) .push_children(&[root2_child2_grandchild1]); app.update(); let is_visible = |e: Entity| { - app.world + app.world() .entity(e) .get::() .unwrap() @@ -603,35 +603,35 @@ mod test { app.add_systems(Update, visibility_propagate_system); let root1 = app - .world + .world_mut() .spawn(VisibilityBundle { visibility: Visibility::Visible, ..Default::default() }) .id(); let root1_child1 = app - .world + .world_mut() .spawn(VisibilityBundle { visibility: Visibility::Inherited, ..Default::default() }) .id(); let root1_child2 = app - .world + .world_mut() .spawn(VisibilityBundle { visibility: Visibility::Hidden, ..Default::default() }) .id(); let root1_child1_grandchild1 = app - .world + .world_mut() .spawn(VisibilityBundle { visibility: Visibility::Visible, ..Default::default() }) .id(); let root1_child2_grandchild1 = app - .world + .world_mut() .spawn(VisibilityBundle { visibility: Visibility::Visible, ..Default::default() @@ -639,34 +639,34 @@ mod test { .id(); let root2 = app - .world + .world_mut() .spawn(VisibilityBundle { visibility: Visibility::Inherited, ..Default::default() }) .id(); let root3 = app - .world + .world_mut() .spawn(VisibilityBundle { visibility: Visibility::Hidden, ..Default::default() }) .id(); - app.world + app.world_mut() .entity_mut(root1) .push_children(&[root1_child1, root1_child2]); - app.world + app.world_mut() .entity_mut(root1_child1) .push_children(&[root1_child1_grandchild1]); - app.world + app.world_mut() .entity_mut(root1_child2) .push_children(&[root1_child2_grandchild1]); app.update(); let is_visible = |e: Entity| { - app.world + app.world() .entity(e) .get::() .unwrap() diff --git a/crates/bevy_render/src/view/window/mod.rs b/crates/bevy_render/src/view/window/mod.rs index 213f609e5c9e0e..980e7f8b1ec5fb 100644 --- a/crates/bevy_render/src/view/window/mod.rs +++ b/crates/bevy_render/src/view/window/mod.rs @@ -31,18 +31,17 @@ impl Plugin for WindowRenderPlugin { fn build(&self, app: &mut App) { app.add_plugins(ScreenshotPlugin); - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { render_app .init_resource::() .init_resource::() - .init_non_send_resource::() .add_systems(ExtractSchedule, extract_windows) .add_systems(Render, prepare_windows.in_set(RenderSet::ManageViews)); } } fn finish(&self, app: &mut App) { - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { render_app.init_resource::(); } } @@ -212,7 +211,7 @@ pub struct WindowSurfaces { pub fn prepare_windows( // By accessing a NonSend resource, we tell the scheduler to put this system on the main thread, // which is necessary for some OS s - _marker: NonSend, + _marker: Option>, mut windows: ResMut, mut window_surfaces: ResMut, render_device: Res, diff --git a/crates/bevy_render/src/view/window/screenshot.rs b/crates/bevy_render/src/view/window/screenshot.rs index 6907cd690ca920..74015551444e43 100644 --- a/crates/bevy_render/src/view/window/screenshot.rs +++ b/crates/bevy_render/src/view/window/screenshot.rs @@ -136,13 +136,13 @@ impl Plugin for ScreenshotPlugin { } fn finish(&self, app: &mut bevy_app::App) { - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { render_app.init_resource::>(); } #[cfg(feature = "bevy_ci_testing")] if app - .world + .world() .contains_resource::() { app.add_systems(bevy_app::Update, ci_testing_screenshot_at); diff --git a/crates/bevy_sprite/src/lib.rs b/crates/bevy_sprite/src/lib.rs index 1eb3b1a5cc64cd..17229dd7b0ff86 100644 --- a/crates/bevy_sprite/src/lib.rs +++ b/crates/bevy_sprite/src/lib.rs @@ -72,7 +72,7 @@ impl Plugin for SpritePlugin { calculate_bounds_2d.in_set(VisibilitySystems::CalculateBounds), ); - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { render_app .init_resource::() .init_resource::>() @@ -100,7 +100,7 @@ impl Plugin for SpritePlugin { } fn finish(&self, app: &mut App) { - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { render_app.init_resource::(); } } diff --git a/crates/bevy_sprite/src/mesh2d/color_material.rs b/crates/bevy_sprite/src/mesh2d/color_material.rs index 8e5e39b006a00d..e3c319e2abb957 100644 --- a/crates/bevy_sprite/src/mesh2d/color_material.rs +++ b/crates/bevy_sprite/src/mesh2d/color_material.rs @@ -25,13 +25,15 @@ impl Plugin for ColorMaterialPlugin { app.add_plugins(Material2dPlugin::::default()) .register_asset_reflect::(); - app.world.resource_mut::>().insert( - Handle::::default(), - ColorMaterial { - color: Color::rgb(1.0, 0.0, 1.0), - ..Default::default() - }, - ); + app.world_mut() + .resource_mut::>() + .insert( + Handle::::default(), + ColorMaterial { + color: Color::rgb(1.0, 0.0, 1.0), + ..Default::default() + }, + ); } } diff --git a/crates/bevy_sprite/src/mesh2d/material.rs b/crates/bevy_sprite/src/mesh2d/material.rs index 220931e6453c3e..8711fcb7cd1bf0 100644 --- a/crates/bevy_sprite/src/mesh2d/material.rs +++ b/crates/bevy_sprite/src/mesh2d/material.rs @@ -150,7 +150,7 @@ where app.init_asset::() .add_plugins(ExtractComponentPlugin::>::extract_visible()); - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { render_app .add_render_command::>() .init_resource::>() @@ -172,7 +172,7 @@ where } fn finish(&self, app: &mut App) { - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { render_app.init_resource::>(); } } diff --git a/crates/bevy_sprite/src/mesh2d/mesh.rs b/crates/bevy_sprite/src/mesh2d/mesh.rs index 09b69b296a6644..2e3806c6431814 100644 --- a/crates/bevy_sprite/src/mesh2d/mesh.rs +++ b/crates/bevy_sprite/src/mesh2d/mesh.rs @@ -92,7 +92,7 @@ impl Plugin for Mesh2dRenderPlugin { app.add_plugins(UniformComponentPlugin::::default()); - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { render_app .init_resource::>() .add_systems(ExtractSchedule, extract_mesh2d) @@ -107,7 +107,7 @@ impl Plugin for Mesh2dRenderPlugin { } fn finish(&self, app: &mut bevy_app::App) { - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { render_app.init_resource::(); } } diff --git a/crates/bevy_text/src/lib.rs b/crates/bevy_text/src/lib.rs index f5498d26ef1fb4..3f655e1238c51d 100644 --- a/crates/bevy_text/src/lib.rs +++ b/crates/bevy_text/src/lib.rs @@ -97,7 +97,7 @@ impl Plugin for TextPlugin { ), ); - if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { + if let Some(render_app) = app.get_sub_app_mut(RenderApp) { render_app.add_systems( ExtractSchedule, extract_text2d_sprite.after(SpriteSystem::ExtractSprites), diff --git a/crates/bevy_time/src/lib.rs b/crates/bevy_time/src/lib.rs index 8850572b359618..ca7e56a5a2b266 100644 --- a/crates/bevy_time/src/lib.rs +++ b/crates/bevy_time/src/lib.rs @@ -52,11 +52,11 @@ impl Plugin for TimePlugin { #[cfg(feature = "bevy_ci_testing")] if let Some(ci_testing_config) = app - .world + .world() .get_resource::() { if let Some(frame_time) = ci_testing_config.frame_time { - app.world + app.world_mut() .insert_resource(TimeUpdateStrategy::ManualDuration(Duration::from_secs_f32( frame_time, ))); diff --git a/crates/bevy_transform/src/systems.rs b/crates/bevy_transform/src/systems.rs index 76ba509f6743b4..67aea5cdac622b 100644 --- a/crates/bevy_transform/src/systems.rs +++ b/crates/bevy_transform/src/systems.rs @@ -414,7 +414,7 @@ mod test { let mut child = Entity::from_raw(0); let mut grandchild = Entity::from_raw(1); let parent = app - .world + .world_mut() .spawn(( Transform::from_translation(translation), GlobalTransform::IDENTITY, @@ -432,13 +432,16 @@ mod test { app.update(); // check the `Children` structure is spawned - assert_eq!(&**app.world.get::(parent).unwrap(), &[child]); - assert_eq!(&**app.world.get::(child).unwrap(), &[grandchild]); + assert_eq!(&**app.world().get::(parent).unwrap(), &[child]); + assert_eq!( + &**app.world().get::(child).unwrap(), + &[grandchild] + ); // Note that at this point, the `GlobalTransform`s will not have updated yet, due to `Commands` delay app.update(); - let mut state = app.world.query::<&GlobalTransform>(); - for global in state.iter(&app.world) { + let mut state = app.world_mut().query::<&GlobalTransform>(); + for global in state.iter(app.world()) { assert_eq!(global, &GlobalTransform::from_translation(translation)); } } @@ -466,16 +469,16 @@ mod test { } let (temp_child, temp_grandchild) = setup_world(&mut temp); - let (child, grandchild) = setup_world(&mut app.world); + let (child, grandchild) = setup_world(app.world_mut()); assert_eq!(temp_child, child); assert_eq!(temp_grandchild, grandchild); - app.world + app.world_mut() .spawn(TransformBundle::IDENTITY) .push_children(&[child]); std::mem::swap( - &mut *app.world.get_mut::(child).unwrap(), + &mut *app.world_mut().get_mut::(child).unwrap(), &mut *temp.get_mut::(grandchild).unwrap(), ); diff --git a/crates/bevy_ui/src/lib.rs b/crates/bevy_ui/src/lib.rs index ae9f9f41885d91..a3840b47458938 100644 --- a/crates/bevy_ui/src/lib.rs +++ b/crates/bevy_ui/src/lib.rs @@ -181,9 +181,8 @@ impl Plugin for UiPlugin { } fn finish(&self, app: &mut App) { - let render_app = match app.get_sub_app_mut(RenderApp) { - Ok(render_app) => render_app, - Err(_) => return, + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { + return; }; render_app.init_resource::(); diff --git a/crates/bevy_ui/src/render/mod.rs b/crates/bevy_ui/src/render/mod.rs index c4195a6f412005..1239b22d490ae3 100644 --- a/crates/bevy_ui/src/render/mod.rs +++ b/crates/bevy_ui/src/render/mod.rs @@ -61,9 +61,8 @@ pub enum RenderUiSystem { pub fn build_ui_render(app: &mut App) { load_internal_asset!(app, UI_SHADER_HANDLE, "ui.wgsl", Shader::from_wgsl); - let render_app = match app.get_sub_app_mut(RenderApp) { - Ok(render_app) => render_app, - Err(_) => return, + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { + return; }; render_app @@ -99,7 +98,7 @@ pub fn build_ui_render(app: &mut App) { // Render graph let ui_graph_2d = get_ui_graph(render_app); let ui_graph_3d = get_ui_graph(render_app); - let mut graph = render_app.world.resource_mut::(); + let mut graph = render_app.world_mut().resource_mut::(); if let Some(graph_2d) = graph.get_sub_graph_mut(bevy_core_pipeline::core_2d::graph::NAME) { graph_2d.add_sub_graph(draw_ui_graph::NAME, ui_graph_2d); @@ -142,8 +141,8 @@ pub fn build_ui_render(app: &mut App) { } } -fn get_ui_graph(render_app: &mut App) -> RenderGraph { - let ui_pass_node = UiPassNode::new(&mut render_app.world); +fn get_ui_graph(render_app: &mut SubApp) -> RenderGraph { + let ui_pass_node = UiPassNode::new(render_app.world_mut()); let mut ui_graph = RenderGraph::default(); ui_graph.add_node(draw_ui_graph::node::UI_PASS, ui_pass_node); ui_graph diff --git a/crates/bevy_window/src/lib.rs b/crates/bevy_window/src/lib.rs index 174f8c11be0a87..d76b90a985ede4 100644 --- a/crates/bevy_window/src/lib.rs +++ b/crates/bevy_window/src/lib.rs @@ -92,7 +92,7 @@ impl Plugin for WindowPlugin { .add_event::(); if let Some(primary_window) = &self.primary_window { - app.world + app.world_mut() .spawn(primary_window.clone()) .insert(PrimaryWindow); } diff --git a/crates/bevy_winit/src/lib.rs b/crates/bevy_winit/src/lib.rs index d6ea22e368388c..4c68a31de3ed5f 100644 --- a/crates/bevy_winit/src/lib.rs +++ b/crates/bevy_winit/src/lib.rs @@ -127,7 +127,7 @@ impl Plugin for WinitPlugin { NonSendMut, ResMut, ResMut, - )> = SystemState::from_world(&mut app.world); + )> = SystemState::from_world(app.world_mut()); #[cfg(target_arch = "wasm32")] let mut create_window_system_state: SystemState<( @@ -139,7 +139,7 @@ impl Plugin for WinitPlugin { ResMut, ResMut, ResMut, - )> = SystemState::from_world(&mut app.world); + )> = SystemState::from_world(app.world_mut()); #[cfg(not(target_arch = "wasm32"))] let ( @@ -150,7 +150,7 @@ impl Plugin for WinitPlugin { adapters, handlers, accessibility_requested, - ) = create_window_system_state.get_mut(&mut app.world); + ) = create_window_system_state.get_mut(app.world_mut()); #[cfg(target_arch = "wasm32")] let ( @@ -162,7 +162,7 @@ impl Plugin for WinitPlugin { handlers, accessibility_requested, event_channel, - ) = create_window_system_state.get_mut(&mut app.world); + ) = create_window_system_state.get_mut(app.world_mut()); create_windows( &event_loop, @@ -177,7 +177,7 @@ impl Plugin for WinitPlugin { event_channel, ); - create_window_system_state.apply(&mut app.world); + create_window_system_state.apply(app.world_mut()); } // `winit`'s windows are bound to the event loop that created them, so the event loop must @@ -289,13 +289,13 @@ impl Default for WinitAppRunnerState { /// `EventLoop`. pub fn winit_runner(mut app: App) { let mut event_loop = app - .world + .world_mut() .remove_non_send_resource::>() .unwrap(); - let return_from_run = app.world.resource::().return_from_run; + let return_from_run = app.world().resource::().return_from_run; - app.world + app.world_mut() .insert_non_send_resource(event_loop.create_proxy()); let mut runner_state = WinitAppRunnerState::default(); @@ -305,13 +305,13 @@ pub fn winit_runner(mut app: App) { let mut redraw_event_reader = ManualEventReader::::default(); let mut focused_windows_state: SystemState<(Res, Query<&Window>)> = - SystemState::new(&mut app.world); + SystemState::new(app.world_mut()); let mut event_writer_system_state: SystemState<( WindowAndInputEventWriters, NonSend, Query<(&mut Window, &mut CachedWindow)>, - )> = SystemState::new(&mut app.world); + )> = SystemState::new(app.world_mut()); #[cfg(not(target_arch = "wasm32"))] let mut create_window_system_state: SystemState<( @@ -322,7 +322,7 @@ pub fn winit_runner(mut app: App) { NonSendMut, ResMut, ResMut, - )> = SystemState::from_world(&mut app.world); + )> = SystemState::from_world(app.world_mut()); #[cfg(target_arch = "wasm32")] let mut create_window_system_state: SystemState<( @@ -334,7 +334,7 @@ pub fn winit_runner(mut app: App) { ResMut, ResMut, ResMut, - )> = SystemState::from_world(&mut app.world); + )> = SystemState::from_world(app.world_mut()); let mut finished_and_setup_done = false; @@ -346,7 +346,7 @@ pub fn winit_runner(mut app: App) { let _span = bevy_utils::tracing::info_span!("winit event_handler").entered(); if !finished_and_setup_done { - if !app.ready() { + if !app.is_ready() { #[cfg(not(target_arch = "wasm32"))] tick_global_task_pools_on_main_thread(); } else { @@ -355,7 +355,7 @@ pub fn winit_runner(mut app: App) { finished_and_setup_done = true; } - if let Some(app_exit_events) = app.world.get_resource::>() { + if let Some(app_exit_events) = app.world().get_resource::>() { if app_exit_event_reader.read(app_exit_events).last().is_some() { *control_flow = ControlFlow::Exit; return; @@ -377,7 +377,7 @@ pub fn winit_runner(mut app: App) { adapters, handlers, accessibility_requested, - ) = create_window_system_state.get_mut(&mut app.world); + ) = create_window_system_state.get_mut(app.world_mut()); #[cfg(target_arch = "wasm32")] let ( @@ -389,7 +389,7 @@ pub fn winit_runner(mut app: App) { handlers, accessibility_requested, event_channel, - ) = create_window_system_state.get_mut(&mut app.world); + ) = create_window_system_state.get_mut(app.world_mut()); create_windows( event_loop, @@ -404,7 +404,7 @@ pub fn winit_runner(mut app: App) { event_channel, ); - create_window_system_state.apply(&mut app.world); + create_window_system_state.apply(app.world_mut()); } } _ => { @@ -419,7 +419,7 @@ pub fn winit_runner(mut app: App) { event, window_id, .. } => { let (mut event_writers, winit_windows, mut windows) = - event_writer_system_state.get_mut(&mut app.world); + event_writer_system_state.get_mut(app.world_mut()); let Some(window_entity) = winit_windows.get_window_entity(window_id) else { warn!( @@ -655,7 +655,7 @@ pub fn winit_runner(mut app: App) { event: DeviceEvent::MouseMotion { delta: (x, y) }, .. } => { - let (mut event_writers, _, _) = event_writer_system_state.get_mut(&mut app.world); + let (mut event_writers, _, _) = event_writer_system_state.get_mut(app.world_mut()); event_writers.mouse_motion.send(MouseMotion { delta: Vec2::new(x as f32, y as f32), }); @@ -677,7 +677,7 @@ pub fn winit_runner(mut app: App) { } event::Event::MainEventsCleared => { if runner_state.is_active { - let (config, windows) = focused_windows_state.get(&app.world); + let (config, windows) = focused_windows_state.get(app.world()); let focused = windows.iter().any(|window| window.focused); let should_update = match config.update_mode(focused) { UpdateMode::Continuous | UpdateMode::Reactive { .. } => { @@ -704,7 +704,7 @@ pub fn winit_runner(mut app: App) { app.update(); // decide when to run the next update - let (config, windows) = focused_windows_state.get(&app.world); + let (config, windows) = focused_windows_state.get(app.world()); let focused = windows.iter().any(|window| window.focused); match config.update_mode(focused) { UpdateMode::Continuous => *control_flow = ControlFlow::Poll, @@ -721,7 +721,7 @@ pub fn winit_runner(mut app: App) { } if let Some(app_redraw_events) = - app.world.get_resource::>() + app.world().get_resource::>() { if redraw_event_reader.read(app_redraw_events).last().is_some() { runner_state.redraw_requested = true; @@ -729,7 +729,8 @@ pub fn winit_runner(mut app: App) { } } - if let Some(app_exit_events) = app.world.get_resource::>() { + if let Some(app_exit_events) = app.world().get_resource::>() + { if app_exit_event_reader.read(app_exit_events).last().is_some() { *control_flow = ControlFlow::Exit; } @@ -747,7 +748,7 @@ pub fn winit_runner(mut app: App) { adapters, handlers, accessibility_requested, - ) = create_window_system_state.get_mut(&mut app.world); + ) = create_window_system_state.get_mut(app.world_mut()); #[cfg(target_arch = "wasm32")] let ( @@ -759,7 +760,7 @@ pub fn winit_runner(mut app: App) { handlers, accessibility_requested, event_channel, - ) = create_window_system_state.get_mut(&mut app.world); + ) = create_window_system_state.get_mut(app.world_mut()); create_windows( event_loop, @@ -774,7 +775,7 @@ pub fn winit_runner(mut app: App) { event_channel, ); - create_window_system_state.apply(&mut app.world); + create_window_system_state.apply(app.world_mut()); } } _ => (), diff --git a/examples/2d/mesh2d_manual.rs b/examples/2d/mesh2d_manual.rs index 5a9e0547751b8a..93860ee3cb1d10 100644 --- a/examples/2d/mesh2d_manual.rs +++ b/examples/2d/mesh2d_manual.rs @@ -265,7 +265,7 @@ pub const COLORED_MESH2D_SHADER_HANDLE: Handle = impl Plugin for ColoredMesh2dPlugin { fn build(&self, app: &mut App) { // Load our custom shader - let mut shaders = app.world.resource_mut::>(); + let mut shaders = app.world_mut().resource_mut::>(); shaders.insert( COLORED_MESH2D_SHADER_HANDLE, Shader::from_wgsl(COLORED_MESH2D_SHADER, file!()), diff --git a/examples/app/custom_loop.rs b/examples/app/custom_loop.rs index 17f70ae9f6d389..3d76bed2dff915 100644 --- a/examples/app/custom_loop.rs +++ b/examples/app/custom_loop.rs @@ -11,7 +11,7 @@ fn my_runner(mut app: App) { println!("Type stuff into the console"); for line in io::stdin().lines() { { - let mut input = app.world.resource_mut::(); + let mut input = app.world_mut().resource_mut::(); input.0 = line.unwrap(); } app.update(); diff --git a/examples/asset/custom_asset_reader.rs b/examples/asset/custom_asset_reader.rs index 99ad8fe07e9733..742a9303da10c2 100644 --- a/examples/asset/custom_asset_reader.rs +++ b/examples/asset/custom_asset_reader.rs @@ -58,7 +58,7 @@ struct CustomAssetReaderPlugin; impl Plugin for CustomAssetReaderPlugin { fn build(&self, app: &mut App) { let mut asset_providers = app - .world + .world_mut() .get_resource_or_insert_with::(Default::default); asset_providers.insert_reader("CustomAssetReader", || { Box::new(CustomAssetReader(FileAssetReader::new("assets"))) diff --git a/examples/shader/compute_shader_game_of_life.rs b/examples/shader/compute_shader_game_of_life.rs index 10c368771474bf..5bfffa0e4abf7f 100644 --- a/examples/shader/compute_shader_game_of_life.rs +++ b/examples/shader/compute_shader_game_of_life.rs @@ -79,7 +79,7 @@ impl Plugin for GameOfLifeComputePlugin { prepare_bind_group.in_set(RenderSet::PrepareBindGroups), ); - let mut render_graph = render_app.world.resource_mut::(); + let mut render_graph = render_app.world_mut().resource_mut::(); render_graph.add_node("game_of_life", GameOfLifeNode::default()); render_graph.add_node_edge( "game_of_life", diff --git a/examples/shader/post_processing.rs b/examples/shader/post_processing.rs index fd6dfc34221738..40b1cf3bdf44cc 100644 --- a/examples/shader/post_processing.rs +++ b/examples/shader/post_processing.rs @@ -65,7 +65,7 @@ impl Plugin for PostProcessPlugin { )); // We need to get the render app from the main app - let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { return; }; @@ -103,7 +103,7 @@ impl Plugin for PostProcessPlugin { fn finish(&self, app: &mut App) { // We need to get the render app from the main app - let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { return; }; diff --git a/examples/shader/texture_binding_array.rs b/examples/shader/texture_binding_array.rs index d2302d298c31e5..295a0a53f3de0b 100644 --- a/examples/shader/texture_binding_array.rs +++ b/examples/shader/texture_binding_array.rs @@ -36,11 +36,11 @@ impl Plugin for GpuFeatureSupportChecker { fn build(&self, _app: &mut App) {} fn finish(&self, app: &mut App) { - let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { return; }; - let render_device = render_app.world.resource::(); + let render_device = render_app.world().resource::(); // Check if the device support the required feature. If not, exit the example. // In a real application, you should setup a fallback for the missing feature diff --git a/examples/stress_tests/many_lights.rs b/examples/stress_tests/many_lights.rs index b42d1b42cc9c55..0697fcffea260f 100644 --- a/examples/stress_tests/many_lights.rs +++ b/examples/stress_tests/many_lights.rs @@ -152,9 +152,8 @@ struct LogVisibleLights; impl Plugin for LogVisibleLights { fn build(&self, app: &mut App) { - let render_app = match app.get_sub_app_mut(RenderApp) { - Ok(render_app) => render_app, - Err(_) => return, + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { + return; }; render_app.add_systems(Render, print_visible_light_count.in_set(RenderSet::Prepare)); diff --git a/tests/how_to_test_systems.rs b/tests/how_to_test_systems.rs index 23b29bd550c2b3..cb7a3d86712e90 100644 --- a/tests/how_to_test_systems.rs +++ b/tests/how_to_test_systems.rs @@ -62,7 +62,7 @@ fn did_hurt_enemy() { // Setup test entities let enemy_id = app - .world + .world_mut() .spawn(Enemy { hit_points: 5, score_value: 3, @@ -73,8 +73,8 @@ fn did_hurt_enemy() { app.update(); // Check resulting changes - assert!(app.world.get::(enemy_id).is_some()); - assert_eq!(app.world.get::(enemy_id).unwrap().hit_points, 4); + assert!(app.world().get::(enemy_id).is_some()); + assert_eq!(app.world().get::(enemy_id).unwrap().hit_points, 4); } #[test] @@ -93,7 +93,7 @@ fn did_despawn_enemy() { // Setup test entities let enemy_id = app - .world + .world_mut() .spawn(Enemy { hit_points: 1, score_value: 1, @@ -104,10 +104,10 @@ fn did_despawn_enemy() { app.update(); // Check enemy was despawned - assert!(app.world.get::(enemy_id).is_none()); + assert!(app.world().get::(enemy_id).is_none()); // Get `EnemyDied` event reader - let enemy_died_events = app.world.resource::>(); + let enemy_died_events = app.world().resource::>(); let mut enemy_died_reader = enemy_died_events.get_reader(); let enemy_died = enemy_died_reader.read(enemy_died_events).next().unwrap(); @@ -132,16 +132,16 @@ fn spawn_enemy_using_input_resource() { app.update(); // Check resulting changes, one entity has been spawned with `Enemy` component - assert_eq!(app.world.query::<&Enemy>().iter(&app.world).len(), 1); + assert_eq!(app.world_mut().query::<&Enemy>().iter(app.world()).len(), 1); // Clear the `just_pressed` status for all `KeyCode`s - app.world.resource_mut::>().clear(); + app.world_mut().resource_mut::>().clear(); // Run systems app.update(); // Check resulting changes, no new entity has been spawned - assert_eq!(app.world.query::<&Enemy>().iter(&app.world).len(), 1); + assert_eq!(app.world_mut().query::<&Enemy>().iter(app.world()).len(), 1); } #[test] @@ -159,7 +159,7 @@ fn update_score_on_event() { app.add_systems(Update, update_score); // Send an `EnemyDied` event - app.world + app.world_mut() .resource_mut::>() .send(EnemyDied(3)); @@ -167,5 +167,5 @@ fn update_score_on_event() { app.update(); // Check resulting changes - assert_eq!(app.world.resource::().0, 3); + assert_eq!(app.world().resource::().0, 3); }