59 lines
1.5 KiB
Lua
59 lines
1.5 KiB
Lua
--- @section Glitch
|
|
Glitch = {}
|
|
|
|
--- Shows the glitch effect.
|
|
--- @within Glitch
|
|
function Glitch.show()
|
|
if Context and Context.glitch then
|
|
Context.glitch.enabled = true
|
|
end
|
|
end
|
|
|
|
--- Hides the glitch effect.
|
|
--- @within Glitch
|
|
function Glitch.hide()
|
|
if Context and Context.glitch then
|
|
Context.glitch.enabled = false
|
|
end
|
|
end
|
|
|
|
--- Draws the glitch effect if active.
|
|
--- @within Glitch
|
|
function Glitch.draw()
|
|
if not Context or not Context.glitch or not Context.glitch.enabled then return end
|
|
|
|
-- Update state timer
|
|
Context.glitch.timer = Context.glitch.timer - 1
|
|
if Context.glitch.timer <= 0 then
|
|
if Context.glitch.state == "active" then
|
|
Context.glitch.state = "waiting"
|
|
Context.glitch.timer = math.random(20, 60) -- Time to stay fixed
|
|
else
|
|
Context.glitch.state = "active"
|
|
Context.glitch.timer = math.random(40, 100) -- Time to stay glitchy
|
|
end
|
|
end
|
|
|
|
-- Draw stripes only when active
|
|
if Context.glitch.state == "active" then
|
|
for i = 1, 15 do
|
|
local rx = math.random(0, Config.screen.width - 1)
|
|
local ry = math.random(0, Config.screen.height - 1)
|
|
|
|
-- Sample color at the random point
|
|
local color = pix(rx, ry)
|
|
|
|
-- Determine random length for the stripe (2-40)
|
|
local length = math.random(2, 40)
|
|
|
|
-- Draw the vertical stripe
|
|
for sy = 0, length - 1 do
|
|
local dy = ry + sy
|
|
if dy < Config.screen.height then
|
|
pix(rx, dy, color)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|