diff --git a/src/RailUtil/InstanceUtil/init.luau b/src/RailUtil/InstanceUtil/init.luau index 702f16f..708ad21 100644 --- a/src/RailUtil/InstanceUtil/init.luau +++ b/src/RailUtil/InstanceUtil/init.luau @@ -652,34 +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?) - 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 - end) - end - end - - local EmitDelay: number? = PE:GetAttribute("EmitDelay") :: any - if typeof(EmitDelay) == "number" then - task.delay(EmitDelay, Emit) +function InstanceUtil.emitParticles(parent: Instance, emitCount: number?): {thread?} + local delayedThreads: {thread?} = {} + local function Emit(emitter: ParticleEmitter) + 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 - Emit() + emitter:Emit(emitCount) end end - for _, child in pairs(parent:GetChildren()) do - InstanceUtil.emitParticles(child) + + if parent:IsA("ParticleEmitter") then + Emit(parent :: ParticleEmitter) + else + for _, emitter in parent:QueryDescendants("ParticleEmitter") do + Emit(emitter :: ParticleEmitter) + end end + + return delayedThreads end --------------------------------------------------------------------------------