From fff2c3e038c00538f872463f0bcd1b2c9670ca93 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Wed, 18 Aug 2021 22:55:31 +0200 Subject: [PATCH] Fix materials parameters display issues after editing --- Source/Editor/Surface/VisjectSurfaceWindow.cs | 19 +++++++++++++------ .../Windows/Assets/AnimationGraphWindow.cs | 16 +++++++++------- .../Windows/Assets/MaterialInstanceWindow.cs | 12 +++--------- .../Editor/Windows/Assets/MaterialWindow.cs | 15 +++++++++------ .../Windows/Assets/ParticleEmitterWindow.cs | 12 +++++++++--- 5 files changed, 43 insertions(+), 31 deletions(-) diff --git a/Source/Editor/Surface/VisjectSurfaceWindow.cs b/Source/Editor/Surface/VisjectSurfaceWindow.cs index 72d02f597..37092026c 100644 --- a/Source/Editor/Surface/VisjectSurfaceWindow.cs +++ b/Source/Editor/Surface/VisjectSurfaceWindow.cs @@ -604,7 +604,7 @@ namespace FlaxEditor.Surface Parent = this }; - Presenter = new CustomEditorPresenter(undo); + Presenter = new CustomEditorPresenter(undo, "Loading..."); Presenter.Panel.Parent = scrollPanel; } @@ -744,7 +744,7 @@ namespace FlaxEditor.Surface } else { - _propertiesEditor = new CustomEditorPresenter(_undo); + _propertiesEditor = new CustomEditorPresenter(_undo, "Loading..."); _propertiesEditor.Panel.Parent = _split2.Panel2; } _propertiesEditor.Modified += OnPropertyEdited; @@ -896,6 +896,16 @@ namespace FlaxEditor.Surface Close(); } + /// + /// Called when surface gets loaded and user can edit it. + /// + protected virtual void OnSurfaceEditingStart() + { + _undo.Clear(); + _surface.Enabled = true; + _propertiesEditor.BuildLayout(); + } + /// /// Loads the surface from the asset. Called during when asset is loaded and surface is missing. /// @@ -939,10 +949,7 @@ namespace FlaxEditor.Surface return; } - // Setup - _undo.Clear(); - _surface.Enabled = true; - _propertiesEditor.BuildLayout(); + OnSurfaceEditingStart(); ClearEditedFlag(); if (_showWholeGraphOnLoad) { diff --git a/Source/Editor/Windows/Assets/AnimationGraphWindow.cs b/Source/Editor/Windows/Assets/AnimationGraphWindow.cs index f4a2ef8b9..444baaaee 100644 --- a/Source/Editor/Windows/Assets/AnimationGraphWindow.cs +++ b/Source/Editor/Windows/Assets/AnimationGraphWindow.cs @@ -186,7 +186,6 @@ namespace FlaxEditor.Windows.Assets // Asset properties proxy _properties = new PropertiesProxy(); - _propertiesEditor.Select(_properties); // Preview properties editor _previewTab = new Tab("Preview"); @@ -322,22 +321,17 @@ namespace FlaxEditor.Windows.Assets { if (value == null) { - // Error Editor.LogError("Failed to save animation graph surface"); return; } - - // Save data to the temporary asset if (_asset.SaveSurface(value)) { - // Error _surface.MarkAsEdited(); Editor.LogError("Failed to save animation graph surface data"); return; } _asset.Reload(); - - // Reset any root motion + _asset.WaitForLoaded(); _preview.PreviewActor.ResetLocalTransform(); _previewTab.Presenter.BuildLayoutOnUpdate(); } @@ -376,6 +370,14 @@ namespace FlaxEditor.Windows.Assets return false; } + /// + protected override void OnSurfaceEditingStart() + { + _propertiesEditor.Select(_properties); + + base.OnSurfaceEditingStart(); + } + /// protected override void PerformLayoutBeforeChildren() { diff --git a/Source/Editor/Windows/Assets/MaterialInstanceWindow.cs b/Source/Editor/Windows/Assets/MaterialInstanceWindow.cs index c5becfe7d..e9862beab 100644 --- a/Source/Editor/Windows/Assets/MaterialInstanceWindow.cs +++ b/Source/Editor/Windows/Assets/MaterialInstanceWindow.cs @@ -229,7 +229,7 @@ namespace FlaxEditor.Windows.Assets layout.Label("No parameters"); return; } - if (!materialInstance.IsLoaded || materialInstance.BaseMaterial && !materialInstance.BaseMaterial.IsLoaded) + if (!materialInstance.IsLoaded || (materialInstance.BaseMaterial && !materialInstance.BaseMaterial.IsLoaded)) { layout.Label("Loading..."); return; @@ -352,10 +352,9 @@ namespace FlaxEditor.Windows.Assets }; // Material properties editor - _editor = new CustomEditorPresenter(_undo); + _editor = new CustomEditorPresenter(_undo, "Loading..."); _editor.Panel.Parent = _split.Panel2; _properties = new PropertiesProxy(); - _editor.Select(_properties); _editor.Modified += OnMaterialPropertyEdited; // Setup input actions @@ -479,16 +478,11 @@ namespace FlaxEditor.Windows.Assets /// public override void Update(float deltaTime) { - // Check if need to load if (_isWaitingForLoad && _asset.IsLoaded && (_asset.BaseMaterial == null || _asset.BaseMaterial.IsLoaded)) { - // Clear flag _isWaitingForLoad = false; - - // Init material properties and parameters proxy _properties.OnLoad(this); - - // Setup + _editor.Select(_properties); ClearEditedFlag(); _undo.Clear(); _editor.BuildLayout(); diff --git a/Source/Editor/Windows/Assets/MaterialWindow.cs b/Source/Editor/Windows/Assets/MaterialWindow.cs index 37dcc40ce..1b28512be 100644 --- a/Source/Editor/Windows/Assets/MaterialWindow.cs +++ b/Source/Editor/Windows/Assets/MaterialWindow.cs @@ -222,7 +222,6 @@ namespace FlaxEditor.Windows.Assets // Asset properties proxy _properties = new PropertiesProxy(); - _propertiesEditor.Select(_properties); // Surface _surface = new MaterialSurface(this, Save, _undo) @@ -324,17 +323,14 @@ namespace FlaxEditor.Windows.Assets get => _asset.LoadSurface(true); set { - // Create material info FillMaterialInfo(out var info); - - // Save data to the temporary material if (_asset.SaveSurface(value, info)) { - // Error _surface.MarkAsEdited(); Editor.LogError("Failed to save material surface data"); } _asset.Reload(); + _asset.WaitForLoaded(); } } @@ -347,7 +343,6 @@ namespace FlaxEditor.Windows.Assets // Load surface graph if (_surface.Load()) { - // Error Editor.LogError("Failed to load material surface."); return true; } @@ -362,6 +357,14 @@ namespace FlaxEditor.Windows.Assets return false; } + /// + protected override void OnSurfaceEditingStart() + { + _propertiesEditor.Select(_properties); + + base.OnSurfaceEditingStart(); + } + /// protected override bool CanEditSurfaceOnAssetLoadError => true; diff --git a/Source/Editor/Windows/Assets/ParticleEmitterWindow.cs b/Source/Editor/Windows/Assets/ParticleEmitterWindow.cs index 1968c5735..423c512f3 100644 --- a/Source/Editor/Windows/Assets/ParticleEmitterWindow.cs +++ b/Source/Editor/Windows/Assets/ParticleEmitterWindow.cs @@ -120,7 +120,6 @@ namespace FlaxEditor.Windows.Assets // Asset properties proxy _properties = new PropertiesProxy(); - _propertiesEditor.Select(_properties); // Preview properties editor _previewTab = new Tab("Preview"); @@ -217,14 +216,13 @@ namespace FlaxEditor.Windows.Assets get => _asset.LoadSurface(true); set { - // Save data to the temporary asset if (_asset.SaveSurface(value)) { - // Error _surface.MarkAsEdited(); Editor.LogError("Failed to save Particle Emitter surface data"); } _asset.Reload(); + _asset.WaitForLoaded(); _preview.PreviewActor.ResetSimulation(); _previewTab.Presenter.BuildLayoutOnUpdate(); } @@ -255,6 +253,14 @@ namespace FlaxEditor.Windows.Assets return false; } + /// + protected override void OnSurfaceEditingStart() + { + _propertiesEditor.Select(_properties); + + base.OnSurfaceEditingStart(); + } + /// protected override bool SaveToOriginal() {