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}) 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.name, "overlay_l", {y = y}) tex.draw_texture(self.name, "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.name, "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