Files
2026-07-17 13:03:07 -04:00

104 lines
3.3 KiB
Lua

local BaseFever = {}
BaseFever.__index = BaseFever
function BaseFever.new(index, bpm, path)
local self = setmetatable({}, BaseFever)
self.name = "fever_" .. index
self.path = path or "background"
tex.load_folder(self.path, "fever/" .. self.name)
local half_beat = (60000 / bpm) / 2
self.bounce_up = anim.move(half_beat, {total_distance = 50, ease_out = "quadratic"})
self.bounce_down = anim.move(half_beat, {total_distance = 50, ease_in = "quadratic", delay = half_beat})
self._id_overlay_l = tex.get_id(self.name, "overlay_l") or 0
self._id_overlay_r = tex.get_id(self.name, "overlay_r") or 0
self._id_overlay = tex.get_id(self.name, "overlay") or 0
return self
end
function BaseFever:start()
self.bounce_up:start()
self.bounce_down:start()
end
function BaseFever:update(current_time_ms, bpm)
self.bounce_up:update(current_time_ms)
self.bounce_down:update(current_time_ms)
if self.bounce_down.is_finished then
local half_beat = (60000 / bpm) / 2
self.bounce_up = anim.move(half_beat, {total_distance = 50, ease_out = "quadratic"})
self.bounce_down = anim.move(half_beat, {total_distance = 50, ease_in = "quadratic", delay = half_beat})
self.bounce_up:start()
self.bounce_down:start()
end
end
function BaseFever:destroy()
tex.unload_folder(self.path, "fever/" .. self.name)
end
local Fever0 = setmetatable({}, {__index = BaseFever})
Fever0.__index = Fever0
function Fever0.new(index, bpm, path)
local self = setmetatable({}, Fever0)
local base = BaseFever.new(index, bpm, path)
for k, v in pairs(base) do self[k] = v end
return self
end
function Fever0:draw()
local y = self.bounce_down.attribute - self.bounce_up.attribute
tex.draw_texture(self._id_overlay_l, {y = y})
tex.draw_texture(self._id_overlay_r, {y = y})
end
-- Fever1 and Fever2 share the same draw as Fever0
local Fever1 = setmetatable({}, {__index = Fever0})
Fever1.__index = Fever1
function Fever1.new(index, bpm, path)
local self = setmetatable({}, Fever1)
local base = BaseFever.new(index, bpm, path)
for k, v in pairs(base) do self[k] = v end
return self
end
function Fever1:draw() Fever0.draw(self) end
local Fever2 = setmetatable({}, {__index = Fever0})
Fever2.__index = Fever2
function Fever2.new(index, bpm, path)
local self = setmetatable({}, Fever2)
local base = BaseFever.new(index, bpm, path)
for k, v in pairs(base) do self[k] = v end
return self
end
function Fever2:draw() Fever0.draw(self) end
local Fever3 = setmetatable({}, {__index = BaseFever})
Fever3.__index = Fever3
function Fever3.new(index, bpm, path)
local self = setmetatable({}, Fever3)
local base = BaseFever.new(index, bpm, path)
for k, v in pairs(base) do self[k] = v end
return self
end
function Fever3:draw()
local y = self.bounce_down.attribute - self.bounce_up.attribute
tex.draw_texture(self._id_overlay, {y = y})
end
local Fever = {}
Fever.Base = BaseFever
Fever.Fever0 = Fever0
Fever.Fever1 = Fever1
Fever.Fever2 = Fever2
Fever.Fever3 = Fever3
function Fever.create(index, bpm, path)
local map = {Fever0, Fever1, Fever2, Fever3}
return map[index + 1].new(index, bpm, path)
end
return Fever