279 lines
7.0 KiB
Plaintext
279 lines
7.0 KiB
Plaintext
autoImport("UILayer")
|
|
autoImport("UINode")
|
|
UIManagerProxy = class ("UIManagerProxy",pm.Proxy)
|
|
|
|
UIManagerProxy.Instance = nil
|
|
|
|
UIManagerProxy.iPhoneXManualHeight = 800
|
|
|
|
function UIManagerProxy:ctor()
|
|
self.proxyName = "UIManagerProxy"
|
|
self.UIRoot = Game.AssetManager_UI:CreateAsset(ResourcePathHelper.UIView("UIRoot"));
|
|
local uiroot = self.UIRoot:GetComponent(UIRoot)
|
|
if(uiroot) then
|
|
local screen = NGUITools.screenSize;
|
|
local aspect = screen.x / screen.y;
|
|
local initialAspect = uiroot.manualWidth / uiroot.manualHeight;
|
|
if(aspect>(initialAspect + 0.1)) then
|
|
uiroot.fitWidth = false
|
|
uiroot.fitHeight = true
|
|
if(ApplicationInfo.IsIphoneX()) then
|
|
uiroot.manualHeight = UIManagerProxy.iPhoneXManualHeight
|
|
end
|
|
end
|
|
|
|
self.rootSize = { math.floor(uiroot.activeHeight * aspect), uiroot.activeHeight }
|
|
end
|
|
GameObject.DontDestroyOnLoad(self.UIRoot);
|
|
local speechGO = GameObject("SpeechRecognizer")
|
|
speechGO.transform.parent = self.UIRoot.transform
|
|
speechGO:AddComponent(AudioSource)
|
|
self.speechRecognizer = speechGO:AddComponent(SpeechRecognizer)
|
|
self.layers = {}
|
|
|
|
self.forbidview_map = {};
|
|
|
|
UIManagerProxy.Instance = self
|
|
self:InitLayers()
|
|
self:InitRollBack()
|
|
self:InitViewPop()
|
|
end
|
|
|
|
function UIManagerProxy:GetUIRootSize()
|
|
return self.rootSize;
|
|
end
|
|
|
|
function UIManagerProxy:InitLayers()
|
|
local layers = {}
|
|
for k,v in pairs(UIViewType) do
|
|
layers[#layers + 1] = v
|
|
-- v.vname = k
|
|
-- self.layers[k] = self:SpawnLayer(v)
|
|
end
|
|
table.sort(layers,function(l,r)
|
|
return l.depth < r.depth
|
|
end)
|
|
for i=1,#layers do
|
|
self.layers[layers[i].name] = self:SpawnLayer(layers[i])
|
|
end
|
|
end
|
|
|
|
function UIManagerProxy:InitRollBack()
|
|
self.rollBackMap = {}
|
|
local panelData
|
|
local viewClass
|
|
for i=1,#UIRollBackID do
|
|
panelData = PanelProxy.Instance:GetData(UIRollBackID[i])
|
|
if(panelData) then
|
|
viewClass = self:GetImport(panelData.class)
|
|
if(viewClass) then
|
|
self.rollBackMap[viewClass] = 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function UIManagerProxy:SpawnLayer(data)
|
|
local layer = UILayer.new(data,self.UIRoot)
|
|
layer:AddEventListener(UILayer.AddChildEvent,self.LayerAddChildHandler,self)
|
|
layer:AddEventListener(UILayer.EmptyChildEvent,self.LayerEmptyHandler,self)
|
|
return layer
|
|
end
|
|
|
|
function UIManagerProxy:ShowUI(data,prefab,class)
|
|
local viewid = data.view and data.view.id;
|
|
local forbid_msg = viewid and self.forbidview_map[viewid]
|
|
if(forbid_msg)then
|
|
if(forbid_msg ~= -1)then
|
|
MsgManager.ShowMsgByIDTable(forbid_msg);
|
|
end
|
|
return;
|
|
end
|
|
|
|
local viewClass = self:GetImport(class or data.viewname)
|
|
if(viewClass) then
|
|
local viewType = viewClass.ViewType
|
|
local layer = self:GetLayerByType(viewType)
|
|
if(layer) then
|
|
return layer:CreateChild(data,prefab,class,self.rollBackMap[viewClass]~=nil)
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
function UIManagerProxy:ShowUIByConfig(data)
|
|
return self:ShowUI(data,data.view.prefab,data.view.class)
|
|
end
|
|
|
|
function UIManagerProxy:CloseUI(viewCtrl)
|
|
if(viewCtrl) then
|
|
local viewType = viewCtrl.ViewType
|
|
local layer = self:GetLayerByType(viewType)
|
|
if(layer) then
|
|
layer:DestoryChildByCtrl(viewCtrl)
|
|
layer:TryRollBackPrevious()
|
|
end
|
|
end
|
|
end
|
|
|
|
function UIManagerProxy:CloseLayerAllChildren(viewType)
|
|
if(viewType) then
|
|
local layer = self:GetLayerByType(viewType)
|
|
if(layer) then
|
|
layer:DestoryAllChildren()
|
|
layer:TryRollBackPrevious()
|
|
end
|
|
end
|
|
end
|
|
|
|
function UIManagerProxy:LayerAddChildHandler(evt)
|
|
self:AddHideOtherLayers(evt.target)
|
|
self:CloseOtherLayers(evt.target)
|
|
end
|
|
|
|
function UIManagerProxy:LayerEmptyHandler(evt)
|
|
self:RemoveHideOtherLayers(evt.target)
|
|
end
|
|
|
|
function UIManagerProxy:CloseOtherLayers(layer)
|
|
local closeOthers = layer.data.closeOtherLayer
|
|
if(closeOthers) then
|
|
for k,v in pairs(closeOthers) do
|
|
self:CloseLayerAllChildren(UIViewType[k])
|
|
end
|
|
end
|
|
end
|
|
|
|
function UIManagerProxy:AddHideOtherLayers( layer )
|
|
if(layer.data.hideOtherLayer) then
|
|
local hideOther = layer.data.hideOtherLayer
|
|
local otherLayer
|
|
local name
|
|
for k,v in pairs(hideOther) do
|
|
name = UIViewType[k].name
|
|
otherLayer = self.layers[name]
|
|
otherLayer:AddHideMasterLayer(layer)
|
|
end
|
|
end
|
|
end
|
|
|
|
function UIManagerProxy:RemoveHideOtherLayers( layer )
|
|
if(layer.data.hideOtherLayer) then
|
|
local hideOther = layer.data.hideOtherLayer
|
|
local otherLayer
|
|
local name
|
|
for k,v in pairs(hideOther) do
|
|
name = UIViewType[k].name
|
|
otherLayer = self.layers[name]
|
|
otherLayer:RemoveHideMasterLayer(layer)
|
|
end
|
|
end
|
|
end
|
|
|
|
function UIManagerProxy:GetLayerByType(viewType)
|
|
return self.layers[viewType.name]
|
|
end
|
|
|
|
function UIManagerProxy:HasUINode(panelConfig)
|
|
local class = self:GetImport(panelConfig.class)
|
|
if(class ~=nil and class.ViewType~=nil) then
|
|
local layer = self:GetLayerByType(class.ViewType)
|
|
if(layer) then
|
|
return layer:FindNodeByClassName(panelConfig.class)~=nil
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function UIManagerProxy:GetImport(viewname)
|
|
local viewCtrl= _G[viewname]
|
|
if(not viewCtrl) then
|
|
-- viewCtrl = require (FilePath.ui.."view."..viewname)
|
|
viewCtrl = autoImport(viewname)
|
|
if(type(viewCtrl)~="table") then
|
|
viewCtrl= _G[viewname]
|
|
end
|
|
end
|
|
return viewCtrl
|
|
end
|
|
|
|
function UIManagerProxy:InitViewPop()
|
|
self.modalLayer = {
|
|
UIViewType.ChatroomLayer,
|
|
UIViewType.ChitchatLayer,
|
|
UIViewType.TeamLayer,
|
|
UIViewType.ChatLayer,
|
|
UIViewType.FocusLayer,
|
|
UIViewType.NormalLayer,
|
|
UIViewType.PopUpLayer,
|
|
UIViewType.ConfirmLayer,
|
|
UIViewType.SystemOpenLayer,
|
|
UIViewType.Show3D2DLayer,
|
|
UIViewType.ShareLayer,
|
|
UIViewType.Popup10Layer,
|
|
UIViewType.TipLayer,
|
|
}
|
|
for i=#self.modalLayer,1,-1 do
|
|
if(self.modalLayer[i]==nil) then
|
|
table.remove(self.modalLayer,i)
|
|
end
|
|
end
|
|
table.sort(self.modalLayer ,function ( l,r )
|
|
return l.depth < r.depth
|
|
end)
|
|
end
|
|
|
|
function UIManagerProxy:GetModalPopCount()
|
|
local count = 0
|
|
local layer
|
|
for i=1,#self.modalLayer do
|
|
layer = self.layers[self.modalLayer[i].name]
|
|
if(UIViewType.TipLayer.name == layer.name and UIViewType.TipLayer.depth == layer.depth) then
|
|
if(TipsView:Me().currentTip~=nil) then
|
|
count = count + 1
|
|
end
|
|
else
|
|
count = count + #layer.nodes
|
|
end
|
|
end
|
|
helplog("目前還有",count)
|
|
return count
|
|
end
|
|
|
|
function UIManagerProxy:PopView()
|
|
helplog("pop 一個界面")
|
|
local layer
|
|
for i=#self.modalLayer,1,-1 do
|
|
layer = self.layers[self.modalLayer[i].name]
|
|
if(UIViewType.TipLayer.name == layer.name and UIViewType.TipLayer.depth == layer.depth) then
|
|
if(TipsView:Me().currentTip~=nil) then
|
|
helplog(layer.name,layer.nodes[#layer.nodes].viewname)
|
|
TipsView.Me():HideCurrent()
|
|
break
|
|
end
|
|
else
|
|
if(#layer.nodes>0) then
|
|
helplog(layer.name,layer.nodes[#layer.nodes].viewname)
|
|
layer:DestoryChild(layer.nodes[#layer.nodes])
|
|
layer:TryRollBackPrevious()
|
|
break
|
|
end
|
|
end
|
|
end
|
|
return self:GetModalPopCount()
|
|
end
|
|
|
|
function UIManagerProxy:SetForbidView(viewid, forbidMsgid, forceClose)
|
|
self.forbidview_map[viewid] = forbidMsgid or -1;
|
|
|
|
if(forceClose)then
|
|
local viewdata = PanelProxy.Instance:GetData(viewid);
|
|
if(viewdata)then
|
|
self:CloseLayerAllChildren(self:GetImport(viewdata.class).ViewType);
|
|
end
|
|
end
|
|
end
|
|
|
|
function UIManagerProxy:UnSetForbidView(viewid)
|
|
self.forbidview_map[viewid] = nil;
|
|
end |