require "common.globals" require "common.class" require "api.logging" ---@class PageRegistry ---@field pages Page[] local PageRegistry = { __name = "PageManager", pages = {}, } ---Reset and initialize PageManager global ---@param params? PageRegistry function PageRegistry:init(params) params = params or {} self.pages = params.pages or {} end ---Store page with default name ---@param page Page function PageRegistry:register(page) self:addPage(page, page.__name) end ---Add page to page registry ---@param page Page ---@param name string function PageRegistry:addPage(page, name) if self:getPage(page) then game.Log(self.__name .. ":storePage() : page `" .. tostring(page) .. "` already stored, overwriting...", game.LOGGER_WARNING) else game.Log(self.__name .. ":storePage() : stored page `" .. tostring(page) .. "` with key '" .. page.__name .. "'", game.LOGGER_DEBUG) end self.pages[name] = page end ---Get page by name or by class (default name) ---@param page string|Page function PageRegistry:getPage(page) if type(page) == "string" then return self.pages[page] elseif type(page) == "table" and page.__name then return self.pages[page.__name] end game.Log(self.__name .. ":getPage() : invalid parameter (" .. tostring(page) .. ")", game.LOGGER_WARNING) return nil end ---Get page by class --- ---Ensure valid page instance by creating and registering one, if not found ---@param page Page function PageRegistry:getOrCreatePage(page) if not self:getPage(page) then page = page.new() self:register(page) end return page end return PageRegistry