From 5ffdbe553bc76824e7eced448654c07ded722c4f Mon Sep 17 00:00:00 2001 From: Wojciech Figat Date: Mon, 10 Jan 2022 14:09:00 +0100 Subject: [PATCH] Add assets loading progress to Editor status bar --- Source/Editor/Modules/UIModule.cs | 9 +++++++++ Source/Engine/Content/Content.cpp | 7 ++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/Source/Editor/Modules/UIModule.cs b/Source/Editor/Modules/UIModule.cs index 5560afc3b..a86e88546 100644 --- a/Source/Editor/Modules/UIModule.cs +++ b/Source/Editor/Modules/UIModule.cs @@ -32,6 +32,7 @@ namespace FlaxEditor.Modules private Label _progressLabel; private ProgressBar _progressBar; private List> _statusMessages; + private ContentStats _contentStats; private ContextMenuButton _menuFileSaveScenes; private ContextMenuButton _menuFileCloseScenes; @@ -250,6 +251,7 @@ namespace FlaxEditor.Modules { if (StatusBar == null) return; + var contentStats = FlaxEngine.Content.Stats; Color color; if (Editor.StateMachine.IsPlayMode) @@ -262,11 +264,14 @@ namespace FlaxEditor.Modules text = _statusMessages[0].Key; else if (Editor.StateMachine.CurrentState.Status != null) text = Editor.StateMachine.CurrentState.Status; + else if (contentStats.LoadingAssetsCount != 0) + text = string.Format("Loading {0}/{1}", contentStats.LoadingAssetsCount, contentStats.AssetsCount); else text = "Ready"; StatusBar.Text = text; StatusBar.StatusColor = color; + _contentStats = contentStats; } /// @@ -334,6 +339,10 @@ namespace FlaxEditor.Modules _statusMessages.RemoveAt(0); UpdateStatusBar(); } + else if (FlaxEngine.Content.Stats.LoadingAssetsCount != _contentStats.LoadingAssetsCount) + { + UpdateStatusBar(); + } } private class CustomWindowBorderControl : Control diff --git a/Source/Engine/Content/Content.cpp b/Source/Engine/Content/Content.cpp index 7a26ef339..8bc46382f 100644 --- a/Source/Engine/Content/Content.cpp +++ b/Source/Engine/Content/Content.cpp @@ -368,16 +368,17 @@ ContentStats Content::GetStats() ContentStats stats; AssetsLocker.Lock(); stats.AssetsCount = Assets.Count(); - for (auto& e : Assets) + int32 loadFailedCount = 0; + for (const auto& e : Assets) { if (e.Value->IsLoaded()) stats.LoadedAssetsCount++; else if (e.Value->LastLoadFailed()) - stats.LoadingAssetsCount++; + loadFailedCount++; if (e.Value->IsVirtual()) stats.VirtualAssetsCount++; } - stats.LoadingAssetsCount = stats.AssetsCount - stats.LoadingAssetsCount - stats.LoadedAssetsCount; + stats.LoadingAssetsCount = stats.AssetsCount - loadFailedCount - stats.LoadedAssetsCount; AssetsLocker.Unlock(); return stats; }