diff --git a/Source/Editor/CustomEditors/CustomEditor.cs b/Source/Editor/CustomEditors/CustomEditor.cs index 73cc82192..1b4b3e013 100644 --- a/Source/Editor/CustomEditors/CustomEditor.cs +++ b/Source/Editor/CustomEditors/CustomEditor.cs @@ -241,7 +241,7 @@ namespace FlaxEditor.CustomEditors } } - internal void RefreshRootChild() + internal virtual void RefreshRootChild() { Refresh(); diff --git a/Source/Editor/CustomEditors/Dedicated/ParticleEffectEditor.cs b/Source/Editor/CustomEditors/Dedicated/ParticleEffectEditor.cs index 634260922..c78700bf7 100644 --- a/Source/Editor/CustomEditors/Dedicated/ParticleEffectEditor.cs +++ b/Source/Editor/CustomEditors/Dedicated/ParticleEffectEditor.cs @@ -14,6 +14,8 @@ namespace FlaxEditor.CustomEditors.Dedicated public class ParticleEffectEditor : ActorEditor { private bool _isValid; + private bool _isActive; + private uint _parametersVersion; private bool IsValid { @@ -54,18 +56,20 @@ namespace FlaxEditor.CustomEditors.Dedicated _isValid = IsValid; if (!_isValid) return; + var effect = (ParticleEffect)Values[0]; + _parametersVersion = effect.ParametersVersion; + _isActive = effect.IsActive; // Show all effect parameters grouped by the emitter track name - var effect = (ParticleEffect)Values[0]; var groups = layout.Group("Parameters"); - groups.Panel.Open(false); + groups.Panel.Open(); var parameters = effect.Parameters; var parametersGroups = parameters.GroupBy(x => x.EmitterIndex); foreach (var parametersGroup in parametersGroups) { var trackName = parametersGroup.First().TrackName; var group = groups.Group(trackName); - group.Panel.Open(false); + group.Panel.Open(); var data = SurfaceUtils.InitGraphParameters(parametersGroup); SurfaceUtils.DisplayGraphParameters(group, data, ParameterGet, ParameterSet, Values, ParameterDefaultValue); @@ -73,15 +77,32 @@ namespace FlaxEditor.CustomEditors.Dedicated } /// - public override void Refresh() + internal override void RefreshRootChild() { + var effect = (ParticleEffect)Values[0]; + if (effect == null) + { + base.RefreshRootChild(); + return; + } + + // Custom refreshing that handles particle effect parameters list editing during refresh (eg. effect gets disabled) if (_isValid != IsValid) { RebuildLayout(); return; } - - base.Refresh(); + Refresh(); + var parameters = effect.Parameters; + for (int i = 0; i < ChildrenEditors.Count; i++) + { + if (_isActive != effect.IsActive || _parametersVersion != effect.ParametersVersion) + { + RebuildLayout(); + return; + } + ChildrenEditors[i].RefreshInternal(); + } } } } diff --git a/Source/Engine/UI/GUI/Panels/DropPanel.cs b/Source/Engine/UI/GUI/Panels/DropPanel.cs index c86ecc3dc..e2771c71b 100644 --- a/Source/Engine/UI/GUI/Panels/DropPanel.cs +++ b/Source/Engine/UI/GUI/Panels/DropPanel.cs @@ -241,7 +241,7 @@ namespace FlaxEngine.GUI /// Opens the group. /// /// Enable/disable animation feature. - public void Open(bool animate = true) + public void Open(bool animate = false) { // Check if state will change if (_isClosed) @@ -265,7 +265,7 @@ namespace FlaxEngine.GUI /// Closes the group. /// /// Enable/disable animation feature. - public void Close(bool animate = true) + public void Close(bool animate = false) { // Check if state will change if (!_isClosed) @@ -291,9 +291,9 @@ namespace FlaxEngine.GUI public void Toggle() { if (_isClosed) - Open(); + Open(true); else - Close(); + Close(true); } ///