ExperimentalGear/scripts/components/pager/page.lua

76 lines
1.7 KiB
Lua
Raw Normal View History

---@class Page
---@field content Field[]
---@field viewHandler nil|PageView
local Page = {
drawBackground = nil, ---@type nil|function void(number deltaTime)
drawHeader = nil, ---@type nil|function void(number deltaTime)
drawFooter = nil, ---@type nil|function void(number deltaTime)
}
---Create a new Page instance
---@param o? table
---@return Page
function Page:new(o)
self.__index = self
o = o or {}
setmetatable(o, self)
--set instance members
o.content = o.content or {}
o.viewHandler = o.viewHandler or nil
return o
end
---Add field to page
---@param field Field
function Page:addField(field)
field.parent = self
table.insert(self.content, field)
end
---Handle controller button input
---
---Overload this function to implement page-specific behaviour
---@param button integer
function Page:handleButtonInput(button)
if button == game.BUTTON_BCK then
if self.viewHandler then
self.viewHandler:back()
end
end
end
---Handle controller knob input
---
---Overload this function to implement page-specific behaviour
---@param knob integer
---@param delta number
function Page:handleKnobInput(knob, delta) end
---Render page
---@param deltaTime number frametime in seconds
function Page:render(deltaTime)
---background
if self.drawBackground then
self:drawBackground(deltaTime)
end
--render children
for _, child in ipairs(self.content) do
child:render(deltaTime)
end
---header
if self.drawHeader then
self:drawHeader(deltaTime)
end
---footer
if self.drawFooter then
self:drawFooter(deltaTime)
end
end
return Page