From 5b71591998bc9294f5444ac1c1f9c96772043bf7 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Tue, 11 Jun 2024 11:37:49 +0200 Subject: [PATCH] Add option to disable particles preview in scene view and play only looping effects #1767 --- Source/Editor/Editor.cs | 1 + Source/Editor/Managed/ManagedEditor.h | 1 + Source/Editor/Options/OptionsModule.cs | 1 + Source/Editor/Options/VisualOptions.cs | 7 +++++++ Source/Engine/Particles/ParticleEffect.cpp | 8 +++++++- 5 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Source/Editor/Editor.cs b/Source/Editor/Editor.cs index 12d222c4e..8af1bc9f4 100644 --- a/Source/Editor/Editor.cs +++ b/Source/Editor/Editor.cs @@ -1364,6 +1364,7 @@ namespace FlaxEditor public byte AutoReloadScriptsOnMainWindowFocus; public byte ForceScriptCompilationOnStartup; public byte UseAssetImportPathRelative; + public byte EnableParticlesPreview; public byte AutoRebuildCSG; public float AutoRebuildCSGTimeoutMs; public byte AutoRebuildNavMesh; diff --git a/Source/Editor/Managed/ManagedEditor.h b/Source/Editor/Managed/ManagedEditor.h index e51749e5f..5c7907d17 100644 --- a/Source/Editor/Managed/ManagedEditor.h +++ b/Source/Editor/Managed/ManagedEditor.h @@ -27,6 +27,7 @@ API_CLASS(Namespace="FlaxEditor", Name="Editor", NoSpawn, NoConstructor) class M byte AutoReloadScriptsOnMainWindowFocus = 1; byte ForceScriptCompilationOnStartup = 1; byte UseAssetImportPathRelative = 1; + byte EnableParticlesPreview = 1; byte AutoRebuildCSG = 1; float AutoRebuildCSGTimeoutMs = 50; byte AutoRebuildNavMesh = 1; diff --git a/Source/Editor/Options/OptionsModule.cs b/Source/Editor/Options/OptionsModule.cs index 5a7aa886f..d43af963e 100644 --- a/Source/Editor/Options/OptionsModule.cs +++ b/Source/Editor/Options/OptionsModule.cs @@ -192,6 +192,7 @@ namespace FlaxEditor.Options internalOptions.AutoReloadScriptsOnMainWindowFocus = (byte)(Options.General.AutoReloadScriptsOnMainWindowFocus ? 1 : 0); internalOptions.ForceScriptCompilationOnStartup = (byte)(Options.General.ForceScriptCompilationOnStartup ? 1 : 0); internalOptions.UseAssetImportPathRelative = (byte)(Options.General.UseAssetImportPathRelative ? 1 : 0); + internalOptions.EnableParticlesPreview = (byte)(Options.Visual.EnableParticlesPreview ? 1 : 0); internalOptions.AutoRebuildCSG = (byte)(Options.General.AutoRebuildCSG ? 1 : 0); internalOptions.AutoRebuildCSGTimeoutMs = Options.General.AutoRebuildCSGTimeoutMs; internalOptions.AutoRebuildNavMesh = (byte)(Options.General.AutoRebuildNavMesh ? 1 : 0); diff --git a/Source/Editor/Options/VisualOptions.cs b/Source/Editor/Options/VisualOptions.cs index 6de9c9716..4e94538e2 100644 --- a/Source/Editor/Options/VisualOptions.cs +++ b/Source/Editor/Options/VisualOptions.cs @@ -59,5 +59,12 @@ namespace FlaxEditor.Options [DefaultValue(true)] [EditorDisplay("Quality", "Enable MSAA For Debug Draw"), EditorOrder(500), Tooltip("Determines whether enable MSAA for DebugDraw primitives rendering. Helps with pixel aliasing but reduces performance.")] public bool EnableMSAAForDebugDraw { get; set; } = true; + + /// + /// Gets or sets a value indicating whether show looping particle effects in Editor viewport to simulate in-game look. + /// + [DefaultValue(true)] + [EditorDisplay("Preview"), EditorOrder(1000)] + public bool EnableParticlesPreview { get; set; } = true; } } diff --git a/Source/Engine/Particles/ParticleEffect.cpp b/Source/Engine/Particles/ParticleEffect.cpp index 9fbab80b9..b4e05e362 100644 --- a/Source/Engine/Particles/ParticleEffect.cpp +++ b/Source/Engine/Particles/ParticleEffect.cpp @@ -446,15 +446,21 @@ void ParticleEffect::Update() #if USE_EDITOR #include "Editor/Editor.h" +#include "Editor/Managed/ManagedEditor.h" void ParticleEffect::UpdateExecuteInEditor() { // Auto-play in Editor - if (!Editor::IsPlayMode && !_isStopped) + if (!Editor::IsPlayMode && !_isStopped && IsLooping && PlayOnStart && Editor::Managed->ManagedEditorOptions.EnableParticlesPreview) { _isPlaying = true; Update(); } + else if (!Editor::IsPlayMode && _isPlaying) + { + _isPlaying = false; + ResetSimulation(); + } } #endif