Files
Main/Assets/GameAssets/Resources/Lua/UI/Base/UIFormManager.lua
2025-01-25 04:38:09 +08:00

130 lines
3.1 KiB
Lua

------------------------------------------------
--作者: gzg
--日期: 2019-03-25
--文件: UIFormManager.lua
--模块: UIFormManager
--描述: Lua端窗体管理器
------------------------------------------------
--引用
local UIBaseForm = require("UI.Base.UIBaseForm")
--定义模块
local UIFormManager = {
AllForms = {},
UpdateForms = {},
RenewForms = {}
}
--增加重新加载的界面
function UIFormManager:AddRenewForm(name)
self.RenewForms[name] = true
end
--是否需要重新加载
function UIFormManager:IsRenew(name)
return not(not self.RenewForms[name])
end
--创建ui对应的lua控制脚本
function UIFormManager:CreateLuaUIScript(name, gobj)
-- if AppConfig.IsDestroyOnClose then
-- self:DestroyForm(name)
-- end
self:CreateForm(name, gobj)
if self.RenewForms[name] then
self.RenewForms[name] = nil
end
end
--创建某个窗体
function UIFormManager:CreateForm(name, gobj)
if self.AllForms[name] then
-- error(UIUtils.CSFormat(DataConfig.DataMessageString.Get("UIFormManagerTips"), name))
Debug.LogError(string.format("创建UI重复 %s", name))
self:DestroyForm(name)
end
local _form = require(string.format("UI.Forms.%s.%s", name, name))
_form._Name_ = name
_form.GO = gobj
_form.Trans = gobj.transform
self.AllForms[name] = _form
--当需要Update的窗体,放置到UpdateForms中.
if _form.Update then
self.UpdateForms[name] = _form
end
UIBaseForm.BindCSForm(_form, gobj)
end
--卸载某个窗体
function UIFormManager:DestroyForm(name)
if self.AllForms[name] then
local _form = self.AllForms[name]
--从集合中删除
self.AllForms[name] = nil
if self.UpdateForms[name] then
self.UpdateForms[name] = nil
end
--解绑定CS窗体
UIBaseForm.UnBindCSForm(_form)
--卸载窗体Lua脚本
Utils.RemoveRequiredByName(string.format("UI.Forms.%s.%s", name, name))
end
end
--窗体更新
function UIFormManager:Update(deltaTime)
--判断更新容器是否为空,然后再循环对所有的窗体进行更新处理
if next(self.UpdateForms) ~= nil then
for _, v in pairs(self.UpdateForms) do
if v._ActiveSelf_ then
v:Update(deltaTime)
end
end
end
end
--获取CS端的UIFormManager
function UIFormManager:GetCSUIFormManager()
if not self.CSUIFormManager then
self.CSUIFormManager = CS.Thousandto.Code.Center.GameUICenter.UIFormManager;
end
return self.CSUIFormManager;
end
--获取UIRoot
function UIFormManager:GetUIRoot()
return self:GetCSUIFormManager().UIRoot;
end
--获取ShadowRoot
function UIFormManager:GetShadowRoot()
return self:GetCSUIFormManager().UIShadowRoot;
end
--获取宽
function UIFormManager:GetWidth()
local _screen = CS.UnityEngine.Screen;
local _height = self:GetHeight();
return _height * _screen.width / _screen.height;
end
--获取高
function UIFormManager:GetHeight()
return self:GetUIRoot().activeHeight;
end
--是否是刘海屏
function UIFormManager:IsNotchInScreen()
return self:GetCSUIFormManager().IsNotchInScreen;
end
--现在的屏幕方向
function UIFormManager:CurrentOrientation()
return self:GetCSUIFormManager().CurrentOrientation;
end
return UIFormManager