74 lines
1.8 KiB
Lua
Raw Normal View History

2025-01-04 23:00:19 +08:00
--- 辅助解耦的存在
if UE_SERVER then return ; end
UIManager = {};
UIManager.Widgets = {};
UIManager.WaitFuncs = {};
function UIManager:Register(InKey, InWidget)
assert(InKey ~= nil);
assert(InWidget ~= nil);
if self.Widgets[InKey] ~= nil then
if self.Widgets[InKey] == InWidget then
UGCLogSystem.Log("[UIManager:Register] 不要重复添加")
return ;
end
end
self.Widgets[InKey] = InWidget;
if self.WaitFuncs[InKey] ~= nil then
for i, FuncInfo in pairs(self.WaitFuncs[InKey]) do
FuncInfo.Fun(InWidget, table.unpackTable(FuncInfo.Params));
end
self.WaitFuncs[InKey] = nil;
end
end
---@param InKey
---@param InFunc fun(Widget:UUserWidget, ...)
function UIManager:Get(InKey, InFunc, ...)
assert(InKey ~= nil)
local Params = { ... };
if self.Widgets[InKey] then
if type(InFunc) == 'function' then InFunc(self.Widgets[InKey]); end
return self.Widgets[InKey];
end
if self.WaitFuncs[InKey] == nil then
self.WaitFuncs[InKey] = {};
end
table.insert(self.WaitFuncs[InKey], {
Fun = InFunc,
Params = Params,
});
return nil;
end
function UIManager:Exec(InKey, InFuncName, ...)
assert(InKey ~= nil)
local param = { ... };
if self.Widgets[InKey] then
table.func(self.Widgets[InKey], InFuncName, ...);
end
end
function UIManager:Unregister(InKey)
self.Widgets[InKey] = nil;
self.WaitFuncs[InKey] = nil;
end
function UIManager:Show(InKey, ...)
-- 检查是否有函数
local Widget = self.Widgets[InKey];
if Widget == nil then return ; end
table.func(Widget, "OnShowPanel", ...);
Widget:SetVisibility(ESlateVisibility.SelfHitTestInvisible);
end
function UIManager:Hide(InKey, ...)
-- 检查是否有函数
local Widget = self.Widgets[InKey];
if Widget == nil then return ; end
table.func(Widget, "OnClosePanel", ...);
Widget:SetVisibility(ESlateVisibility.Collapsed);
end
return UIManager;