69 lines
1.6 KiB
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
|