100 lines
2.7 KiB
Lua
100 lines
2.7 KiB
Lua
------------------------------------------------
|
|
-- 作者: 王圣
|
|
-- 日期: 2021-06-11
|
|
-- 文件: UISceneManager.lua
|
|
-- 模块: UISceneManager
|
|
-- 描述: ui场景管理
|
|
------------------------------------------------
|
|
-- 引用
|
|
local L_FashionScene = require "Logic.UIScene.Instance.FashionScene"
|
|
local L_SwordGraveScene = require "Logic.UIScene.Instance.SwordGraveScene"
|
|
|
|
local UISceneManager = {
|
|
IsInit = false,
|
|
SceneRoot = nil,
|
|
--ui场景管理列表
|
|
SceneList = List:New(),
|
|
}
|
|
|
|
function UISceneManager:GetInstance()
|
|
if not self.IsInit then
|
|
local _root = GameCenter.UIFormManager:GetShadowRoot()
|
|
if _root ~= nil then
|
|
self.SceneRoot = UIUtils.FindTrans(_root, "Scene")
|
|
end
|
|
self.IsInit = true
|
|
end
|
|
return self
|
|
end
|
|
|
|
function UISceneManager:CreateUIScene(type, modelId, userData)
|
|
local scene = nil
|
|
if type == UISceneDefine.FasionScene then
|
|
scene = L_FashionScene:New(UISceneDefine.FasionScene, modelId, self)
|
|
elseif type == UISceneDefine.SwordGraveScene then
|
|
scene = L_SwordGraveScene:New(UISceneDefine.SwordGraveScene, modelId, self)
|
|
elseif type == UISceneDefine.SwordActive then
|
|
end
|
|
if scene ~= nil then
|
|
self:AddScene(scene)
|
|
end
|
|
return scene
|
|
end
|
|
|
|
--添加场景 后添加的设置top = true 其他老的scene top = false
|
|
function UISceneManager:AddScene(scene)
|
|
scene.IsTop = true;
|
|
scene.SceneIndex = #self.SceneList
|
|
for i = 1, #self.SceneList do
|
|
self.SceneList[i].IsTop = false
|
|
end
|
|
self.SceneList:Add(scene)
|
|
end
|
|
|
|
--移除场景
|
|
function UISceneManager:RemoveScene(type)
|
|
local index = -1
|
|
local isSetOtherTop = false
|
|
for i = #self.SceneList, 1, -1 do
|
|
local scene = self.SceneList[i]
|
|
if scene.SceneType == type then
|
|
isSetOtherTop = scene.IsTop
|
|
if isSetOtherTop then
|
|
index = scene.SceneIndex
|
|
scene:Destory()
|
|
end
|
|
self.SceneList:RemoveAt(i)
|
|
end
|
|
if isSetOtherTop and scene.SceneIndex < index then
|
|
scene.IsTop = true;
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
--移除场景
|
|
function UISceneManager:RemoveScene(scene)
|
|
if scene == nil then
|
|
return
|
|
end
|
|
local isSetOtherTop = scene.IsTop
|
|
for i = #self.SceneList, 1, -1 do
|
|
if isSetOtherTop and self.SceneList[i].SceneIndex < scene.SceneIndex then
|
|
scene.IsTop = true
|
|
break
|
|
end
|
|
end
|
|
scene:Destory()
|
|
self.SceneList:Remove(scene)
|
|
end
|
|
|
|
function UISceneManager:Update(dt)
|
|
for i = 1, #self.SceneList do
|
|
if self.SceneList[i] ~= nil and self.SceneList[i].IsTop then
|
|
self.SceneList[i]:Update(dt)
|
|
end
|
|
end
|
|
end
|
|
|
|
return UISceneManager
|