diff --git a/Source/Editor/Modules/ProgressReportingModule.cs b/Source/Editor/Modules/ProgressReportingModule.cs index 7ff284431..a1160aba5 100644 --- a/Source/Editor/Modules/ProgressReportingModule.cs +++ b/Source/Editor/Modules/ProgressReportingModule.cs @@ -56,6 +56,11 @@ namespace FlaxEditor.Modules /// public readonly GenerateScriptsProjectFilesProgress GenerateScriptsProjectFiles = new GenerateScriptsProjectFilesProgress(); + /// + /// The assets loading progress handler. + /// + public readonly LoadAssetsProgress LoadAssets = new LoadAssetsProgress(); + /// /// Gets the first active handler. /// @@ -80,6 +85,7 @@ namespace FlaxEditor.Modules RegisterHandler(CodeEditorOpen); RegisterHandler(NavMeshBuilding); RegisterHandler(GenerateScriptsProjectFiles); + RegisterHandler(LoadAssets); } /// diff --git a/Source/Editor/Progress/Handlers/LoadAssetsProgress.cs b/Source/Editor/Progress/Handlers/LoadAssetsProgress.cs new file mode 100644 index 000000000..dbac821e1 --- /dev/null +++ b/Source/Editor/Progress/Handlers/LoadAssetsProgress.cs @@ -0,0 +1,40 @@ +// Copyright (c) 2012-2024 Wojciech Figat. All rights reserved. + +namespace FlaxEditor.Progress.Handlers +{ + /// + /// Loading assets progress reporting handler. + /// + /// + public sealed class LoadAssetsProgress : ProgressHandler + { + private int _loadingAssetsCount; + + /// + /// Initializes a new instance of the class. + /// + public LoadAssetsProgress() + { + Editor.Instance.EditorUpdate += OnEditorUpdate; + } + + private void OnEditorUpdate() + { + var contentStats = FlaxEngine.Content.Stats; + if (_loadingAssetsCount == contentStats.LoadingAssetsCount) + return; + + if (contentStats.LoadingAssetsCount == 0) + OnEnd(); + else if (_loadingAssetsCount == 0) + OnStart(); + if (contentStats.LoadingAssetsCount > 0) + { + var progress = (float)contentStats.LoadedAssetsCount / contentStats.AssetsCount; + var text = contentStats.LoadingAssetsCount == 1 ? "Loading 1 asset..." : $"Loading {contentStats.LoadingAssetsCount} assets..."; + OnUpdate(progress, text); + } + _loadingAssetsCount = contentStats.LoadingAssetsCount; + } + } +}