139 lines
2.8 KiB
Lua
139 lines
2.8 KiB
Lua
local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AutoCalcOrderUICtrl = HL.Class('AutoCalcOrderUICtrl', uiCtrl.UICtrl)
|
|
|
|
|
|
|
|
AutoCalcOrderUICtrl.m_curArgs = HL.Field(HL.Table)
|
|
|
|
|
|
AutoCalcOrderUICtrl.m_attachedPanels = HL.Field(HL.Table)
|
|
|
|
|
|
AutoCalcOrderUICtrl.m_tailUpdateTickKey = HL.Field(HL.Number) << -1
|
|
|
|
|
|
AutoCalcOrderUICtrl.m_calcOrderDirty = HL.Field(HL.Boolean) << false
|
|
|
|
|
|
|
|
AutoCalcOrderUICtrl.CheckCalcOrderDirty = HL.Method() << function(self)
|
|
if self.m_calcOrderDirty and not self:IsPlayingAnimationOut() then
|
|
self:CalcPanelOrder()
|
|
end
|
|
end
|
|
|
|
|
|
|
|
AutoCalcOrderUICtrl.OnShow = HL.Override() << function(self)
|
|
self.m_tailUpdateTickKey = LuaUpdate:Add("TailTick", function()
|
|
self:CheckCalcOrderDirty()
|
|
end)
|
|
end
|
|
|
|
|
|
|
|
AutoCalcOrderUICtrl.OnClose = HL.Override() << function(self)
|
|
self.m_tailUpdateTickKey = LuaUpdate:Remove(self.m_tailUpdateTickKey)
|
|
end
|
|
|
|
|
|
|
|
AutoCalcOrderUICtrl.OnHide = HL.Override() << function(self)
|
|
self.m_tailUpdateTickKey = LuaUpdate:Remove(self.m_tailUpdateTickKey)
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
AutoCalcOrderUICtrl._CustomHide = HL.Virtual(HL.Number) << function(self, panelId)
|
|
if not self.m_attachedPanels[panelId] then
|
|
return
|
|
end
|
|
self.m_attachedPanels[panelId] = nil
|
|
self:CalcPanelOrder()
|
|
end
|
|
|
|
|
|
|
|
|
|
AutoCalcOrderUICtrl._AttachToPanel = HL.Virtual(HL.Table) << function(self, args)
|
|
self.m_attachedPanels[args.panelId] = args
|
|
self:CalcPanelOrder()
|
|
end
|
|
|
|
|
|
|
|
AutoCalcOrderUICtrl.PanelOrderChanged = HL.Method(HL.Opt(HL.Any)) << function(self)
|
|
self.m_calcOrderDirty = true
|
|
end
|
|
|
|
|
|
|
|
|
|
AutoCalcOrderUICtrl.CalcPanelOrder = HL.Virtual(HL.Opt(HL.Boolean)) << function(self, fromOutAni)
|
|
self.m_calcOrderDirty = false
|
|
|
|
local maxOrder, curArgs
|
|
for panelId, args in pairs(self.m_attachedPanels) do
|
|
local isOpen, panel = UIManager:IsOpen(panelId)
|
|
if isOpen and panel:IsShow() and not panel:IsPlayingAnimationOut() then
|
|
local order = panel:GetSortingOrder() + args.offset
|
|
if not maxOrder or order > maxOrder then
|
|
maxOrder = order
|
|
curArgs = args
|
|
end
|
|
end
|
|
end
|
|
|
|
if maxOrder then
|
|
self:CustomSetPanelOrder(maxOrder, curArgs)
|
|
if fromOutAni then
|
|
self:PlayAnimationIn()
|
|
end
|
|
else
|
|
self.m_curArgs = nil
|
|
self:Hide()
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
AutoCalcOrderUICtrl.CustomSetPanelOrder = HL.Virtual(HL.Opt(HL.Number, HL.Table)) << function(self, maxOrder, args)
|
|
end
|
|
|
|
|
|
|
|
|
|
AutoCalcOrderUICtrl.PlayOutAnim = HL.Method(HL.Number) << function(self, panelId)
|
|
if self:IsHide() then
|
|
return
|
|
end
|
|
if not self.m_curArgs or self.m_curArgs.panelId ~= panelId then
|
|
return
|
|
end
|
|
self:PlayAnimationOutWithCallback(function()
|
|
self:CalcPanelOrder(true)
|
|
end)
|
|
end
|
|
|
|
HL.Commit(AutoCalcOrderUICtrl)
|