197 lines
4.2 KiB
Lua
197 lines
4.2 KiB
Lua
local BaseSubUI = {}
|
||
|
||
local BF_UI_HELPER = GConst.TYPEOF_UNITY_CLASS.BF_UI_HELPER
|
||
---- 子对象的层级应该保持在父对象层级 +300 以内 ,300 -- 400 会放一些活动主界面的顶层元素
|
||
|
||
---- 私有方法供generalActivitymgr调用
|
||
function BaseSubUI:_init(parentUI, root, subUIName)
|
||
self.parentUI = parentUI
|
||
self.root = root
|
||
self.subUIName = subUIName
|
||
self:onLoadPanelComplete()
|
||
if self._loadCompleteCallback then
|
||
self._loadCompleteCallback()
|
||
self._loadCompleteCallback = nil
|
||
end
|
||
|
||
self:_setUIOrder(self.parentUI:getUIOrder())
|
||
end
|
||
|
||
function BaseSubUI:_addOnDestroyCallback()
|
||
if self._addOnDestroyFlag then
|
||
return
|
||
end
|
||
self._addOnDestroyFlag = true
|
||
self.root:addOnDestroyCallback(function()
|
||
self:unBindAll()
|
||
end)
|
||
end
|
||
|
||
function BaseSubUI:_setUIOrder(order)
|
||
if not self.root then
|
||
return
|
||
end
|
||
if not self._baseRootCanvas then
|
||
self._baseRootCanvas = self.root:getComponent(GConst.TYPEOF_UNITY_CLASS.CANVAS)
|
||
end
|
||
|
||
self._baseRootCanvas.sortingOrder = order + 1
|
||
local uiHelper = self.root:getGameObject():GetComponent(BF_UI_HELPER)
|
||
if not uiHelper then
|
||
return
|
||
end
|
||
|
||
uiHelper:SetSortingOrder(self._baseRootCanvas.sortingOrder)
|
||
end
|
||
|
||
function BaseSubUI:_reshow()
|
||
if not self.root then
|
||
return
|
||
end
|
||
self.root:setActive(true)
|
||
self:onReshow()
|
||
end
|
||
|
||
function BaseSubUI:_hide()
|
||
if not self.root then
|
||
return
|
||
end
|
||
self.root:setActive(false)
|
||
self:onHide()
|
||
end
|
||
|
||
function BaseSubUI:_close()
|
||
self:unBindAll()
|
||
self:onClose()
|
||
end
|
||
|
||
function BaseSubUI:getRoot()
|
||
return self.root
|
||
end
|
||
|
||
function BaseSubUI:setLoadCompleteCallback(func)
|
||
if self:getRoot() then
|
||
if func then
|
||
func()
|
||
end
|
||
else
|
||
self._loadCompleteCallback = func
|
||
end
|
||
end
|
||
|
||
---- 公用方法为子类的生命周期
|
||
function BaseSubUI:getPrefabPath()
|
||
return --"xxxx"
|
||
end
|
||
|
||
function BaseSubUI:ctor(params)
|
||
|
||
end
|
||
|
||
---- after loadPanel
|
||
function BaseSubUI:onLoadPanelComplete()
|
||
|
||
end
|
||
|
||
---- setActive(true)
|
||
function BaseSubUI:onReshow()
|
||
|
||
end
|
||
|
||
---- setActive(false)
|
||
function BaseSubUI:onHide()
|
||
|
||
end
|
||
|
||
---- onclose
|
||
function BaseSubUI:onClose()
|
||
|
||
end
|
||
|
||
---- 绑定数据
|
||
function BaseSubUI:bind(data, fieldName, bindFunc, immediately)
|
||
if not self.parentUI then
|
||
return
|
||
end
|
||
self.parentUI:bind(data, fieldName, bindFunc, immediately)
|
||
end
|
||
|
||
---- 解绑数据 可以不用手动释放,主界面关闭时会全部unbind
|
||
function BaseSubUI:unBind(data, fieldName)
|
||
if not self.parentUI then
|
||
return
|
||
end
|
||
self.parentUI:unBind(data, fieldName)
|
||
end
|
||
|
||
|
||
function BaseSubUI:bind(data, fieldName, bindFunc, immediately)
|
||
self:_addOnDestroyCallback()
|
||
if not self._baseBindData then
|
||
self._baseBindData = {}
|
||
end
|
||
if not self._baseBindData[data] then
|
||
self._baseBindData[data] = {}
|
||
end
|
||
data:bind(fieldName, self, bindFunc, immediately)
|
||
table.insert(self._baseBindData[data], fieldName)
|
||
end
|
||
|
||
function BaseSubUI:unBind(data, fieldName)
|
||
if self._baseBindData and self._baseBindData[data] then
|
||
for i, field in ipairs(self._baseBindData[data]) do
|
||
if field == fieldName then
|
||
data:unBind(field, self)
|
||
table.remove(self._baseBindData[data], i)
|
||
break
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
function BaseSubUI:unBindAll()
|
||
if not self._baseBindData then
|
||
return
|
||
end
|
||
|
||
for data, fields in pairs(self._baseBindData) do
|
||
for _, field in ipairs(fields) do
|
||
data:unBind(field, self)
|
||
end
|
||
end
|
||
self._baseBindData = nil
|
||
end
|
||
|
||
---- 添加特效
|
||
function BaseSubUI:addEffect(effect, parent, order)
|
||
if not self.parentUI then
|
||
return
|
||
end
|
||
self.parentUI:addEffect(effect, parent, order)
|
||
end
|
||
|
||
---- 移除特效
|
||
function BaseSubUI:removeEffect(effect, isNeedCleanUp)
|
||
if not self.parentUI then
|
||
return
|
||
end
|
||
self.parentUI:removeEffect(effect, isNeedCleanUp)
|
||
end
|
||
|
||
-- 界面的自定义事件添加监听
|
||
function BaseSubUI:addEventListener(key, func, priority)
|
||
if not self.parentUI then
|
||
return
|
||
end
|
||
self.parentUI:addEventListener(key, func, priority)
|
||
end
|
||
|
||
-- 界面的自定义事件移除监听
|
||
function BaseSubUI:removeEventListener(key)
|
||
if not self.parentUI then
|
||
return
|
||
end
|
||
self.parentUI:removeEventListener(key)
|
||
end
|
||
|
||
return BaseSubUI |