From b34a55cd6125c7dde80084b25b2bfbfc724ee6b7 Mon Sep 17 00:00:00 2001 From: Mophyr Avern Date: Thu, 27 Nov 2025 17:53:57 -0300 Subject: [PATCH 1/2] Update `.emitParticles()` and solve issue with emit count not passing to descending emitters --- src/RailUtil/InstanceUtil/init.luau | 31 ++++++++++++----------------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/src/RailUtil/InstanceUtil/init.luau b/src/RailUtil/InstanceUtil/init.luau index 702f16f..3299d8f 100644 --- a/src/RailUtil/InstanceUtil/init.luau +++ b/src/RailUtil/InstanceUtil/init.luau @@ -657,28 +657,23 @@ end ``` ]=] function InstanceUtil.emitParticles(parent: Instance, emitCount: number?) + local function Emit(emitter: ParticleEmitter) + emitter:Emit(emitCount or emitter:GetAttribute("EmitCount") :: number? or 10) + end + if parent:IsA("ParticleEmitter") then - local PE: ParticleEmitter = parent - local function Emit() - PE:Emit(emitCount or PE:GetAttribute("EmitCount") :: number? or 10) - local EmitDuration: number? = PE:GetAttribute("EmitDuration") :: any - if typeof(EmitDuration) == "number" then - PE.Enabled = true - task.delay(EmitDuration, function() - PE.Enabled = false + Emit(parent :: ParticleEmitter) + else + for _, emitter in parent:QueryDescendants("ParticleEmitter") do + local emitDelay: number? = emitter:GetAttribute("EmitDelay") :: number + if emitDelay and typeof(emitDelay) == "number" then + task.delay(emitDelay, function() + Emit(emitter :: ParticleEmitter) end) + else + Emit(emitter :: ParticleEmitter) end end - - local EmitDelay: number? = PE:GetAttribute("EmitDelay") :: any - if typeof(EmitDelay) == "number" then - task.delay(EmitDelay, Emit) - else - Emit() - end - end - for _, child in pairs(parent:GetChildren()) do - InstanceUtil.emitParticles(child) end end From 6af1d581cf00b83622eca0c287a50888161666f7 Mon Sep 17 00:00:00 2001 From: Mophyr Avern Date: Thu, 27 Nov 2025 18:01:43 -0300 Subject: [PATCH 2/2] Return array of delayed threads for emitters with EmitDelay attribute --- src/RailUtil/InstanceUtil/init.luau | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/RailUtil/InstanceUtil/init.luau b/src/RailUtil/InstanceUtil/init.luau index 3299d8f..708ad21 100644 --- a/src/RailUtil/InstanceUtil/init.luau +++ b/src/RailUtil/InstanceUtil/init.luau @@ -652,29 +652,36 @@ end @param parent -- The Instance to search Particles for @param emitCount -- The number of particles to emit + @return {thread?} -- A table of delayed threads if any of the emitters had EmitDelay. + Useful for cleaning up if needed. ```lua InstanceUtil.emitParticles(workspace.Effect) ``` ]=] -function InstanceUtil.emitParticles(parent: Instance, emitCount: number?) +function InstanceUtil.emitParticles(parent: Instance, emitCount: number?): {thread?} + local delayedThreads: {thread?} = {} local function Emit(emitter: ParticleEmitter) - emitter:Emit(emitCount or emitter:GetAttribute("EmitCount") :: number? or 10) + local emitDelay: number? = emitter:GetAttribute("EmitDelay") :: number + local emitCount: number? = emitCount or emitter:GetAttribute("EmitCount") :: number? or 10 + if emitDelay and typeof(emitDelay) == "number" then + local delayedThread = task.delay(emitDelay, function() + emitter:Emit(emitCount) + end) + table.insert(delayedThreads, delayedThread) + else + emitter:Emit(emitCount) + end end if parent:IsA("ParticleEmitter") then Emit(parent :: ParticleEmitter) else for _, emitter in parent:QueryDescendants("ParticleEmitter") do - local emitDelay: number? = emitter:GetAttribute("EmitDelay") :: number - if emitDelay and typeof(emitDelay) == "number" then - task.delay(emitDelay, function() - Emit(emitter :: ParticleEmitter) - end) - else - Emit(emitter :: ParticleEmitter) - end + Emit(emitter :: ParticleEmitter) end end + + return delayedThreads end --------------------------------------------------------------------------------