Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 22 additions & 20 deletions src/RailUtil/InstanceUtil/init.luau
Original file line number Diff line number Diff line change
Expand Up @@ -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

--------------------------------------------------------------------------------
Expand Down