---@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 ---Replace the current pageStack with a new root page ---@param page Page function PageView:replace(page) --clear pageStack while self.pageStack[1] do self:back() end self:navigate(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