2022-06-29 00:35:52 +02:00
|
|
|
require "common.globals"
|
|
|
|
require "common.class"
|
|
|
|
|
2024-02-02 02:27:05 +01:00
|
|
|
require "api.logging"
|
2022-06-29 00:35:52 +02:00
|
|
|
|
2022-08-08 21:41:32 +02:00
|
|
|
---@class PageRegistry
|
2022-06-29 00:35:52 +02:00
|
|
|
---@field pages Page[]
|
2022-08-08 21:41:32 +02:00
|
|
|
local PageRegistry = {
|
2024-02-02 02:27:05 +01:00
|
|
|
__name = "PageManager",
|
|
|
|
pages = {},
|
2022-06-29 00:35:52 +02:00
|
|
|
}
|
|
|
|
|
2024-02-02 02:27:05 +01:00
|
|
|
---Reset and initialize PageManager global
|
2022-08-08 21:41:32 +02:00
|
|
|
---@param params? PageRegistry
|
2024-02-02 02:27:05 +01:00
|
|
|
function PageRegistry:init(params)
|
2022-06-29 00:35:52 +02:00
|
|
|
params = params or {}
|
|
|
|
|
|
|
|
self.pages = params.pages or {}
|
|
|
|
end
|
|
|
|
|
|
|
|
---Store page with default name
|
|
|
|
---@param page Page
|
2022-08-08 21:41:32 +02:00
|
|
|
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
|
2022-06-29 00:35:52 +02:00
|
|
|
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
|
2022-08-08 21:41:32 +02:00
|
|
|
|
|
|
|
self.pages[name] = page
|
2022-06-29 00:35:52 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
---Get page by name or by class (default name)
|
|
|
|
---@param page string|Page
|
2022-08-08 21:41:32 +02:00
|
|
|
function PageRegistry:getPage(page)
|
2022-06-29 00:35:52 +02:00
|
|
|
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
|
|
|
|
|
2024-02-02 02:27:05 +01:00
|
|
|
---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
|
|
|
|
|
2022-08-08 21:41:32 +02:00
|
|
|
return PageRegistry
|