56 lines
1.7 KiB
Lua
56 lines
1.7 KiB
Lua
NoiseAnimation = {}
|
|
class('NoiseAnimation').extends(NobleSprite)
|
|
|
|
-- Global EW (РЕБ) state accessible by crosshair
|
|
NoiseAnimation.isJamming = false
|
|
|
|
function NoiseAnimation:init(x, y)
|
|
NoiseAnimation.super.init(self, "assets/sprites/noise", true)
|
|
self.animation:addState("run", 2, 11)
|
|
self.animation:addState("idle", 1, 1)
|
|
self.animation.run.frameDuration = 2.5
|
|
self.animation:setState("idle")
|
|
self:setZIndex(ZIndex.foreground)
|
|
self:setSize(400, 240)
|
|
self:add()
|
|
self:moveTo(x, y)
|
|
|
|
self.state = "idle"
|
|
self.timer = 0
|
|
|
|
-- РЕБ timing: long idle periods, short jam bursts
|
|
self.minIdleDuration = 300
|
|
self.maxIdleDuration = 600
|
|
self.minJamDuration = 40
|
|
self.maxJamDuration = 120
|
|
|
|
self.nextSwitch = math.random(self.minIdleDuration, self.maxIdleDuration)
|
|
end
|
|
|
|
function NoiseAnimation:update()
|
|
self.timer = self.timer + 1
|
|
|
|
if self.timer >= self.nextSwitch then
|
|
self.timer = 0
|
|
if self.state == "idle" then
|
|
self.state = "jamming"
|
|
self.animation:setState("run")
|
|
self.nextSwitch = math.random(self.minJamDuration, self.maxJamDuration)
|
|
NoiseAnimation.isJamming = true
|
|
else
|
|
self.state = "idle"
|
|
self.animation:setState("idle")
|
|
self.nextSwitch = math.random(self.minIdleDuration, self.maxIdleDuration)
|
|
NoiseAnimation.isJamming = false
|
|
playdate.display.setOffset(0, 0)
|
|
end
|
|
end
|
|
|
|
-- Micro screen shake during jamming
|
|
if self.state == "jamming" then
|
|
local sx = math.random(-1, 1)
|
|
local sy = math.random(-1, 1)
|
|
playdate.display.setOffset(sx, sy)
|
|
end
|
|
end
|