60 lines
1.2 KiB
Lua
60 lines
1.2 KiB
Lua
|
---@class PageView
|
||
|
---@field pageStack Page[]
|
||
|
local PageView = {}
|
||
|
|
||
|
local function pushStack(t, o)
|
||
|
table.insert(t, 1, o)
|
||
|
end
|
||
|
|
||
|
local function popStack(t)
|
||
|
return table.remove(t, 1)
|
||
|
end
|
||
|
|
||
|
---Create a new PageView instance
|
||
|
---@param rootPage Page
|
||
|
---@return PageView
|
||
|
function PageView:new(rootPage)
|
||
|
self.__index = self
|
||
|
local o = {}
|
||
|
setmetatable(o, self)
|
||
|
|
||
|
--set viewHandler as this instance for rootPage
|
||
|
|
||
|
rootPage.viewHandler = o
|
||
|
|
||
|
--set instance members
|
||
|
|
||
|
o.pageStack = {}
|
||
|
pushStack(o.pageStack, rootPage)
|
||
|
|
||
|
return o
|
||
|
end
|
||
|
|
||
|
---Navigate to page
|
||
|
---@param page Page
|
||
|
function PageView:navigate(page)
|
||
|
page.viewHandler = self
|
||
|
pushStack(self.pageStack, page)
|
||
|
end
|
||
|
|
||
|
---Navigate to the previous page
|
||
|
function PageView:back()
|
||
|
if not self.pageStack[1] then
|
||
|
game.Log("PageView:back() : pageStack empty, cannot go back", game.LOGGER_WARNING)
|
||
|
return
|
||
|
end
|
||
|
|
||
|
self.pageStack[1].viewHandler = nil
|
||
|
popStack(self.pageStack)
|
||
|
end
|
||
|
|
||
|
function PageView:render(deltaTime)
|
||
|
if not self.pageStack[1] then
|
||
|
-- pageStack empty, cannot render, but do not error out, also do not log every frame
|
||
|
return
|
||
|
else
|
||
|
self.pageStack[1]:render(deltaTime)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return PageView
|