-
What do you want to achieve?
I want to make a lightbar / siren system for my emergency vehicles. -
What is the issue?
When I start the ELS loop, everything prints as intended except “Loop # end”. That means something is yielding inside the loop. The value is also not set, the toggle functions are not in order in the while loop (?). -
What solutions have you tried so far?
I’ve asked on some support channels and asked ChatGPT.
Coroutine function
local function startLightLoop()
print("Starting...")
if lightLoopCoroutine then
print("Already started, returning")
return
end
local waitTime = 0.03
print("Creating coroutine...")
lightLoopCoroutine = coroutine.create(function()
print("Starting loop!")
while true do
print("Loop # start")
task.spawn(function()
toggleFront(true)
task.wait(0.2)
toggleFront(false)
end)
toggleRed(true)
task.wait(waitTime)
toggleRed(false)
task.wait(waitTime)
toggleRed(true)
task.wait(waitTime)
toggleRed(false)
task.wait(waitTime)
toggleBlue(true)
task.wait(waitTime)
toggleBlue(false)
task.wait(waitTime)
toggleBlue(true)
task.wait(waitTime)
toggleBlue(false)
task.wait(0.3)
print("Loop # end")
end
end)
print("Setting value...")
values.On.Value = true
print("Starting coroutine...")
local success, err = coroutine.resume(lightLoopCoroutine)
if not success then
warn("Error while starting light loop coroutine:", err)
return
end
warn("Finished!")
end
Output
16:18:06.158 Turning on - Server - SirenControlServer:189
16:18:06.159 Starting... - Server - SirenControlServer:89
16:18:06.159 Creating coroutine... - Server - SirenControlServer:95
16:18:06.159 Setting value... - Server - SirenControlServer:125
16:18:06.159 Starting coroutine... - Server - SirenControlServer:127
16:18:06.159 Starting loop! - Server - SirenControlServer:97
16:18:06.159 Loop # start - Server - SirenControlServer:99
16:18:06.159 (toggling front: true) - Server - SirenControlServer:56
16:18:06.160 (toggling red: true) - Server - SirenControlServer:32
16:18:06.160 Finished! - Server - SirenControlServer:133
16:18:06.160 (toggling red: false) - Server - SirenControlServer:32
16:18:06.160 (toggling blue: false) - Server - SirenControlServer:44
16:18:06.160 (toggling front: false) - Server - SirenControlServer:56
16:18:06.160 (toggling red: false) - Server - SirenControlServer:32
16:18:06.161 (toggling blue: false) - Server - SirenControlServer:44
16:18:06.161 ▶ (toggling front: false) (x2) - Server - SirenControlServer:56
Toggle functions
All toggle functions are the same except some values are changed.
local function toggleBlue(newValue: boolean)
print("(toggling blue: "..tostring(newValue)..")")
local newTransparency = newValue and 0 or 1
local blueLights = lights.Lightbar.LeftBlue
for _, light in blueLights:GetChildren() do
if not isLight(light) then
continue
end
light.Transparency = newTransparency
end
end
Thanks for any help!