forked from Yonokid/PyTaikoGreen
151 lines
4.6 KiB
Lua
151 lines
4.6 KiB
Lua
local BaseRenda = {}
|
|
BaseRenda.__index = BaseRenda
|
|
|
|
function BaseRenda.new(index)
|
|
local self = setmetatable({}, BaseRenda)
|
|
self.name = "renda_" .. index
|
|
local screen_width = tex.get_screen_width()
|
|
local screen_scale = tex.get_screen_scale()
|
|
self.hori_move = anim.move(1500 * screen_scale, {total_distance = screen_width})
|
|
self.hori_move:start()
|
|
return self
|
|
end
|
|
|
|
function BaseRenda:update(current_time_ms)
|
|
self.hori_move:update(current_time_ms)
|
|
end
|
|
|
|
local Renda0 = setmetatable({}, {__index = BaseRenda})
|
|
Renda0.__index = Renda0
|
|
|
|
function Renda0.new(index)
|
|
local self = setmetatable({}, Renda0)
|
|
local base = BaseRenda.new(index)
|
|
for k, v in pairs(base) do self[k] = v end
|
|
local screen_scale = tex.get_screen_scale()
|
|
local screen_height = tex.get_screen_height()
|
|
self.vert_move = anim.move(1500 * screen_scale, {total_distance = screen_height + (80 * screen_scale)})
|
|
self.vert_move:start()
|
|
local tex_info = tex.get_texture_info("renda", self.name)
|
|
local num_frames = (tex_info and tex_info.frame_count) or 1
|
|
self.frame = math.random(0, num_frames - 1)
|
|
self.x = math.random(0, math.floor(500 * screen_scale))
|
|
self.y = math.random(0, math.floor(20 * screen_scale))
|
|
self._id = tex.get_id("renda", self.name) or 0
|
|
return self
|
|
end
|
|
|
|
function Renda0:update(current_time_ms)
|
|
BaseRenda.update(self, current_time_ms)
|
|
self.vert_move:update(current_time_ms)
|
|
end
|
|
|
|
function Renda0:draw()
|
|
tex.draw_texture(self._id, {
|
|
frame = self.frame,
|
|
x = self.hori_move.attribute + self.x,
|
|
y = -self.vert_move.attribute + self.y
|
|
})
|
|
end
|
|
|
|
local Renda1 = setmetatable({}, {__index = BaseRenda})
|
|
Renda1.__index = Renda1
|
|
|
|
function Renda1.new(index)
|
|
local self = setmetatable({}, Renda1)
|
|
local base = BaseRenda.new(index)
|
|
for k, v in pairs(base) do self[k] = v end
|
|
local screen_scale = tex.get_screen_scale()
|
|
local screen_height = tex.get_screen_height()
|
|
self.frame = math.random(0, 5)
|
|
self.y = math.random(0, math.floor(200 * screen_scale))
|
|
self.rotate = anim.move(800 * screen_scale, {total_distance = math.floor(screen_height / 2), loop = true})
|
|
self.rotate:start()
|
|
self.origin = {64, 64}
|
|
self._id = tex.get_id("renda", self.name) or 0
|
|
return self
|
|
end
|
|
|
|
function Renda1:update(current_time_ms)
|
|
BaseRenda.update(self, current_time_ms)
|
|
self.rotate:update(current_time_ms)
|
|
end
|
|
|
|
function Renda1:draw()
|
|
tex.draw_texture(self._id, {
|
|
frame = self.frame,
|
|
x = self.hori_move.attribute + self.origin[1],
|
|
y = self.y + self.origin[2],
|
|
origin = self.origin,
|
|
rotation = self.rotate.attribute
|
|
})
|
|
end
|
|
|
|
local Renda2 = setmetatable({}, {__index = BaseRenda})
|
|
Renda2.__index = Renda2
|
|
|
|
function Renda2.new(index)
|
|
local self = setmetatable({}, Renda2)
|
|
local base = BaseRenda.new(index)
|
|
for k, v in pairs(base) do self[k] = v end
|
|
local screen_scale = tex.get_screen_scale()
|
|
local screen_height = tex.get_screen_height()
|
|
self.vert_move = anim.move(1500, {total_distance = screen_height + (80 * screen_scale)})
|
|
self.vert_move:start()
|
|
self.x = math.random(0, math.floor(500 * screen_scale))
|
|
self.y = math.random(0, math.floor(20 * screen_scale))
|
|
self._id = tex.get_id("renda", self.name) or 0
|
|
return self
|
|
end
|
|
|
|
function Renda2:update(current_time_ms)
|
|
BaseRenda.update(self, current_time_ms)
|
|
self.vert_move:update(current_time_ms)
|
|
end
|
|
|
|
function Renda2:draw()
|
|
tex.draw_texture(self._id, {
|
|
x = self.hori_move.attribute + self.x,
|
|
y = -self.vert_move.attribute + self.y
|
|
})
|
|
end
|
|
|
|
local RendaController = {}
|
|
RendaController.__index = RendaController
|
|
|
|
function RendaController.new(path, index)
|
|
local self = setmetatable({}, RendaController)
|
|
self.rendas = {}
|
|
self.path = path or "background"
|
|
self.index = (index ~= nil) and index or math.random(0, 2)
|
|
tex.load_folder(self.path, "renda")
|
|
return self
|
|
end
|
|
|
|
function RendaController:add_renda()
|
|
local classes = {Renda0, Renda1, Renda2}
|
|
local cls = classes[self.index + 1]
|
|
table.insert(self.rendas, cls.new(self.index))
|
|
end
|
|
|
|
function RendaController:update(current_time_ms)
|
|
for i = #self.rendas, 1, -1 do
|
|
self.rendas[i]:update(current_time_ms)
|
|
if self.rendas[i].hori_move.is_finished then
|
|
table.remove(self.rendas, i)
|
|
end
|
|
end
|
|
end
|
|
|
|
function RendaController:draw()
|
|
for _, renda in ipairs(self.rendas) do
|
|
renda:draw()
|
|
end
|
|
end
|
|
|
|
function RendaController:destroy()
|
|
tex.unload_folder(self.path, "renda")
|
|
end
|
|
|
|
return RendaController
|