From 9d3a2bc778575d5dca0cb7063b1383236738de33 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Thu, 9 Apr 2026 17:12:59 +0200 Subject: [PATCH] Add `CanSpawn` to `ParticleEffect` for runtime control over particles spawning --- Source/Engine/Particles/ParticleEffect.h | 6 ++++++ Source/Engine/Particles/Particles.cpp | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Source/Engine/Particles/ParticleEffect.h b/Source/Engine/Particles/ParticleEffect.h index 4de88f1d5..5ae56603a 100644 --- a/Source/Engine/Particles/ParticleEffect.h +++ b/Source/Engine/Particles/ParticleEffect.h @@ -192,6 +192,12 @@ public: API_FIELD(Attributes="NoSerialize, HideInEditor") ScriptingObjectReference CustomViewRenderTask; + /// + /// Toggles particles spawning functionality (for all emitters) at runtime. + /// + API_FIELD(Attributes="NoSerialize, HideInEditor") + bool CanSpawn = true; + public: /// /// The particles simulation update mode. Defines how to update particles emitter. diff --git a/Source/Engine/Particles/Particles.cpp b/Source/Engine/Particles/Particles.cpp index 0653f31e8..3c41cd243 100644 --- a/Source/Engine/Particles/Particles.cpp +++ b/Source/Engine/Particles/Particles.cpp @@ -1702,7 +1702,7 @@ void ParticlesSystem::Job(int32 index) // Calculate new time position const float startTime = (float)track.AsEmitter.StartFrame / fps; const float durationTime = (float)track.AsEmitter.DurationFrames / fps; - const bool canSpawn = startTime <= instance.Time && instance.Time <= startTime + durationTime; + const bool canSpawn = startTime <= instance.Time && instance.Time <= startTime + durationTime && effect->CanSpawn; // Update instance data data.Sync(effect->Instance, particleSystem, track.AsEmitter.Index);