From b00156f519a49bd32f663988ba65741029f0cc6f Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Wed, 27 Sep 2023 13:04:44 +0200 Subject: [PATCH] Add some improvements to particles editing #1395 --- .../Dedicated/ParticleEffectEditor.cs | 17 ++++++++++++++--- Source/Engine/Particles/ParticleEffect.cpp | 3 +-- Source/Engine/Particles/ParticleEffect.h | 2 +- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/Source/Editor/CustomEditors/Dedicated/ParticleEffectEditor.cs b/Source/Editor/CustomEditors/Dedicated/ParticleEffectEditor.cs index ec71348cf..5b2cfc144 100644 --- a/Source/Editor/CustomEditors/Dedicated/ParticleEffectEditor.cs +++ b/Source/Editor/CustomEditors/Dedicated/ParticleEffectEditor.cs @@ -25,9 +25,20 @@ namespace FlaxEditor.CustomEditors.Dedicated get { // All selected particle effects use the same system - var effect = (ParticleEffect)Values[0]; - var system = effect.ParticleSystem; - return system != null && Values.TrueForAll(x => (x as ParticleEffect)?.ParticleSystem == system); + var effect = Values[0] as ParticleEffect; + var system = effect ? effect.ParticleSystem : null; + if (system && Values.TrueForAll(x => x is ParticleEffect fx && fx && fx.ParticleSystem == system)) + { + // All parameters can be accessed + var parameters = effect.Parameters; + foreach (var parameter in parameters) + { + if (!parameter) + return false; + } + return true; + } + return false; } } diff --git a/Source/Engine/Particles/ParticleEffect.cpp b/Source/Engine/Particles/ParticleEffect.cpp index 8a767ba22..788a4263f 100644 --- a/Source/Engine/Particles/ParticleEffect.cpp +++ b/Source/Engine/Particles/ParticleEffect.cpp @@ -402,7 +402,7 @@ SceneRenderTask* ParticleEffect::GetRenderTask() const #if USE_EDITOR -Array ParticleEffect::GetParametersOverrides() +Array& ParticleEffect::GetParametersOverrides() { CacheModifiedParameters(); return _parametersOverrides; @@ -461,7 +461,6 @@ void ParticleEffect::CacheModifiedParameters() { if (_parameters.IsEmpty()) return; - _parametersOverrides.Clear(); auto& parameters = GetParameters(); for (auto& param : parameters) diff --git a/Source/Engine/Particles/ParticleEffect.h b/Source/Engine/Particles/ParticleEffect.h index bfee23a3b..9e9792a4c 100644 --- a/Source/Engine/Particles/ParticleEffect.h +++ b/Source/Engine/Particles/ParticleEffect.h @@ -382,7 +382,7 @@ public: #if USE_EDITOR protected: // Exposed parameters overrides for Editor Undo. - API_PROPERTY(Attributes="HideInEditor, Serialize") Array GetParametersOverrides(); + API_PROPERTY(Attributes="HideInEditor, Serialize") Array& GetParametersOverrides(); API_PROPERTY() void SetParametersOverrides(const Array& value); #endif