From 461ef06a4bd1def65c0911dc1b547cf49fb48c49 Mon Sep 17 00:00:00 2001 From: rewin Date: Thu, 28 Mar 2024 22:48:28 +0300 Subject: [PATCH] fix loading --- studio/src/scene.rs | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/studio/src/scene.rs b/studio/src/scene.rs index 3fc35ab..78930e4 100644 --- a/studio/src/scene.rs +++ b/studio/src/scene.rs @@ -95,13 +95,17 @@ impl Plugin for ScenePlugin { app.add_systems( PostUpdate, ( - check_loading, auto_add_handle::, auto_add_handle::, auto_add_handle::, ), ); + app.add_systems( + PreUpdate, + check_loading + ); + //setup default light app.add_systems(Startup, minimal_scene_setup); @@ -178,48 +182,56 @@ pub struct LoadingQueue { } fn check_loading( + mut frames_without_loading : Local, mut loading_queue: ResMut, mut st_next: ResMut>, r_scene_state: Res>, asset_server: Res, ) { + + info!("Checking loading: {}", *frames_without_loading); // Avoid transitioning from `SceneState::None` directly to `SceneState::Active`. // We will always be initializing the scene with _something_, so if the // `LoadingQueue` is empty when we're in `SceneState::None`, it just means // our startup routine hasn't yet gotten to the point of processing any // `Handle`s. - if loading_queue.queue.is_empty() && **r_scene_state == SceneState::Loading { + if loading_queue.queue.is_empty() && **r_scene_state == SceneState::Loading && *frames_without_loading > 100 { st_next.set(SceneState::Active); return; } + if loading_queue.queue.is_empty() && **r_scene_state == SceneState::Loading { + *frames_without_loading += 1; + } + if !loading_queue.queue.is_empty() { + *frames_without_loading = 0; //filter queue to only include notloaded assets let mut not_loaded_count = 0; + info!("Loading {} assets", loading_queue.queue.len()); + loading_queue.queue.retain(|h| { if let Some((load_state, dep_load_state, rec_load_state)) = asset_server.get_load_states(h.id()) { - let is_loaded = dep_load_state == DependencyLoadState::Loaded - || rec_load_state == RecursiveDependencyLoadState::Loaded - || load_state == LoadState::Loaded; + let is_loaded = load_state == LoadState::Loaded; - let is_failed = dep_load_state == DependencyLoadState::Failed - || rec_load_state == RecursiveDependencyLoadState::Failed - || load_state == LoadState::Failed; + let is_failed = load_state == LoadState::Failed; if load_state == LoadState::NotLoaded { not_loaded_count += 1; } - !(is_failed || is_loaded) + load_state == LoadState::Loading || dep_load_state == DependencyLoadState::Loading } else { + info!("Can't find handle: {}", h.id()); false } }); + info!("Not loaded: {}", not_loaded_count); info!("Loading {} assets", loading_queue.queue.len()); if loading_queue.queue.len() - not_loaded_count == 0 { @@ -232,9 +244,10 @@ fn check_loading( fn auto_add_handle( mut queue: ResMut, - query: Query<&Handle, Added>>, + query: Query<&Handle, Changed>>, ) { for h in query.iter() { + info!("Added: {}", h.id()); queue.queue.push(h.clone().untyped()); } }