From d04d48490abaa6b4d40ecdf01f71bf9e269a2cfe Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Tue, 15 Sep 2026 13:39:06 +0200 Subject: [PATCH] Rename `EditorViewport.HasLoadedAssets` to `HasContentLoaded` and fix it for prefab auto-fit Ref #4137 --- Source/Editor/Content/Proxy/CubeTextureProxy.cs | 2 +- .../Content/Proxy/MaterialInstanceProxy.cs | 2 +- Source/Editor/Content/Proxy/MaterialProxy.cs | 2 +- Source/Editor/Content/Proxy/ModelProxy.cs | 2 +- .../Editor/Content/Proxy/ParticleEmitterProxy.cs | 2 +- .../Editor/Content/Proxy/ParticleSystemProxy.cs | 2 +- Source/Editor/Content/Proxy/PrefabProxy.cs | 2 +- Source/Editor/Content/Proxy/SkinnedModelProxy.cs | 2 +- Source/Editor/Viewport/EditorViewport.cs | 2 +- Source/Editor/Viewport/PrefabWindowViewport.cs | 16 ++++++++++++++++ Source/Editor/Viewport/Previews/AssetPreview.cs | 2 +- .../Viewport/Previews/CubeTexturePreview.cs | 2 +- .../Editor/Viewport/Previews/MaterialPreview.cs | 4 ++-- .../Viewport/Previews/ParticleEmitterPreview.cs | 2 +- .../Viewport/Previews/ParticleSystemPreview.cs | 2 +- Source/Editor/Windows/Assets/PrefabWindow.cs | 2 +- 16 files changed, 32 insertions(+), 16 deletions(-) diff --git a/Source/Editor/Content/Proxy/CubeTextureProxy.cs b/Source/Editor/Content/Proxy/CubeTextureProxy.cs index efccfdbe5..bf7116647 100644 --- a/Source/Editor/Content/Proxy/CubeTextureProxy.cs +++ b/Source/Editor/Content/Proxy/CubeTextureProxy.cs @@ -52,7 +52,7 @@ namespace FlaxEditor.Content /// public override bool CanDrawThumbnail(ThumbnailRequest request) { - return _preview.HasLoadedAssets && ThumbnailsModule.HasMinimumQuality((CubeTexture)request.Asset); + return _preview.HasContentLoaded && ThumbnailsModule.HasMinimumQuality((CubeTexture)request.Asset); } /// diff --git a/Source/Editor/Content/Proxy/MaterialInstanceProxy.cs b/Source/Editor/Content/Proxy/MaterialInstanceProxy.cs index 212417e9f..45de48f56 100644 --- a/Source/Editor/Content/Proxy/MaterialInstanceProxy.cs +++ b/Source/Editor/Content/Proxy/MaterialInstanceProxy.cs @@ -39,7 +39,7 @@ namespace FlaxEditor.Content /// public override bool CanDrawThumbnail(ThumbnailRequest request) { - return _preview.HasLoadedAssets && ThumbnailsModule.HasMinimumQuality((MaterialInstance)request.Asset); + return _preview.HasContentLoaded && ThumbnailsModule.HasMinimumQuality((MaterialInstance)request.Asset); } } } diff --git a/Source/Editor/Content/Proxy/MaterialProxy.cs b/Source/Editor/Content/Proxy/MaterialProxy.cs index 58d34299c..0943c2b6f 100644 --- a/Source/Editor/Content/Proxy/MaterialProxy.cs +++ b/Source/Editor/Content/Proxy/MaterialProxy.cs @@ -39,7 +39,7 @@ namespace FlaxEditor.Content /// public override bool CanDrawThumbnail(ThumbnailRequest request) { - return _preview.HasLoadedAssets && ThumbnailsModule.HasMinimumQuality((Material)request.Asset); + return _preview.HasContentLoaded && ThumbnailsModule.HasMinimumQuality((Material)request.Asset); } } } diff --git a/Source/Editor/Content/Proxy/ModelProxy.cs b/Source/Editor/Content/Proxy/ModelProxy.cs index a57ddbf61..7c3f8ae1c 100644 --- a/Source/Editor/Content/Proxy/ModelProxy.cs +++ b/Source/Editor/Content/Proxy/ModelProxy.cs @@ -83,7 +83,7 @@ namespace FlaxEditor.Content /// public override bool CanDrawThumbnail(ThumbnailRequest request) { - return _preview.HasLoadedAssets && ThumbnailsModule.HasMinimumQuality((Model)request.Asset); + return _preview.HasContentLoaded && ThumbnailsModule.HasMinimumQuality((Model)request.Asset); } /// diff --git a/Source/Editor/Content/Proxy/ParticleEmitterProxy.cs b/Source/Editor/Content/Proxy/ParticleEmitterProxy.cs index 9ef533b76..6c6f0c24f 100644 --- a/Source/Editor/Content/Proxy/ParticleEmitterProxy.cs +++ b/Source/Editor/Content/Proxy/ParticleEmitterProxy.cs @@ -133,7 +133,7 @@ namespace FlaxEditor.Content return false; // Ensure assets are ready to be used - if (!_preview.HasLoadedAssets) + if (!_preview.HasContentLoaded) return false; var asset = (ParticleEmitter)request.Asset; if (!asset.IsLoaded) diff --git a/Source/Editor/Content/Proxy/ParticleSystemProxy.cs b/Source/Editor/Content/Proxy/ParticleSystemProxy.cs index ccea01998..97ca17f25 100644 --- a/Source/Editor/Content/Proxy/ParticleSystemProxy.cs +++ b/Source/Editor/Content/Proxy/ParticleSystemProxy.cs @@ -104,7 +104,7 @@ namespace FlaxEditor.Content return false; // Ensure assets are ready to be used - if (!_preview.HasLoadedAssets) + if (!_preview.HasContentLoaded) return false; var asset = (ParticleSystem)request.Asset; if (!asset.IsLoaded) diff --git a/Source/Editor/Content/Proxy/PrefabProxy.cs b/Source/Editor/Content/Proxy/PrefabProxy.cs index e5cf053d6..32e3b83f3 100644 --- a/Source/Editor/Content/Proxy/PrefabProxy.cs +++ b/Source/Editor/Content/Proxy/PrefabProxy.cs @@ -118,7 +118,7 @@ namespace FlaxEditor.Content /// public override bool CanDrawThumbnail(ThumbnailRequest request) { - if (!_preview.HasLoadedAssets) + if (!_preview.HasContentLoaded) return false; // Check if asset is streamed enough diff --git a/Source/Editor/Content/Proxy/SkinnedModelProxy.cs b/Source/Editor/Content/Proxy/SkinnedModelProxy.cs index 95f2f7510..9db9a152d 100644 --- a/Source/Editor/Content/Proxy/SkinnedModelProxy.cs +++ b/Source/Editor/Content/Proxy/SkinnedModelProxy.cs @@ -106,7 +106,7 @@ namespace FlaxEditor.Content /// public override bool CanDrawThumbnail(ThumbnailRequest request) { - return _preview.HasLoadedAssets && ThumbnailsModule.HasMinimumQuality((SkinnedModel)request.Asset); + return _preview.HasContentLoaded && ThumbnailsModule.HasMinimumQuality((SkinnedModel)request.Asset); } /// diff --git a/Source/Editor/Viewport/EditorViewport.cs b/Source/Editor/Viewport/EditorViewport.cs index 763f710c8..ea36f558a 100644 --- a/Source/Editor/Viewport/EditorViewport.cs +++ b/Source/Editor/Viewport/EditorViewport.cs @@ -423,7 +423,7 @@ namespace FlaxEditor.Viewport /// /// Gets a value indicating whether this viewport has loaded dependant assets. /// - public virtual bool HasLoadedAssets => true; + public virtual bool HasContentLoaded => true; /// /// The 'View' widget button context menu. diff --git a/Source/Editor/Viewport/PrefabWindowViewport.cs b/Source/Editor/Viewport/PrefabWindowViewport.cs index 0a3b4b4e5..ba0fbc2c4 100644 --- a/Source/Editor/Viewport/PrefabWindowViewport.cs +++ b/Source/Editor/Viewport/PrefabWindowViewport.cs @@ -396,6 +396,22 @@ namespace FlaxEditor.Viewport ViewportCamera.ShowActors(TransformGizmo.SelectedParents, ref orient); } + private static bool ActorHasContentLoaded(Actor a) + { + if (!a.HasContentLoaded) + return false; + var children = a.ChildrenCount; + for (int i = 0; i < children; i++) + { + if (!ActorHasContentLoaded(a.GetChild(i))) + return false; + } + return true; + } + + /// + public override bool HasContentLoaded => base.HasContentLoaded && (Instance == null || ActorHasContentLoaded(Instance)); + /// public EditorViewport Viewport => this; diff --git a/Source/Editor/Viewport/Previews/AssetPreview.cs b/Source/Editor/Viewport/Previews/AssetPreview.cs index b6610c880..73709248f 100644 --- a/Source/Editor/Viewport/Previews/AssetPreview.cs +++ b/Source/Editor/Viewport/Previews/AssetPreview.cs @@ -245,7 +245,7 @@ namespace FlaxEditor.Viewport.Previews } /// - public override bool HasLoadedAssets => base.HasLoadedAssets && Sky.HasContentLoaded && EnvProbe.HasContentLoaded && PostFxVolume.HasContentLoaded; + public override bool HasContentLoaded => base.HasContentLoaded && Sky.HasContentLoaded && EnvProbe.HasContentLoaded && PostFxVolume.HasContentLoaded; /// public override void OnDestroy() diff --git a/Source/Editor/Viewport/Previews/CubeTexturePreview.cs b/Source/Editor/Viewport/Previews/CubeTexturePreview.cs index f0b05c8e6..0a52b8e48 100644 --- a/Source/Editor/Viewport/Previews/CubeTexturePreview.cs +++ b/Source/Editor/Viewport/Previews/CubeTexturePreview.cs @@ -237,7 +237,7 @@ namespace FlaxEditor.Viewport.Previews } /// - public override bool HasLoadedAssets => base.HasLoadedAssets && _previewMaterial.IsLoaded && _previewMaterial.BaseMaterial.IsLoaded; + public override bool HasContentLoaded => base.HasContentLoaded && _previewMaterial.IsLoaded && _previewMaterial.BaseMaterial.IsLoaded; /// public override void OnDestroy() diff --git a/Source/Editor/Viewport/Previews/MaterialPreview.cs b/Source/Editor/Viewport/Previews/MaterialPreview.cs index b64a4fdba..67267708d 100644 --- a/Source/Editor/Viewport/Previews/MaterialPreview.cs +++ b/Source/Editor/Viewport/Previews/MaterialPreview.cs @@ -175,11 +175,11 @@ namespace FlaxEditor.Viewport.Previews } /// - public override bool HasLoadedAssets + public override bool HasContentLoaded { get { - if (!base.HasLoadedAssets) + if (!base.HasContentLoaded) return false; UpdateMaterial(); return true; diff --git a/Source/Editor/Viewport/Previews/ParticleEmitterPreview.cs b/Source/Editor/Viewport/Previews/ParticleEmitterPreview.cs index 023bd121f..1bcaa015e 100644 --- a/Source/Editor/Viewport/Previews/ParticleEmitterPreview.cs +++ b/Source/Editor/Viewport/Previews/ParticleEmitterPreview.cs @@ -78,7 +78,7 @@ namespace FlaxEditor.Viewport.Previews } /// - public override bool HasLoadedAssets => (_emitter == null || _emitter.IsLoaded) && base.HasLoadedAssets; + public override bool HasContentLoaded => (_emitter == null || _emitter.IsLoaded) && base.HasContentLoaded; /// public override void OnDestroy() diff --git a/Source/Editor/Viewport/Previews/ParticleSystemPreview.cs b/Source/Editor/Viewport/Previews/ParticleSystemPreview.cs index 13987157e..9bfbaabab 100644 --- a/Source/Editor/Viewport/Previews/ParticleSystemPreview.cs +++ b/Source/Editor/Viewport/Previews/ParticleSystemPreview.cs @@ -226,7 +226,7 @@ namespace FlaxEditor.Viewport.Previews } /// - public override bool HasLoadedAssets => _previewEffect.HasContentLoaded && base.HasLoadedAssets; + public override bool HasContentLoaded => _previewEffect.HasContentLoaded && base.HasContentLoaded; /// public override void Update(float deltaTime) diff --git a/Source/Editor/Windows/Assets/PrefabWindow.cs b/Source/Editor/Windows/Assets/PrefabWindow.cs index da41b88c5..91db9f0e0 100644 --- a/Source/Editor/Windows/Assets/PrefabWindow.cs +++ b/Source/Editor/Windows/Assets/PrefabWindow.cs @@ -536,7 +536,7 @@ namespace FlaxEditor.Windows.Assets } // Auto fit - if (_focusCamera && _viewport.Task.FrameCount > 1) + if (_focusCamera && _viewport.Task.FrameCount > 1 && _viewport.HasContentLoaded) { _focusCamera = false; Editor.GetActorEditorSphere(_viewport.Instance, out BoundingSphere bounds);