From 7b2012ead8329d4616d5079d4fda1906552f69fb Mon Sep 17 00:00:00 2001 From: Joseph <21144246+JoJoJet@users.noreply.github.com> Date: Sun, 21 Jul 2024 15:11:03 -0700 Subject: [PATCH 01/14] remove incorrect Eq impls for asset error types --- crates/bevy_asset/src/server/mod.rs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/crates/bevy_asset/src/server/mod.rs b/crates/bevy_asset/src/server/mod.rs index 10b5079de9b20..59f43430e9deb 100644 --- a/crates/bevy_asset/src/server/mod.rs +++ b/crates/bevy_asset/src/server/mod.rs @@ -1366,7 +1366,7 @@ pub enum RecursiveDependencyLoadState { } /// An error that occurs during an [`Asset`] load. -#[derive(Error, Debug, Clone, PartialEq, Eq)] +#[derive(Error, Debug, Clone, PartialEq)] pub enum AssetLoadError { #[error("Requested handle of type {requested:?} for asset '{path}' does not match actual asset type '{actual_asset_name}', which used loader '{loader_name}'")] RequestedHandleTypeMismatch { @@ -1439,8 +1439,6 @@ impl PartialEq for AssetLoaderError { } } -impl Eq for AssetLoaderError {} - impl AssetLoaderError { pub fn path(&self) -> &AssetPath<'static> { &self.path @@ -1461,8 +1459,6 @@ impl PartialEq for AddAsyncError { } } -impl Eq for AddAsyncError {} - /// An error that occurs when an [`AssetLoader`] is not registered for a given extension. #[derive(Error, Debug, Clone, PartialEq, Eq)] #[error("no `AssetLoader` found{}", format_missing_asset_ext(.extensions))] From 51a6f59642a74eff2cd29d5f9283d3c5fcbda036 Mon Sep 17 00:00:00 2001 From: Joseph <21144246+JoJoJet@users.noreply.github.com> Date: Sun, 21 Jul 2024 15:33:24 -0700 Subject: [PATCH 02/14] remove partialeq impls --- crates/bevy_asset/src/server/info.rs | 2 +- crates/bevy_asset/src/server/mod.rs | 33 ++++++++++------------------ 2 files changed, 12 insertions(+), 23 deletions(-) diff --git a/crates/bevy_asset/src/server/info.rs b/crates/bevy_asset/src/server/info.rs index 98d92702077c7..2e54c3d317f57 100644 --- a/crates/bevy_asset/src/server/info.rs +++ b/crates/bevy_asset/src/server/info.rs @@ -540,7 +540,7 @@ impl AssetInfos { info.loading_rec_dependencies.remove(&loaded_id); if info.loading_rec_dependencies.is_empty() && info.failed_rec_dependencies.is_empty() { info.rec_dep_load_state = RecursiveDependencyLoadState::Loaded; - if info.load_state == LoadState::Loaded { + if info.load_state.is_loaded() { sender .send(InternalAssetEvent::LoadedWithDependencies { id: waiting_id }) .unwrap(); diff --git a/crates/bevy_asset/src/server/mod.rs b/crates/bevy_asset/src/server/mod.rs index 59f43430e9deb..352750bd8cad8 100644 --- a/crates/bevy_asset/src/server/mod.rs +++ b/crates/bevy_asset/src/server/mod.rs @@ -27,7 +27,7 @@ use info::*; use loaders::*; use parking_lot::RwLock; use std::future::Future; -use std::{any::Any, path::PathBuf}; +use std::path::PathBuf; use std::{any::TypeId, path::Path, sync::Arc}; use thiserror::Error; @@ -930,7 +930,7 @@ impl AssetServer { /// Returns true if the asset and all of its dependencies (recursive) have been loaded. pub fn is_loaded_with_dependencies(&self, id: impl Into) -> bool { let id = id.into(); - self.load_state(id) == LoadState::Loaded + self.load_state(id).is_loaded() && self.recursive_dependency_load_state(id) == RecursiveDependencyLoadState::Loaded } @@ -1327,7 +1327,7 @@ pub(crate) enum InternalAssetEvent { } /// The load state of an asset. -#[derive(Component, Clone, Debug, PartialEq, Eq)] +#[derive(Component, Clone, Debug)] pub enum LoadState { /// The asset has not started loading yet NotLoaded, @@ -1339,6 +1339,13 @@ pub enum LoadState { Failed(Box), } +impl LoadState { + /// Returns `true` if this instance is [`LoadState::Loaded`] + fn is_loaded(&self) -> bool { + matches!(self, Self::Loaded) + } +} + /// The load state of an asset's dependencies. #[derive(Component, Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd)] pub enum DependencyLoadState { @@ -1366,7 +1373,7 @@ pub enum RecursiveDependencyLoadState { } /// An error that occurs during an [`Asset`] load. -#[derive(Error, Debug, Clone, PartialEq)] +#[derive(Error, Debug, Clone)] pub enum AssetLoadError { #[error("Requested handle of type {requested:?} for asset '{path}' does not match actual asset type '{actual_asset_name}', which used loader '{loader_name}'")] RequestedHandleTypeMismatch { @@ -1429,16 +1436,6 @@ pub struct AssetLoaderError { error: Arc, } -impl PartialEq for AssetLoaderError { - /// Equality comparison for `AssetLoaderError::error` is not full (only through `TypeId`) - #[inline] - fn eq(&self, other: &Self) -> bool { - self.path == other.path - && self.loader_name == other.loader_name - && self.error.type_id() == other.error.type_id() - } -} - impl AssetLoaderError { pub fn path(&self) -> &AssetPath<'static> { &self.path @@ -1451,14 +1448,6 @@ pub struct AddAsyncError { error: Arc, } -impl PartialEq for AddAsyncError { - /// Equality comparison is not full (only through `TypeId`) - #[inline] - fn eq(&self, other: &Self) -> bool { - self.error.type_id() == other.error.type_id() - } -} - /// An error that occurs when an [`AssetLoader`] is not registered for a given extension. #[derive(Error, Debug, Clone, PartialEq, Eq)] #[error("no `AssetLoader` found{}", format_missing_asset_ext(.extensions))] From ca326f33419b4575ddf425833b7d021bdf4841a4 Mon Sep 17 00:00:00 2001 From: Joseph <21144246+JoJoJet@users.noreply.github.com> Date: Sun, 21 Jul 2024 15:45:58 -0700 Subject: [PATCH 03/14] replace usages --- crates/bevy_asset/src/lib.rs | 35 +++++++++---------- crates/bevy_asset/src/server/mod.rs | 2 +- crates/bevy_gltf/src/loader.rs | 2 +- examples/3d/pbr.rs | 8 +++-- examples/3d/skybox.rs | 2 +- examples/shader/array_texture.rs | 4 ++- .../tools/scene_viewer/scene_viewer_plugin.rs | 5 ++- 7 files changed, 33 insertions(+), 25 deletions(-) diff --git a/crates/bevy_asset/src/lib.rs b/crates/bevy_asset/src/lib.rs index 5a1c4c7756d5d..5f165159542c9 100644 --- a/crates/bevy_asset/src/lib.rs +++ b/crates/bevy_asset/src/lib.rs @@ -759,7 +759,7 @@ mod tests { let (a_load, a_deps, a_rec_deps) = asset_server.get_load_states(a_id).unwrap(); assert_eq!(a_text.text, "a"); assert_eq!(a_text.dependencies.len(), 2); - assert_eq!(a_load, LoadState::Loaded, "a is loaded"); + assert!(a_load.is_loaded(), "a is loaded"); assert_eq!(a_deps, DependencyLoadState::Loading); assert_eq!(a_rec_deps, RecursiveDependencyLoadState::Loading); @@ -767,7 +767,7 @@ mod tests { let b_text = get::(world, b_id); let (b_load, b_deps, b_rec_deps) = asset_server.get_load_states(b_id).unwrap(); assert!(b_text.is_none(), "b component should not exist yet"); - assert_eq!(b_load, LoadState::Loading); + assert!(b_load.is_loaded()); assert_eq!(b_deps, DependencyLoadState::Loading); assert_eq!(b_rec_deps, RecursiveDependencyLoadState::Loading); @@ -775,7 +775,7 @@ mod tests { let c_text = get::(world, c_id); let (c_load, c_deps, c_rec_deps) = asset_server.get_load_states(c_id).unwrap(); assert!(c_text.is_none(), "c component should not exist yet"); - assert_eq!(c_load, LoadState::Loading); + assert!(c_load.is_loaded()); assert_eq!(c_deps, DependencyLoadState::Loading); assert_eq!(c_rec_deps, RecursiveDependencyLoadState::Loading); Some(()) @@ -789,7 +789,7 @@ mod tests { let (a_load, a_deps, a_rec_deps) = asset_server.get_load_states(a_id).unwrap(); assert_eq!(a_text.text, "a"); assert_eq!(a_text.dependencies.len(), 2); - assert_eq!(a_load, LoadState::Loaded); + assert!(a_load.is_loaded()); assert_eq!(a_deps, DependencyLoadState::Loading); assert_eq!(a_rec_deps, RecursiveDependencyLoadState::Loading); @@ -797,7 +797,7 @@ mod tests { let b_text = get::(world, b_id)?; let (b_load, b_deps, b_rec_deps) = asset_server.get_load_states(b_id).unwrap(); assert_eq!(b_text.text, "b"); - assert_eq!(b_load, LoadState::Loaded); + assert!(b_load.is_loaded()); assert_eq!(b_deps, DependencyLoadState::Loaded); assert_eq!(b_rec_deps, RecursiveDependencyLoadState::Loaded); @@ -805,7 +805,7 @@ mod tests { let c_text = get::(world, c_id); let (c_load, c_deps, c_rec_deps) = asset_server.get_load_states(c_id).unwrap(); assert!(c_text.is_none(), "c component should not exist yet"); - assert_eq!(c_load, LoadState::Loading); + assert!(c_load.is_loaded()); assert_eq!(c_deps, DependencyLoadState::Loading); assert_eq!(c_rec_deps, RecursiveDependencyLoadState::Loading); Some(()) @@ -824,14 +824,14 @@ mod tests { assert_eq!(a_text.text, "a"); assert_eq!(a_text.embedded, ""); assert_eq!(a_text.dependencies.len(), 2); - assert_eq!(a_load, LoadState::Loaded); + assert!(a_load.is_loaded()); let b_id = a_text.dependencies[0].id(); let b_text = get::(world, b_id)?; let (b_load, b_deps, b_rec_deps) = asset_server.get_load_states(b_id).unwrap(); assert_eq!(b_text.text, "b"); assert_eq!(b_text.embedded, ""); - assert_eq!(b_load, LoadState::Loaded); + assert!(b_load.is_loaded()); assert_eq!(b_deps, DependencyLoadState::Loaded); assert_eq!(b_rec_deps, RecursiveDependencyLoadState::Loaded); @@ -840,7 +840,7 @@ mod tests { let (c_load, c_deps, c_rec_deps) = asset_server.get_load_states(c_id).unwrap(); assert_eq!(c_text.text, "c"); assert_eq!(c_text.embedded, "ab"); - assert_eq!(c_load, LoadState::Loaded); + assert!(c_load.is_loaded()); assert_eq!( c_deps, DependencyLoadState::Loading, @@ -858,7 +858,7 @@ mod tests { assert_eq!(sub_text.text, "hello"); let (sub_text_load, sub_text_deps, sub_text_rec_deps) = asset_server.get_load_states(sub_text_id).unwrap(); - assert_eq!(sub_text_load, LoadState::Loaded); + assert!(sub_text_load.is_loaded()); assert_eq!(sub_text_deps, DependencyLoadState::Loaded); assert_eq!(sub_text_rec_deps, RecursiveDependencyLoadState::Loaded); @@ -870,9 +870,8 @@ mod tests { assert_eq!(d_deps, DependencyLoadState::Loading); assert_eq!(d_rec_deps, RecursiveDependencyLoadState::Loading); - assert_eq!( - a_deps, - DependencyLoadState::Loaded, + assert!( + a_deps.is_loaded(), "If c has been loaded, the a deps should all be considered loaded" ); assert_eq!( @@ -900,11 +899,11 @@ mod tests { assert_eq!(d_text.text, "d"); assert_eq!(d_text.embedded, ""); - assert_eq!(c_load, LoadState::Loaded); + assert!(c_load.is_loaded()); assert_eq!(c_deps, DependencyLoadState::Loaded); assert_eq!(c_rec_deps, RecursiveDependencyLoadState::Loaded); - assert_eq!(d_load, LoadState::Loaded); + assert!(d_load.is_loaded()); assert_eq!(d_deps, DependencyLoadState::Loaded); assert_eq!(d_rec_deps, RecursiveDependencyLoadState::Loaded); @@ -1089,17 +1088,17 @@ mod tests { assert_eq!(d_rec_deps, RecursiveDependencyLoadState::Failed); assert_eq!(a_text.text, "a"); - assert_eq!(a_load, LoadState::Loaded); + assert!(a_load.is_loaded()); assert_eq!(a_deps, DependencyLoadState::Loaded); assert_eq!(a_rec_deps, RecursiveDependencyLoadState::Failed); assert_eq!(b_text.text, "b"); - assert_eq!(b_load, LoadState::Loaded); + assert!(b_load.is_loaded()); assert_eq!(b_deps, DependencyLoadState::Loaded); assert_eq!(b_rec_deps, RecursiveDependencyLoadState::Loaded); assert_eq!(c_text.text, "c"); - assert_eq!(c_load, LoadState::Loaded); + assert!(c_load.is_loaded()); assert_eq!(c_deps, DependencyLoadState::Failed); assert_eq!(c_rec_deps, RecursiveDependencyLoadState::Failed); diff --git a/crates/bevy_asset/src/server/mod.rs b/crates/bevy_asset/src/server/mod.rs index 352750bd8cad8..273a945ebb9c1 100644 --- a/crates/bevy_asset/src/server/mod.rs +++ b/crates/bevy_asset/src/server/mod.rs @@ -1341,7 +1341,7 @@ pub enum LoadState { impl LoadState { /// Returns `true` if this instance is [`LoadState::Loaded`] - fn is_loaded(&self) -> bool { + pub fn is_loaded(&self) -> bool { matches!(self, Self::Loaded) } } diff --git a/crates/bevy_gltf/src/loader.rs b/crates/bevy_gltf/src/loader.rs index 4306a48d27f65..7f446b0f9070d 100644 --- a/crates/bevy_gltf/src/loader.rs +++ b/crates/bevy_gltf/src/loader.rs @@ -2063,7 +2063,7 @@ mod test { app.update(); run_app_until(&mut app, |_world| { let load_state = asset_server.get_load_state(handle_id).unwrap(); - if load_state == LoadState::Loaded { + if load_state.is_loaded() { Some(()) } else { None diff --git a/examples/3d/pbr.rs b/examples/3d/pbr.rs index 3c7a76211903f..dc3021f03941c 100644 --- a/examples/3d/pbr.rs +++ b/examples/3d/pbr.rs @@ -142,8 +142,12 @@ fn environment_map_load_finish( label_query: Query>, ) { if let Ok(environment_map) = environment_maps.get_single() { - if asset_server.load_state(&environment_map.diffuse_map) == LoadState::Loaded - && asset_server.load_state(&environment_map.specular_map) == LoadState::Loaded + if asset_server + .load_state(&environment_map.diffuse_map) + .is_loaded() + && asset_server + .load_state(&environment_map.specular_map) + .is_loaded() { if let Ok(label_entity) = label_query.get_single() { commands.entity(label_entity).despawn(); diff --git a/examples/3d/skybox.rs b/examples/3d/skybox.rs index 115d378e2e2d6..05e59569f94e4 100644 --- a/examples/3d/skybox.rs +++ b/examples/3d/skybox.rs @@ -147,7 +147,7 @@ fn asset_loaded( mut cubemap: ResMut, mut skyboxes: Query<&mut Skybox>, ) { - if !cubemap.is_loaded && asset_server.load_state(&cubemap.image_handle) == LoadState::Loaded { + if !cubemap.is_loaded && asset_server.load_state(&cubemap.image_handle).is_loaded() { info!("Swapping to {}...", CUBEMAPS[cubemap.index].0); let image = images.get_mut(&cubemap.image_handle).unwrap(); // NOTE: PNGs do not have any metadata that could indicate they contain a cubemap texture, diff --git a/examples/shader/array_texture.rs b/examples/shader/array_texture.rs index 1cd366b092bf3..7c47a3b386971 100644 --- a/examples/shader/array_texture.rs +++ b/examples/shader/array_texture.rs @@ -57,7 +57,9 @@ fn create_array_texture( mut materials: ResMut>, ) { if loading_texture.is_loaded - || asset_server.load_state(loading_texture.handle.id()) != LoadState::Loaded + || !asset_server + .load_state(loading_texture.handle.id()) + .is_loaded() { return; } diff --git a/examples/tools/scene_viewer/scene_viewer_plugin.rs b/examples/tools/scene_viewer/scene_viewer_plugin.rs index 2ff6af4948928..77c12f0ac3727 100644 --- a/examples/tools/scene_viewer/scene_viewer_plugin.rs +++ b/examples/tools/scene_viewer/scene_viewer_plugin.rs @@ -92,7 +92,10 @@ fn scene_load_check( ) { match scene_handle.instance_id { None => { - if asset_server.load_state(&scene_handle.gltf_handle) == LoadState::Loaded { + if asset_server + .load_state(&scene_handle.gltf_handle) + .is_loaded() + { let gltf = gltf_assets.get(&scene_handle.gltf_handle).unwrap(); if gltf.scenes.len() > 1 { info!( From 761f9e33afd504350320ecfb7493b1ad10e43a33 Mon Sep 17 00:00:00 2001 From: Joseph <21144246+JoJoJet@users.noreply.github.com> Date: Sun, 21 Jul 2024 15:48:07 -0700 Subject: [PATCH 04/14] fix some usages --- crates/bevy_asset/src/lib.rs | 6 +++--- crates/bevy_asset/src/server/mod.rs | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/crates/bevy_asset/src/lib.rs b/crates/bevy_asset/src/lib.rs index 5f165159542c9..84cc2f5fe5aa0 100644 --- a/crates/bevy_asset/src/lib.rs +++ b/crates/bevy_asset/src/lib.rs @@ -767,7 +767,7 @@ mod tests { let b_text = get::(world, b_id); let (b_load, b_deps, b_rec_deps) = asset_server.get_load_states(b_id).unwrap(); assert!(b_text.is_none(), "b component should not exist yet"); - assert!(b_load.is_loaded()); + assert!(b_load.is_loading()); assert_eq!(b_deps, DependencyLoadState::Loading); assert_eq!(b_rec_deps, RecursiveDependencyLoadState::Loading); @@ -775,7 +775,7 @@ mod tests { let c_text = get::(world, c_id); let (c_load, c_deps, c_rec_deps) = asset_server.get_load_states(c_id).unwrap(); assert!(c_text.is_none(), "c component should not exist yet"); - assert!(c_load.is_loaded()); + assert!(c_load.is_loading()); assert_eq!(c_deps, DependencyLoadState::Loading); assert_eq!(c_rec_deps, RecursiveDependencyLoadState::Loading); Some(()) @@ -805,7 +805,7 @@ mod tests { let c_text = get::(world, c_id); let (c_load, c_deps, c_rec_deps) = asset_server.get_load_states(c_id).unwrap(); assert!(c_text.is_none(), "c component should not exist yet"); - assert!(c_load.is_loaded()); + assert!(c_load.is_loading()); assert_eq!(c_deps, DependencyLoadState::Loading); assert_eq!(c_rec_deps, RecursiveDependencyLoadState::Loading); Some(()) diff --git a/crates/bevy_asset/src/server/mod.rs b/crates/bevy_asset/src/server/mod.rs index 273a945ebb9c1..8d4a4767831cc 100644 --- a/crates/bevy_asset/src/server/mod.rs +++ b/crates/bevy_asset/src/server/mod.rs @@ -1340,6 +1340,10 @@ pub enum LoadState { } impl LoadState { + /// Returns `true` if this instance is [`LoadState::Loading`] + pub fn is_loading(&self) -> bool { + matches!(self, Self::Loading) + } /// Returns `true` if this instance is [`LoadState::Loaded`] pub fn is_loaded(&self) -> bool { matches!(self, Self::Loaded) From e61aa3fd23ff3875dba247decf324719629a21fb Mon Sep 17 00:00:00 2001 From: Joseph <21144246+JoJoJet@users.noreply.github.com> Date: Sun, 21 Jul 2024 15:50:27 -0700 Subject: [PATCH 05/14] unbreak a test --- crates/bevy_asset/src/lib.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/bevy_asset/src/lib.rs b/crates/bevy_asset/src/lib.rs index 84cc2f5fe5aa0..bda741c843206 100644 --- a/crates/bevy_asset/src/lib.rs +++ b/crates/bevy_asset/src/lib.rs @@ -870,8 +870,9 @@ mod tests { assert_eq!(d_deps, DependencyLoadState::Loading); assert_eq!(d_rec_deps, RecursiveDependencyLoadState::Loading); - assert!( - a_deps.is_loaded(), + assert_eq!( + a_deps, + DependencyLoadState::Loaded, "If c has been loaded, the a deps should all be considered loaded" ); assert_eq!( From 49d65ddfe8913424421a24160ff13faae95e572f Mon Sep 17 00:00:00 2001 From: Joseph <21144246+JoJoJet@users.noreply.github.com> Date: Sun, 21 Jul 2024 15:56:46 -0700 Subject: [PATCH 06/14] fix tests --- crates/bevy_asset/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/bevy_asset/src/lib.rs b/crates/bevy_asset/src/lib.rs index bda741c843206..b499d8622584c 100644 --- a/crates/bevy_asset/src/lib.rs +++ b/crates/bevy_asset/src/lib.rs @@ -738,7 +738,7 @@ mod tests { 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"); + assert!(a_load.is_loading(), "a should still be loading"); assert_eq!( a_deps, DependencyLoadState::Loading, @@ -866,7 +866,7 @@ mod tests { let d_text = get::(world, d_id); let (d_load, d_deps, d_rec_deps) = asset_server.get_load_states(d_id).unwrap(); assert!(d_text.is_none(), "d component should not exist yet"); - assert_eq!(d_load, LoadState::Loading); + assert!(d_load.is_loading()); assert_eq!(d_deps, DependencyLoadState::Loading); assert_eq!(d_rec_deps, RecursiveDependencyLoadState::Loading); From 7b0aa5ddfa5bf649f6a4cc8987d23625cf760f35 Mon Sep 17 00:00:00 2001 From: Joseph <21144246+JoJoJet@users.noreply.github.com> Date: Sun, 21 Jul 2024 17:24:58 -0700 Subject: [PATCH 07/14] document motivation for omitted method --- crates/bevy_asset/src/server/mod.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/crates/bevy_asset/src/server/mod.rs b/crates/bevy_asset/src/server/mod.rs index 8d4a4767831cc..af2a4267a32c1 100644 --- a/crates/bevy_asset/src/server/mod.rs +++ b/crates/bevy_asset/src/server/mod.rs @@ -1348,6 +1348,10 @@ impl LoadState { pub fn is_loaded(&self) -> bool { matches!(self, Self::Loaded) } + // NOTE: an `is_not_loaded` method is intentionally not included, as it may mislead some users + // into thinking it is complementary to `is_not_loaded`. + // `NotLoaded` is a very specific failure mode and in most cases it is not necessary to directly check for it. + // If this is necessary the `matches!` macro can be used } /// The load state of an asset's dependencies. From af20011770db3ded613b030bda86ab5a3c390c1f Mon Sep 17 00:00:00 2001 From: Joseph <21144246+JoJoJet@users.noreply.github.com> Date: Sun, 21 Jul 2024 17:25:46 -0700 Subject: [PATCH 08/14] remove an import --- examples/3d/skybox.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/3d/skybox.rs b/examples/3d/skybox.rs index 05e59569f94e4..108ec9793619b 100644 --- a/examples/3d/skybox.rs +++ b/examples/3d/skybox.rs @@ -4,7 +4,6 @@ mod camera_controller; use bevy::{ - asset::LoadState, core_pipeline::Skybox, prelude::*, render::{ From c1c50e1357ae2d22e84cfc42782bf8c0e2c6981b Mon Sep 17 00:00:00 2001 From: Joseph <21144246+JoJoJet@users.noreply.github.com> Date: Sun, 21 Jul 2024 17:27:04 -0700 Subject: [PATCH 09/14] fix a typo --- crates/bevy_asset/src/server/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/bevy_asset/src/server/mod.rs b/crates/bevy_asset/src/server/mod.rs index af2a4267a32c1..37ca5f29d395d 100644 --- a/crates/bevy_asset/src/server/mod.rs +++ b/crates/bevy_asset/src/server/mod.rs @@ -1349,9 +1349,9 @@ impl LoadState { matches!(self, Self::Loaded) } // NOTE: an `is_not_loaded` method is intentionally not included, as it may mislead some users - // into thinking it is complementary to `is_not_loaded`. + // into thinking it is complementary to `is_loaded`. // `NotLoaded` is a very specific failure mode and in most cases it is not necessary to directly check for it. - // If this is necessary the `matches!` macro can be used + // If this is necessary the `matches!` macro can be used instead of a helper method. } /// The load state of an asset's dependencies. From 6b559584ed04db8adc60f3769d5d5d0b20d7ab2a Mon Sep 17 00:00:00 2001 From: Joseph <21144246+JoJoJet@users.noreply.github.com> Date: Sun, 21 Jul 2024 17:32:14 -0700 Subject: [PATCH 10/14] remove an import --- examples/shader/array_texture.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/shader/array_texture.rs b/examples/shader/array_texture.rs index 7c47a3b386971..abae333019294 100644 --- a/examples/shader/array_texture.rs +++ b/examples/shader/array_texture.rs @@ -2,7 +2,6 @@ //! uniform variable. use bevy::{ - asset::LoadState, prelude::*, reflect::TypePath, render::render_resource::{AsBindGroup, ShaderRef}, From 12d418ca2f1b5c66d71de915c4f246cbad0529f1 Mon Sep 17 00:00:00 2001 From: Joseph <21144246+JoJoJet@users.noreply.github.com> Date: Sun, 21 Jul 2024 17:35:31 -0700 Subject: [PATCH 11/14] remove an import --- examples/3d/pbr.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/3d/pbr.rs b/examples/3d/pbr.rs index dc3021f03941c..f9326cfa200b1 100644 --- a/examples/3d/pbr.rs +++ b/examples/3d/pbr.rs @@ -1,6 +1,6 @@ //! This example shows how to configure Physically Based Rendering (PBR) parameters. -use bevy::{asset::LoadState, prelude::*}; +use bevy::prelude::*; fn main() { App::new() From 0374b2ddd256af5d0669606944bcc40d27a2ecd4 Mon Sep 17 00:00:00 2001 From: Joseph <21144246+JoJoJet@users.noreply.github.com> Date: Sun, 21 Jul 2024 17:43:36 -0700 Subject: [PATCH 12/14] add a helper method to check for assets in a normal state --- crates/bevy_asset/src/server/mod.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/crates/bevy_asset/src/server/mod.rs b/crates/bevy_asset/src/server/mod.rs index 37ca5f29d395d..eaa71d8d18640 100644 --- a/crates/bevy_asset/src/server/mod.rs +++ b/crates/bevy_asset/src/server/mod.rs @@ -1352,6 +1352,13 @@ impl LoadState { // into thinking it is complementary to `is_loaded`. // `NotLoaded` is a very specific failure mode and in most cases it is not necessary to directly check for it. // If this is necessary the `matches!` macro can be used instead of a helper method. + + /// Returns `true` if the asset is loaded or in the process of being loaded. If true true, + /// then the asset can be considered to be in a "normal" state: the asset either exists + /// or will exist, and no errors have been encountered yet. + pub fn is_loaded_or_loading(&self) -> bool { + self.is_loaded() || self.is_loading() + } } /// The load state of an asset's dependencies. From 79ba225ff148b5f7627c0c2fc45d2c029605b4bf Mon Sep 17 00:00:00 2001 From: Joseph <21144246+JoJoJet@users.noreply.github.com> Date: Sun, 21 Jul 2024 17:44:34 -0700 Subject: [PATCH 13/14] remove an import --- examples/tools/scene_viewer/scene_viewer_plugin.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/tools/scene_viewer/scene_viewer_plugin.rs b/examples/tools/scene_viewer/scene_viewer_plugin.rs index 77c12f0ac3727..b54f55ac0c8dd 100644 --- a/examples/tools/scene_viewer/scene_viewer_plugin.rs +++ b/examples/tools/scene_viewer/scene_viewer_plugin.rs @@ -4,8 +4,7 @@ //! - Insert an initialized `SceneHandle` resource into your App's `AssetServer`. use bevy::{ - asset::LoadState, gltf::Gltf, input::common_conditions::input_just_pressed, prelude::*, - scene::InstanceId, + gltf::Gltf, input::common_conditions::input_just_pressed, prelude::*, scene::InstanceId, }; use std::f32::consts::*; From 33c4d8100a94782dab2693ea48bffae864ba77a1 Mon Sep 17 00:00:00 2001 From: Joseph <21144246+JoJoJet@users.noreply.github.com> Date: Sun, 21 Jul 2024 21:13:04 -0700 Subject: [PATCH 14/14] add is_failed --- crates/bevy_asset/src/server/mod.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/crates/bevy_asset/src/server/mod.rs b/crates/bevy_asset/src/server/mod.rs index eaa71d8d18640..90ffc2214eed3 100644 --- a/crates/bevy_asset/src/server/mod.rs +++ b/crates/bevy_asset/src/server/mod.rs @@ -1359,6 +1359,11 @@ impl LoadState { pub fn is_loaded_or_loading(&self) -> bool { self.is_loaded() || self.is_loading() } + + /// Returns `true` if this instance is [`LoadState::Failed`] + pub fn is_failed(&self) -> bool { + matches!(self, Self::Failed(_)) + } } /// The load state of an asset's dependencies.