require "common.globals" require "common.class" ---@type PageRegistry local instance = nil ---@class PageRegistry ---@field pages Page[] local PageRegistry = { __name = "PageManager" } ---Create new PageManager instance ---@param params? PageRegistry ---@return PageRegistry function PageRegistry.new(params) params = params or {} local self = CreateInstance(PageRegistry, params) self.pages = params.pages or {} return self end ---Get PageManager instance ---@return PageRegistry function PageRegistry.get() if not instance then instance = PageRegistry.new() end return instance 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 return PageRegistry