ExperimentalGear/scripts/api/page/pageregistry.lua

69 lines
1.6 KiB
Lua

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