35 lines
1,019 B
Lua
35 lines
1,019 B
Lua
local Element = require('uosc_shared/elements/Element')
|
|
|
|
---@class Curtain : Element
|
|
local Curtain = class(Element)
|
|
|
|
function Curtain:new() return Class.new(self) --[[@as Curtain]] end
|
|
function Curtain:init()
|
|
Element.init(self, 'curtain', {ignores_menu = true})
|
|
self.opacity = 0
|
|
---@type string[]
|
|
self.dependents = {}
|
|
end
|
|
|
|
---@param id string
|
|
function Curtain:register(id)
|
|
self.dependents[#self.dependents + 1] = id
|
|
if #self.dependents == 1 then self:tween_property('opacity', self.opacity, 1) end
|
|
end
|
|
|
|
---@param id string
|
|
function Curtain:unregister(id)
|
|
self.dependents = itable_filter(self.dependents, function(item) return item ~= id end)
|
|
if #self.dependents == 0 then self:tween_property('opacity', self.opacity, 0) end
|
|
end
|
|
|
|
function Curtain:render()
|
|
if self.opacity == 0 or options.curtain_opacity == 0 then return end
|
|
local ass = assdraw.ass_new()
|
|
ass:rect(0, 0, display.width, display.height, {
|
|
color = '000000', opacity = options.curtain_opacity * self.opacity,
|
|
})
|
|
return ass
|
|
end
|
|
|
|
return Curtain
|