--lua端的窗口管理器
|
|
LuaViewManager = LuaViewManager or BaseClass(EventDispatcher)
|
|
local LuaViewManager = LuaViewManager
|
|
local rawget = rawget
|
|
local SetGameFrameRate = SetGameFrameRate
|
|
local Time = Time
|
|
local IsTableEmpty = IsTableEmpty
|
|
local math_ceil = math.ceil
|
|
LuaViewManager.CHANGE_MAIN_CANVAS_VISIBLE = "LuaViewManager.CHANGE_MAIN_CANVAS_VISIBLE"
|
|
LuaViewManager.SHORT_CHANGE_MAIN_CANVAS_VISIBLE = "LuaViewManager.SHORT_CHANGE_MAIN_CANVAS_VISIBLE"
|
|
LuaViewManager.HIDE_ITEM_USE_VIEW = "LuaViewManager.HIDE_ITEM_USE_VIEW"
|
|
LuaViewManager.PUSH_VIEWS_OUT_SCREEN = "LuaViewManager.PUSH_VIEWS_OUT_SCREEN"
|
|
|
|
LuaViewManager.BOCAST_MAIN_CANVAS_LAST_STATE = "LuaViewManager.BOCAST_MAIN_CANVAS_LAST_STATE"
|
|
|
|
|
|
function LuaViewManager:__init()
|
|
LuaViewManager.Instance = self
|
|
self.maskIdPool = {
|
|
maxID = 1,
|
|
list = {},
|
|
Pop = function(self)
|
|
local length = #self.list
|
|
if length > 0 then
|
|
local result = self.list[length]
|
|
table.remove(self.list, length)
|
|
return result
|
|
else
|
|
if self.maxID == 255 then
|
|
logWarn("MaskID分配已到达上限!!")
|
|
return nil
|
|
else
|
|
self.maxID = self.maxID + 2
|
|
return self.maxID - 2
|
|
end
|
|
end
|
|
end,
|
|
Push = function(self, mid)
|
|
table.insert(self.list, mid)
|
|
end,
|
|
}
|
|
|
|
self.view_ctl_queue = {}
|
|
self.view_id = 0
|
|
self.view_activity_ctl_queue = {}--活动层级界面堆栈
|
|
self.act_view_id = 0
|
|
|
|
self.all_view_queue = {} --所有界面
|
|
|
|
self.main_canvas_visible_timer = false --主界面画布,延时显示处理
|
|
|
|
self.update_main_canvas_time = 0
|
|
|
|
--资源预加载,场景切完之后
|
|
local function scene_load_view_complete()
|
|
-- if not self.has_load_res then
|
|
-- self.has_load_res = true
|
|
self.pre_load_res_list = {
|
|
{name = "mrsd_xuanzhong_001", is_static = true},
|
|
{name = "mrsd_skills_skybox01", is_static = true},
|
|
{name = "effect_beibao_1_1", is_static = true},
|
|
{name = "effect_beibao_1_2", is_static = true},
|
|
{name = "effect_beibao_1_3", is_static = true},
|
|
{name = "effect_beibao_2_1", is_static = true},
|
|
{name = "effect_beibao_3_1", is_static = true},
|
|
{name = "effect_beibao_3_2", is_static = true},
|
|
{name = "ui_kaizhan", is_static = true},
|
|
{name = "effect_monster_born", is_static = false},
|
|
{name = "effect_transmit_flydown2", is_static = false},
|
|
{name = "effect_transmit_flydown3", is_static = false},
|
|
}
|
|
|
|
|
|
local role_level = RoleManager.Instance.mainRoleInfo.level
|
|
local scene_id = SceneManager:getInstance():GetSceneId()
|
|
if role_level <= 80 then
|
|
self.story_res_list = self.story_res_list or {
|
|
[1001] = {
|
|
max_level = 20,
|
|
res_list = {
|
|
{name = "model_clothe_20010004", is_static = false},
|
|
{name = "model_clothe_20030007", is_static = false},
|
|
},
|
|
},
|
|
[1002] = {
|
|
max_level = 30,
|
|
res_list = {
|
|
{name = "model_clothe_20010002", is_static = false},
|
|
},
|
|
},
|
|
[1004] = {
|
|
max_level = 80,
|
|
res_list = {
|
|
{name = "model_clothe_20040004", is_static = false},
|
|
},
|
|
},
|
|
}
|
|
|
|
local scene_cfg = self.story_res_list[scene_id]
|
|
if scene_cfg and role_level <= scene_cfg.max_level then
|
|
for k,v in pairs(scene_cfg.res_list) do
|
|
self.pre_load_res_list[#self.pre_load_res_list+1] = v
|
|
end
|
|
end
|
|
end
|
|
|
|
self.index = self.index or 1
|
|
local function on_step( )
|
|
local res = self.pre_load_res_list[self.index]
|
|
if self.index > #self.pre_load_res_list or not res then
|
|
self.index = 1
|
|
if self.pre_load_res_timer then
|
|
GlobalTimerQuest:CancelQuest(self.pre_load_res_timer)
|
|
self.pre_load_res_timer = nil
|
|
end
|
|
return
|
|
end
|
|
if res.is_static and lua_resM.static_obj_name_list[res.name] then
|
|
--已存在的静态资源就不要重复加载了
|
|
else
|
|
local function load_call_back( objs, is_gameObject )
|
|
if objs and objs[0] then
|
|
local effect_go = is_gameObject and objs[0] or newObject(objs[0])
|
|
lua_resM:AddObjToPool(self, res.name, res.name, effect_go)
|
|
end
|
|
end
|
|
if res.is_static then
|
|
lua_resM:AppendStaticObjName(res.name)
|
|
end
|
|
lua_resM:loadPrefab(self, res.name, res.name, load_call_back, true)
|
|
end
|
|
|
|
self.index = self.index + 1
|
|
end
|
|
if not self.pre_load_res_timer then
|
|
self.pre_load_res_timer = GlobalTimerQuest:AddPeriodQuest(on_step, 0.1)
|
|
end
|
|
-- end
|
|
end
|
|
GlobalEventSystem:Bind(EventName.SCENE_LOAD_VIEW_COMPLETE, scene_load_view_complete)
|
|
|
|
local function onInitMainCanvasData()
|
|
if IsNull(self.main_cancas_con) then
|
|
self.scene_obj_container = panelMgr:GetParent("SceneObjContainer")
|
|
self.scene_nameboard_obj = panelMgr:GetParent("NameBoard").gameObject
|
|
|
|
self.main_cancas = panelMgr:GetParent("Main")
|
|
self.main_cancas_con = UiFactory.createChild(self.main_cancas, UIType.EmptyObject, "main_cancas_con").transform
|
|
self.main_cancas_con_go = self.main_cancas_con.gameObject
|
|
self.main_cancas_con.localPosition = Vector3.zero
|
|
self.main_cancas_con.sizeDelta = Vector2(ScreenWidth, ScreenHeight)
|
|
self.main_cancas_con.gameObject:SetActive(false)
|
|
self.main_canvas_hideView_list = {}
|
|
setmetatable(self.main_canvas_hideView_list, {__mode = "k"}) --弱引用
|
|
self.main_cancas_last_visible = true
|
|
end
|
|
end
|
|
GlobalEventSystem:Bind(EventName.GAME_UI_LOAD_COMPLETED, onInitMainCanvasData)
|
|
|
|
|
|
self.update_visible = false
|
|
local function onUpdateMainCanvasVisible(view, visible)
|
|
if self.main_cancas_con == nil then return end
|
|
if visible then --主界面是否需要显示
|
|
if view then
|
|
self.main_canvas_hideView_list[view] = nil
|
|
end
|
|
self.update_main_canvas_time = Time.time + 0.045
|
|
else
|
|
self.main_canvas_hideView_list[view] = true
|
|
self.update_main_canvas_time = Time.time + 0.03
|
|
end
|
|
self.update_visible = true
|
|
|
|
--DEFAULT场景对象层,
|
|
if view and view.hide_maincancas then
|
|
MainCamera:getInstance():SetMainCameraCullingMask(UIPartical.RenderingOther_List.DEFAULT, visible)
|
|
if self.scene_nameboard_obj then
|
|
self.scene_nameboard_obj:SetActive(visible)
|
|
end
|
|
--显示天空盒时候,不要操作地表
|
|
if view.model_activity_bg or view.need_culling_mask_ground then
|
|
if Scene.getInstance().is_showing_sky_box then
|
|
MainCamera:getInstance():SetMainCameraCullingMask(UIPartical.RenderingOther_List.Ground, true)
|
|
else
|
|
MainCamera:getInstance():SetMainCameraCullingMask(UIPartical.RenderingOther_List.Ground, visible)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
self:Bind(LuaViewManager.CHANGE_MAIN_CANVAS_VISIBLE, onUpdateMainCanvasVisible)
|
|
|
|
local function onHideItemUseView(bool)
|
|
if bool then
|
|
ItemUseModel:getInstance():HideItemUseView()
|
|
else
|
|
ItemUseModel:getInstance():ShowItemUseView()
|
|
end
|
|
end
|
|
self:Bind(LuaViewManager.HIDE_ITEM_USE_VIEW, onHideItemUseView)
|
|
|
|
self.is_lock_screen = false
|
|
local function onScreenBrightDelHandler()
|
|
self.is_lock_screen = true
|
|
self:ChangeLockScreenState()
|
|
-- onUpdateMainCanvasVisible("ScreenBright", false)
|
|
--SetGameFrameRate(30)
|
|
end
|
|
GlobalEventSystem:Bind(SceneEventType.SCREEN_BRIGHT_DEL_EVENT, onScreenBrightDelHandler)
|
|
|
|
local function onScreenBrightAddHandler()
|
|
self.is_lock_screen = false
|
|
self:ChangeLockScreenState()
|
|
--SetGameFrameRate()
|
|
-- onUpdateMainCanvasVisible("ScreenBright", true)
|
|
end
|
|
GlobalEventSystem:Bind(SceneEventType.SCREEN_BRIGHT_ADD_EVENT, onScreenBrightAddHandler)
|
|
|
|
|
|
local function onViewDoAnimHandler(show, target_view)
|
|
self:DoMoveUIRootAnim(show, target_view)
|
|
end
|
|
GlobalEventSystem:Bind(EventName.BASEVIEW_DO_VIEW_ANIM, onViewDoAnimHandler)
|
|
|
|
self.show_loading_view_list = {} --显示loading的界面列表
|
|
self.show_loading_step = 0
|
|
|
|
self.delay_ui_list = Array.New() --延迟加载ui队列
|
|
Runner.Instance:AddRunObj(self, 1)
|
|
end
|
|
|
|
function LuaViewManager:ClearTimer()
|
|
if self.hide_hook_role_timer_id then
|
|
GlobalTimerQuest:CancelQuest(self.hide_hook_role_timer_id)
|
|
self.hide_hook_role_timer_id = nil
|
|
end
|
|
|
|
if self.show_hook_role_timer_id then
|
|
GlobalTimerQuest:CancelQuest(self.show_hook_role_timer_id)
|
|
self.show_hook_role_timer_id = nil
|
|
end
|
|
end
|
|
|
|
function LuaViewManager:ChangeLockScreenState()
|
|
if Scene then
|
|
local main_role = Scene:getInstance():GetMainRole()
|
|
if self.is_lock_screen then
|
|
if main_role then
|
|
if main_role.sprite and not main_role.sprite:HasModelHideFlag(SceneObj.ModelHideFlag.IndependentHide2) then
|
|
main_role.sprite:SetModelHideFlag(SceneObj.ModelHideFlag.IndependentHide2, true)
|
|
end
|
|
if main_role.pet and not main_role.pet:HasModelHideFlag(SceneObj.ModelHideFlag.IndependentHide2) then
|
|
main_role.pet:SetModelHideFlag(SceneObj.ModelHideFlag.IndependentHide2, true)
|
|
end
|
|
if main_role.baby and not main_role.baby:HasModelHideFlag(SceneObj.ModelHideFlag.IndependentHide2) then
|
|
main_role.baby:SetModelHideFlag(SceneObj.ModelHideFlag.IndependentHide2, true)
|
|
end
|
|
if main_role.pokemon and not main_role.pokemon:HasModelHideFlag(SceneObj.ModelHideFlag.IndependentHide2) then
|
|
main_role.pokemon:SetModelHideFlag(SceneObj.ModelHideFlag.IndependentHide2, true)
|
|
end
|
|
|
|
local partner_list = Scene.Instance.partner_list
|
|
for _,partner in pairs(partner_list) do
|
|
partner:SetModelHideFlag(SceneObj.ModelHideFlag.IndependentHide2, true)
|
|
end
|
|
|
|
main_role:RemoveLivenessImage()
|
|
end
|
|
MainCamera.Instance:SetScreenEffectCamereState(false)
|
|
GlobalEventSystem:Fire(SceneEventType.HIDE_ALL_MONSTER)
|
|
local hook_role_list = Scene.Instance.hook_role_list
|
|
if TableSize(hook_role_list) > 0 then
|
|
local list = {}
|
|
for _,hook_role in pairs(hook_role_list) do
|
|
table.insert(list,hook_role)
|
|
end
|
|
|
|
if self.hide_hook_role_timer_id then
|
|
GlobalTimerQuest:CancelQuest(self.hide_hook_role_timer_id)
|
|
self.hide_hook_role_timer_id = nil
|
|
end
|
|
|
|
local index = 0
|
|
local max_index = #list
|
|
local function onTimer()
|
|
index = index + 1
|
|
local hook_role = list[index]
|
|
if hook_role then
|
|
hook_role:SetModelHideFlag(SceneObj.ModelHideFlag.IndependentHide2, true)
|
|
hook_role:DoStand()
|
|
end
|
|
|
|
if index >= max_index then
|
|
if self.hide_hook_role_timer_id then
|
|
GlobalTimerQuest:CancelQuest(self.hide_hook_role_timer_id)
|
|
self.hide_hook_role_timer_id = nil
|
|
end
|
|
end
|
|
end
|
|
self.hide_hook_role_timer_id = GlobalTimerQuest:AddPeriodQuest(onTimer,0.1)
|
|
end
|
|
else
|
|
if main_role then
|
|
if main_role.sprite and main_role.sprite:HasModelHideFlag(SceneObj.ModelHideFlag.IndependentHide2) then
|
|
main_role.sprite:SetModelHideFlag(SceneObj.ModelHideFlag.IndependentHide2, false)
|
|
end
|
|
if main_role.pet and main_role.pet:HasModelHideFlag(SceneObj.ModelHideFlag.IndependentHide2) then
|
|
main_role.pet:SetModelHideFlag(SceneObj.ModelHideFlag.IndependentHide2, false)
|
|
end
|
|
if main_role.baby and main_role.baby:HasModelHideFlag(SceneObj.ModelHideFlag.IndependentHide2) then
|
|
main_role.baby:SetModelHideFlag(SceneObj.ModelHideFlag.IndependentHide2, false)
|
|
end
|
|
if main_role.pokemon and main_role.pokemon:HasModelHideFlag(SceneObj.ModelHideFlag.IndependentHide2) then
|
|
main_role.pokemon:SetModelHideFlag(SceneObj.ModelHideFlag.IndependentHide2, false)
|
|
end
|
|
|
|
local partner_list = Scene.Instance.partner_list
|
|
for _,partner in pairs(partner_list) do
|
|
partner:SetModelHideFlag(SceneObj.ModelHideFlag.IndependentHide2, false)
|
|
end
|
|
|
|
|
|
main_role:ShowLivenessImage()
|
|
end
|
|
MainCamera.Instance:SetScreenEffectCamereState(true)
|
|
GlobalEventSystem:Fire(SceneEventType.SHOW_ALL_MONSTER)
|
|
local monster_list = Scene.Instance.monster_list
|
|
for id, mon in pairs(monster_list) do
|
|
if mon:IsInState(PoseState.MOVE) then
|
|
mon:UpdateMoveEndPos()
|
|
else
|
|
mon:DoStand()
|
|
end
|
|
end
|
|
|
|
local hook_role_list = Scene.Instance.hook_role_list
|
|
if TableSize(hook_role_list) > 0 then
|
|
local list = {}
|
|
for _,hook_role in pairs(hook_role_list) do
|
|
table.insert(list,hook_role)
|
|
end
|
|
|
|
if self.show_hook_role_timer_id then
|
|
GlobalTimerQuest:CancelQuest(self.show_hook_role_timer_id)
|
|
self.show_hook_role_timer_id = nil
|
|
end
|
|
|
|
local index = 0
|
|
local max_index = #list
|
|
local function onTimer()
|
|
index = index + 1
|
|
local hook_role = list[index]
|
|
if hook_role then
|
|
hook_role:SetModelHideFlag(SceneObj.ModelHideFlag.IndependentHide2, false)
|
|
end
|
|
if index >= max_index then
|
|
if self.show_hook_role_timer_id then
|
|
GlobalTimerQuest:CancelQuest(self.show_hook_role_timer_id)
|
|
self.show_hook_role_timer_id = nil
|
|
end
|
|
end
|
|
end
|
|
self.show_hook_role_timer_id = GlobalTimerQuest:AddPeriodQuest(onTimer,0.1)
|
|
end
|
|
end
|
|
GlobalEventSystem:Fire(SceneEventType.UPDATE_ROLE_LIMIT)
|
|
end
|
|
end
|
|
|
|
--移出屏幕外,还是会渲染
|
|
function LuaViewManager:PushViewsOutScreen()
|
|
--为了解决聊天框表情错乱问题。是由于重设了父对象,没更新网格
|
|
ChatModel:getInstance():Fire(ChatModel.HIDE_MIAN_UI_CHAT_VIEW,false)
|
|
SetLocalPositionY(self.main_cancas_con, 99999)
|
|
end
|
|
|
|
function LuaViewManager:PopViewsInScreen()
|
|
SetLocalPositionY(self.main_cancas_con, 0)
|
|
end
|
|
|
|
LuaViewManager.MAINCANVAS_OUT_ANI_TOGGLE = true
|
|
|
|
function LuaViewManager:ChangeMainCanvasVisible(flag)
|
|
-- if not IsNull(self.main_cancas_con_go) then
|
|
-- self.main_cancas_con_go:SetActive(flag)
|
|
-- end
|
|
if flag then
|
|
local len = self.main_cancas_con.childCount - 1
|
|
local list = {}
|
|
for i = 0, len do
|
|
table.insert(list, self.main_cancas_con:GetChild(i))
|
|
end
|
|
for i, child in ipairs(list) do
|
|
child:SetParent(self.main_cancas)
|
|
end
|
|
else
|
|
local len = self.main_cancas.childCount - 1
|
|
local list = {}
|
|
for i = 0, len do
|
|
if self.main_cancas:GetChild(i) == self.main_cancas_con then
|
|
-- Message.show("==============")
|
|
else
|
|
table.insert(list, self.main_cancas:GetChild(i))
|
|
end
|
|
end
|
|
for i, child in ipairs(list) do
|
|
child:SetParent(self.main_cancas_con)
|
|
end
|
|
end
|
|
end
|
|
|
|
function LuaViewManager:BocastChangeVisibleEvent( )
|
|
self:Fire(LuaViewManager.BOCAST_MAIN_CANVAS_LAST_STATE,self.main_cancas_last_visible)
|
|
if self.main_cancas_last_visible then
|
|
if SystemMemoryLevel.Cur == SystemMemoryLevel.Hight then
|
|
GlobalEventSystem:Fire(EventName.PLAY_MAINUI_MOVIE_CENTER_EVENT)
|
|
end
|
|
else
|
|
if SystemMemoryLevel.Cur == SystemMemoryLevel.Hight and LuaViewManager.MAINCANVAS_OUT_ANI_TOGGLE then
|
|
GlobalEventSystem:Fire(EventName.PLAY_MAINUI_MOVIE_CENTER_EVENT, true)
|
|
end
|
|
end
|
|
end
|
|
|
|
function LuaViewManager:ChangeSceneObjContainerVisible( flag )
|
|
--DEFAULT是场景对象所在的层级
|
|
-- MainCamera:getInstance():SetMainCameraCullingMask(UIPartical.RenderingOther_List.DEFAULT, flag)
|
|
MainCamera:getInstance():SetPostEffectEnable(flag)
|
|
if flag then
|
|
local is_empty = IsTableEmpty(self.back_ui_target_table)
|
|
if is_empty then
|
|
self:SetUICameraEnable(not flag) --这里只负责统一关闭,开启的话由各个界面加载模型的时候去控制
|
|
end
|
|
end
|
|
end
|
|
|
|
--放入main层的隐藏父类里
|
|
function LuaViewManager:PuskMainCanvasCon(transform)
|
|
if transform and self.main_cancas_con then
|
|
transform:SetParent(self.main_cancas_con)
|
|
end
|
|
end
|
|
|
|
function LuaViewManager:GetFrameUpdateCount()
|
|
if self.main_cancas_last_visible then
|
|
return 1
|
|
else
|
|
return 3
|
|
end
|
|
end
|
|
|
|
function LuaViewManager:getInstance()
|
|
if LuaViewManager.Instance == nil then
|
|
LuaViewManager.Instance = LuaViewManager.New()
|
|
end
|
|
return LuaViewManager.Instance
|
|
end
|
|
|
|
--添加进入延迟队列
|
|
function LuaViewManager:AddDelayQueue(call_back)
|
|
self.delay_ui_list:PushBack(call_back)
|
|
return call_back
|
|
end
|
|
|
|
--移除
|
|
function LuaViewManager:RemoveDelayQueue(call_back)
|
|
local index = self.delay_ui_list:IndexOf(call_back)
|
|
if index and index > 0 then
|
|
self.delay_ui_list:Erase(index - 1)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
function LuaViewManager:NoDependHideView()
|
|
for k,v in pairs(self.main_canvas_hideView_list) do
|
|
print("main_canvas_hideView_list k", k)
|
|
end
|
|
print("tanar: [LuaViewManager 425]=> IsTableEmpty(self.main_canvas_hideView_list): ",IsTableEmpty(self.main_canvas_hideView_list))
|
|
if IsTableEmpty(self.main_canvas_hideView_list) then
|
|
return true
|
|
end
|
|
end
|
|
|
|
function LuaViewManager:Update(now_time, elapse_time)
|
|
if self.update_visible and now_time - self.update_main_canvas_time > 0 then
|
|
self.update_visible = false
|
|
if self:NoDependHideView() then
|
|
if not self.main_cancas_last_visible then
|
|
self.main_cancas_last_visible = true
|
|
|
|
self:ChangeMainCanvasVisible(true)
|
|
self:BocastChangeVisibleEvent()
|
|
self:ChangeSceneObjContainerVisible(true)
|
|
--主聊天界面单独处理 先显示后隐藏,不然有bug
|
|
GlobalEventSystem:Fire(EventName.HIDE_MAIN_CHAT_VIEW, true, MainUIModel and MainUIModel.OTHER_MODE2)
|
|
GlobalEventSystem:Fire(EventName.HIDE_MAIN_CHAT_VIEW, false, MainUIModel and MainUIModel.OTHER_MODE2)
|
|
|
|
-- if not self.is_lock_screen then
|
|
-- SetGameFrameRate()
|
|
-- end
|
|
end
|
|
else
|
|
if self.main_cancas_last_visible then
|
|
self.main_cancas_last_visible = false
|
|
|
|
self:ChangeMainCanvasVisible(false)
|
|
self:BocastChangeVisibleEvent()
|
|
self:ChangeSceneObjContainerVisible(false)
|
|
|
|
if not self.is_lock_screen then
|
|
SetGameFrameRate()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local size = self.delay_ui_list:GetSize()
|
|
if size > 0 then
|
|
local call_back
|
|
if size <= 10 then
|
|
call_back = self.delay_ui_list:PopFront()
|
|
if call_back then
|
|
call_back()
|
|
end
|
|
else
|
|
size = math_ceil(size * 0.1)
|
|
for i = 1, size do
|
|
local call_back = self.delay_ui_list:PopFront()
|
|
if call_back then
|
|
call_back()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- if self.show_loading_step % 13 == 0 then
|
|
-- self:CheckLoadingState(now_time)
|
|
-- end
|
|
-- self.show_loading_step = self.show_loading_step + 1
|
|
end
|
|
|
|
--检测loading状态
|
|
function LuaViewManager:CheckLoadingState(now_time)
|
|
local delete_list = nil
|
|
local show_loading = false
|
|
now_time = now_time or Status.NowTime
|
|
for id, info in pairs(self.show_loading_view_list) do
|
|
if now_time >= info.hide_time then
|
|
delete_list = delete_list or {}
|
|
table.insert(delete_list, id)
|
|
elseif not show_loading and now_time >= info.start_show_time and now_time <= info.hide_time then
|
|
show_loading = true
|
|
end
|
|
end
|
|
|
|
if delete_list then
|
|
for i, id in ipairs(delete_list) do
|
|
self.show_loading_view_list[id] = nil
|
|
end
|
|
end
|
|
if show_loading then
|
|
self:ShowLoading()
|
|
else
|
|
self:CloseLoading()
|
|
end
|
|
end
|
|
--显示loading
|
|
function LuaViewManager:ShowLoading()
|
|
if not self.loadingView then
|
|
self.loadingView = LoadingView.New()
|
|
end
|
|
if not self.loadingView:HasOpen() then
|
|
self.loadingView:Open()
|
|
end
|
|
end
|
|
|
|
--隐藏loading
|
|
function LuaViewManager:CloseLoading()
|
|
if self.loadingView and self.loadingView:HasOpen() == true then
|
|
self.loadingView:Close()
|
|
end
|
|
end
|
|
|
|
--添加需要显示loading进度的界面对象
|
|
function LuaViewManager:AddLoadingView(id)
|
|
local info = {start_show_time = Status.NowTime + 0.6, hide_time = Status.NowTime + 8}
|
|
self.show_loading_view_list[id] = info
|
|
end
|
|
|
|
--移除loading界面对象
|
|
function LuaViewManager:RemoveLoadingView(id)
|
|
self.show_loading_view_list[id] = nil
|
|
self:CheckLoadingState()
|
|
end
|
|
|
|
function LuaViewManager:LoadView(ref_tar,abName,pfName,layerName,callBack)
|
|
lua_resM:addRefCount(ref_tar,abName)
|
|
-- use_local_view UI本地加载,true的话直接加载Hierarchy上的挂着的预设
|
|
if ref_tar.use_local_view and (IsNull(ApplicationPlatform) or SystemRuntimePlatform.IsWindowsEditor()) then
|
|
local root_path = "root/Canvas/"
|
|
if layerName == "Main" then
|
|
root_path = "root/BackCanvas/"
|
|
end
|
|
local view_path = root_path .. layerName .. "/" .. pfName
|
|
local go = GameObject.Find(view_path)
|
|
if go then
|
|
go.layer = LayerMask.NameToLayer("UI")
|
|
go.transform.localScale = Vector3.one
|
|
go.transform.localPosition = Vector3.zero
|
|
go.gameObject:SetActive(true)
|
|
|
|
callBack(go)
|
|
else
|
|
Message.show("找不到本地界面:" .. view_path)
|
|
ref_tar.use_local_view = false
|
|
panelMgr:CreateView(abName,pfName,layerName,callBack)
|
|
end
|
|
else
|
|
ref_tar.use_local_view = false
|
|
panelMgr:CreateView(abName,pfName,layerName,callBack)
|
|
end
|
|
end
|
|
|
|
function LuaViewManager:OpenView(ref_tar)
|
|
self.cur_layout = ref_tar.layout_file --用于引导
|
|
self.cur_use_background = ref_tar.use_background
|
|
self.cur_layer_name = ref_tar.layer_name
|
|
|
|
self.all_view_queue[ref_tar] = true
|
|
|
|
--引导界面打开关闭,不加入队列
|
|
if self.cur_layout == "GuidePromptView" then return end
|
|
|
|
--1级界面,自动加入到管理队列里面
|
|
if (ref_tar.append_to_ctl_queue or ref_tar.layer_name == "UI") and self.view_ctl_queue[ref_tar] == nil then
|
|
for view, _ in pairs(self.view_ctl_queue) do
|
|
view:Hide()
|
|
end
|
|
self.view_id = self.view_id + 1
|
|
self.view_ctl_queue[ref_tar] = self.view_id
|
|
end
|
|
|
|
--2级界面,自动加入到管理队列里面
|
|
if (not ref_tar.append_to_ctl_queue and ref_tar.layer_name == "Activity" and not ref_tar.force_no_ctl_queue) and self.view_activity_ctl_queue[ref_tar] == nil then
|
|
for view, _ in pairs(self.view_activity_ctl_queue) do
|
|
view:Hide()
|
|
end
|
|
self.act_view_id = self.act_view_id + 1
|
|
self.view_activity_ctl_queue[ref_tar] = self.act_view_id
|
|
end
|
|
end
|
|
|
|
function LuaViewManager:CloseView(ref_tar)
|
|
self.last_use_background = ref_tar.use_background
|
|
|
|
if self.view_ctl_queue[ref_tar] then--不管如何进来有的话就要清掉
|
|
self.view_ctl_queue[ref_tar] = nil
|
|
end
|
|
if self.view_activity_ctl_queue[ref_tar] then--不管如何进来有的话就要清掉
|
|
self.view_activity_ctl_queue[ref_tar] = nil
|
|
end
|
|
|
|
if self.all_view_queue[ref_tar] then --不管如何进来有的话就要清掉
|
|
self.all_view_queue[ref_tar] = nil
|
|
end
|
|
|
|
--1级界面,自动加入到管理队列里面
|
|
if (ref_tar.append_to_ctl_queue or ref_tar.layer_name == "UI") then
|
|
local max_id = 0
|
|
local max_view = nil
|
|
for view, id in pairs(self.view_ctl_queue) do
|
|
if id > max_id then
|
|
max_id = id
|
|
max_view = view
|
|
end
|
|
end
|
|
if max_view then
|
|
-- self.view_id = self.view_id - 1
|
|
max_view:CancelHide()
|
|
end
|
|
end
|
|
|
|
--活动层级相关这里也要加入堆栈
|
|
if (not ref_tar.append_to_ctl_queue and ref_tar.layer_name == "Activity" and not ref_tar.force_no_ctl_queue) then
|
|
local max_id = 0
|
|
local max_view = nil
|
|
for view, id in pairs(self.view_activity_ctl_queue) do
|
|
if id > max_id then
|
|
max_id = id
|
|
max_view = view
|
|
end
|
|
end
|
|
if max_view then
|
|
-- self.act_view_id = self.act_view_id - 1
|
|
max_view:CancelHide()
|
|
end
|
|
end
|
|
|
|
if Scene and Scene.Instance and TableSize(self.view_ctl_queue) == 0 then
|
|
Scene.Instance:ChangeFogEnable(true)
|
|
end
|
|
end
|
|
|
|
function LuaViewManager:DestroyView(gameObject)
|
|
-- panelMgr:CloseView(gameObject)
|
|
destroy(gameObject, true)
|
|
end
|
|
|
|
function LuaViewManager:LoadItem(ref_tar,abName,pfName,callBack)
|
|
lua_resM:addRefCount(ref_tar,abName)
|
|
if ref_tar.use_local_view and SystemRuntimePlatform.IsWindowsEditor() then
|
|
local root_path = "root/Canvas/"
|
|
if layerName == "Main" then
|
|
root_path = "root/BackCanvas/"
|
|
end
|
|
local view_path = root_path .. pfName
|
|
local go = GameObject.Find(view_path)
|
|
if go then
|
|
local item = newObject(go)
|
|
item.layer = LayerMask.NameToLayer("UI")
|
|
item.gameObject:SetActive(true)
|
|
callBack(item)
|
|
else
|
|
Message.show("找不到本地界面:" .. view_path)
|
|
ref_tar.use_local_view = false
|
|
panelMgr:LoadItem(abName,pfName,callBack)
|
|
end
|
|
else
|
|
ref_tar.use_local_view = false
|
|
panelMgr:LoadItem(abName,pfName,callBack)
|
|
end
|
|
-- local function onLoadItemCallback(objs)
|
|
-- if not ref_tar._use_delete_method then
|
|
-- local go = nil
|
|
-- if objs and objs[0] then
|
|
-- go = newObject(objs[0])
|
|
-- --go.name = assetName;
|
|
|
|
-- go.layer = UIPartical.RenderingOther_List.UI
|
|
-- --go.transform:SetParent(panelMgr:GetParent(layerName))
|
|
-- -- go.transform.localScale = Vector3.one
|
|
-- -- go.transform.localPosition = Vector3.zero
|
|
-- end
|
|
-- if callBack then
|
|
-- callBack(go)
|
|
-- end
|
|
-- -- lua_resM:ImmeUnLoadAB(abName)
|
|
-- end
|
|
-- end
|
|
-- lua_resM:loadPrefab(ref_tar,abName,pfName,onLoadItemCallback, nil, ASSETS_LEVEL.HIGHT)
|
|
end
|
|
|
|
function LuaViewManager:ClearItem(gameObject)
|
|
destroy(gameObject)
|
|
-- panelMgr:ClearItem(gameObject)
|
|
end
|
|
|
|
function LuaViewManager:GetMaskID()
|
|
return self.maskIdPool:Pop()
|
|
end
|
|
|
|
function LuaViewManager:ReleaseMaskID(mid)
|
|
return self.maskIdPool:Push(mid)
|
|
end
|
|
|
|
function LuaViewManager:GetViewNum( )
|
|
return TableSize(self.view_ctl_queue)
|
|
end
|
|
|
|
LuaViewManager.BgType =
|
|
{
|
|
Base = 1,
|
|
--Main = 2,
|
|
}
|
|
|
|
--检测需要在后UI层显示的数据
|
|
function LuaViewManager:ShowBackData(data)
|
|
if not data or not data.target then return end
|
|
self.back_ui_list = self.back_ui_list or {}
|
|
self.back_ui_target_table = self.back_ui_target_table or {}
|
|
local t = false
|
|
for i,v in ipairs(self.back_ui_list) do
|
|
if v.target == data.target then
|
|
t = v
|
|
end
|
|
end
|
|
|
|
if t then
|
|
--合并背景数据
|
|
if data.bg_list and #data.bg_list > 0 then
|
|
--背景需要直接覆盖之前的
|
|
t.bg_list = data.bg_list
|
|
end
|
|
|
|
--合并背景UI节点数据
|
|
if data.node_list and #data.node_list > 0 then
|
|
|
|
t.node_list = t.node_list or {}
|
|
for i,v in ipairs(data.node_list) do
|
|
table.insert(t.node_list, v)
|
|
end
|
|
end
|
|
|
|
--摄像机参数,如果原来是空并且新传入的部位空,才再次赋值
|
|
if not t.camera_args and data.camera_args then
|
|
t.camera_args = data.camera_args
|
|
end
|
|
|
|
--黑底参数,如果原来是空并且新传入的部位空,才再次赋值
|
|
if not t.activity and data.activity then
|
|
t.activity = data.activity
|
|
end
|
|
|
|
else
|
|
t = data
|
|
self.back_ui_target_table[data.target] = true
|
|
table.insert(self.back_ui_list, t)
|
|
end
|
|
|
|
self:LoadUIRes(t)
|
|
end
|
|
|
|
--处理把毕竟或者UI显示在后UI层
|
|
function LuaViewManager:LoadUIRes(data)
|
|
if not self.is_init_model then
|
|
self:InitBackModel()
|
|
end
|
|
if not data or not data.target then
|
|
if self.base_empty_activity_bg then
|
|
self.base_empty_activity_bg.gameObject:SetActive(false)
|
|
end
|
|
self.base_activity_bg.gameObject:SetActive(false)
|
|
self.base_win_bg.gameObject:SetActive(false)
|
|
self.main_win_bg.gameObject:SetActive(false)
|
|
return
|
|
end
|
|
|
|
local bg_list = data.bg_list or {}
|
|
|
|
--local main_table = bg_list[LuaViewManager.BgType.Main]
|
|
local base_table = bg_list[LuaViewManager.BgType.Base]
|
|
|
|
local activity_table = data.activity or {}
|
|
local node_list = data.node_list or {}
|
|
local back_camera_args = data.camera_args
|
|
|
|
-- PrintTable(main_table)
|
|
-- PrintTable(base_table)
|
|
-- PrintTable(back_camera_args)
|
|
-- PrintTable(activity_table)
|
|
|
|
--设置摄像机
|
|
self.role_back_camera.gameObject:SetActive(true)
|
|
self:SetBackCamera(back_camera_args)
|
|
|
|
--黑底处理
|
|
local function set_activity_bg(alpha)
|
|
alpha = alpha or 0.7
|
|
self.base_activity_bg.gameObject:SetActive(true)
|
|
self.base_activity_bg.enabled = true
|
|
self.base_activity_bg.alpha = alpha
|
|
end
|
|
|
|
if self.base_empty_activity_bg then
|
|
self.base_empty_activity_bg.gameObject:SetActive(activity_table and not activity_table.is_show)
|
|
end
|
|
|
|
if activity_table and activity_table.is_show then
|
|
set_activity_bg(activity_table.alpha)
|
|
else
|
|
self.base_activity_bg.gameObject:SetActive(false)
|
|
self.base_activity_bg.enabled = false
|
|
end
|
|
|
|
--UI节点处理
|
|
if #node_list > 0 then
|
|
self:MoveUIBack(node_list)
|
|
end
|
|
|
|
--一级背景处理(最底下的背景)
|
|
if base_table then
|
|
if self.cur_base_res ~= base_table.res then
|
|
self.cur_base_res = base_table.res
|
|
local function load_base_bg_callback()
|
|
if self.cur_base_res then
|
|
self.base_win_bg.gameObject:SetActive(true)
|
|
self.base_win_bg.enabled = true
|
|
else
|
|
self.base_win_bg.gameObject:SetActive(false)
|
|
self.base_win_bg.enabled = false
|
|
end
|
|
end
|
|
self:SetArgs(self.base_win_bg, base_table.args)
|
|
lua_resM:setOutsideRawImage(self, self.base_win_bg, self.cur_base_res, nil, load_base_bg_callback)
|
|
else
|
|
self.base_win_bg.gameObject:SetActive(true)
|
|
self.base_win_bg.enabled = true
|
|
end
|
|
else
|
|
self.base_win_bg.gameObject:SetActive(false)
|
|
end
|
|
end
|
|
|
|
|
|
function LuaViewManager:SetBackCameraShow( bool )
|
|
if self.role_back_camera and self.role_back_camera.gameObject then
|
|
self.role_back_camera.gameObject:SetActive(bool)
|
|
end
|
|
end
|
|
|
|
--设置UI的位置和大小
|
|
function LuaViewManager:SetArgs(trans, args)
|
|
if trans == nil or args == nil then
|
|
return
|
|
end
|
|
SetAnchoredPosition(trans.transform, args.pos.x, args.pos.y)
|
|
SetSizeDelta(trans.transform, args.size.x, args.size.y)
|
|
end
|
|
|
|
--初始化分层模块
|
|
function LuaViewManager:InitBackModel()
|
|
self.is_init_model = true
|
|
self.back_node_list = self.back_node_list or {}
|
|
self.back_ui_list = self.back_ui_list or {}
|
|
self.back_ui_target_table = self.back_ui_target_table or {}
|
|
|
|
local back_canvae = GameObject.Find("root").transform:Find("BackCanvas")
|
|
|
|
local bg_canvas = back_canvae.transform:Find("Bg"):GetComponent("Canvas")
|
|
bg_canvas.sortingOrder = 400
|
|
|
|
if not self.base_activity_bg then
|
|
self.base_activity_bg = back_canvae.transform:Find("Bg/BgContain/BaseActivityBg"):GetComponent("ImageExtend")
|
|
self.base_activity_bg.transform.sizeDelta = Vector2(SrcScreenWidth * 1.2,ScreenHeight * 1.2)
|
|
end
|
|
|
|
if not self.base_empty_activity_bg then
|
|
self.base_empty_activity_bg = back_canvae.transform:Find("Bg/BgContain/BaseEmptyActivityBg")
|
|
if self.base_empty_activity_bg then
|
|
self.base_empty_activity_bg.transform.sizeDelta = Vector2(SrcScreenWidth * 1.2,ScreenHeight * 1.2)
|
|
end
|
|
self.base_empty_activity_bg.gameObject:SetActive(false)
|
|
end
|
|
|
|
if not self.main_win_bg then
|
|
self.main_win_bg = back_canvae.transform:Find("Bg/BgContain/MainWinBg"):GetComponent("RawImage")
|
|
end
|
|
|
|
if not self.base_win_bg then
|
|
self.base_win_bg = back_canvae.transform:Find("Bg/BgContain/BaseWinBg"):GetComponent("RawImage")
|
|
end
|
|
|
|
if not self.role_back_camera then
|
|
self.role_back_camera = GameObject.Find("root").transform:Find("UIBackRoleCamera")
|
|
self.role_back_camera.transform.localRotation = Quaternion.Euler(Vector3(10,1.86,0))
|
|
|
|
|
|
local cam = self.role_back_camera.transform:GetComponent("Camera")
|
|
cam.enabled = true
|
|
cam.allowHDR = true
|
|
--改为透视摄像机
|
|
cam.orthographic = false
|
|
cam.fieldOfView = 8
|
|
cam.farClipPlane = 100
|
|
cam.cullingMask = bit.bor(cam.cullingMask, bit.lshift(1,29))
|
|
|
|
self.role_back_camera_comp = cam
|
|
self.role_back_camera.gameObject:SetActive(true)
|
|
self:ApplyUIPostEffect()
|
|
|
|
local function on_delay( )
|
|
self:ApplyUIPostEffect()
|
|
self.role_back_camera.gameObject:SetActive(false)
|
|
end
|
|
setTimeout(on_delay, 0.1)
|
|
|
|
end
|
|
|
|
if not self.move_root then
|
|
self.move_root = back_canvae.transform:Find("Bg/BgContain/MoveUIRoot")
|
|
if not self.move_root then
|
|
self.move_root = back_canvae.transform:Find("Bg/BgContain")
|
|
end
|
|
self.move_root.sizeDelta = Vector2(ScreenWidth,ScreenHeight)
|
|
end
|
|
end
|
|
|
|
function LuaViewManager:ApplyUIPostEffect( )
|
|
if not self.bloom_effect then
|
|
self.bloom_effect = self.role_back_camera:GetComponent(typeof(PostEffect))
|
|
end
|
|
print("tanar: [LuaViewManager 989]=> self.bloom_effect: ",self.bloom_effect)
|
|
if not IsNull(self.bloom_effect) then
|
|
-- 低端设备就全关掉
|
|
if not self:IsSupportUIEffect() then
|
|
self.bloom_effect.enabled = false
|
|
else
|
|
self.bloom_effect.enabled = true
|
|
|
|
-- 泛光,中高端设备
|
|
self.bloom_effect.EnableBloom = true
|
|
self.bloom_effect.use_dual_bloom = true
|
|
self.bloom_effect.threshold = 0.8
|
|
self.bloom_effect.intensity = 1.5
|
|
self.bloom_effect.blurSize = 2.5
|
|
self.bloom_effect.blurIterations = 3
|
|
self.bloom_effect:ApplyBloomMaterialProperties()
|
|
print("tanar: LuaViewManager [1005] =========== ")
|
|
-- 抗锯齿
|
|
-- if not self:IsSupportUIFXAA() then
|
|
self.bloom_effect.EnableFXAA = false
|
|
-- else
|
|
-- self.bloom_effect.EnableFXAA = true
|
|
-- self.bloom_effect.subpixelBlending = 0.4
|
|
-- self.bloom_effect.lowQuality = true
|
|
-- end
|
|
-- self.bloom_effect:ApplyFXAAMaterialProperties()
|
|
|
|
-- 不需要模糊
|
|
self.bloom_effect.EnableBlur = false
|
|
end
|
|
end
|
|
end
|
|
|
|
function LuaViewManager:IsSupportUIEffect( )
|
|
if SystemMemoryLevel.Cur == SystemMemoryLevel.Low then
|
|
return false
|
|
end
|
|
return true
|
|
end
|
|
|
|
function LuaViewManager:IsSupportUIFXAA( )
|
|
if SystemMemoryLevel.Cur == SystemMemoryLevel.Hight then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
--切换泛光效果开关
|
|
function LuaViewManager:SetUICameraEnable( flag )
|
|
if self.last_ui_camera_flag and self.last_ui_camera_flag == flag then
|
|
self.last_ui_camera_flag = flag
|
|
return
|
|
end
|
|
if self.role_back_camera and self.role_back_camera.gameObject then
|
|
self.role_back_camera.gameObject:SetActive(flag)
|
|
end
|
|
end
|
|
|
|
--切换泛光效果开关脚本
|
|
function LuaViewManager:SetUICameraBloomEnable( flag )
|
|
if self:IsSupportUIEffect() and self.bloom_effect then
|
|
self.bloom_effect.enabled = flag
|
|
end
|
|
end
|
|
|
|
--清除默认背景
|
|
function LuaViewManager:LoadEmptyBgRes()
|
|
if not self.is_init_model then
|
|
self:InitBackModel()
|
|
end
|
|
self.role_back_camera.gameObject:SetActive(false)
|
|
self.cur_base_res = nil
|
|
self.base_activity_bg.gameObject:SetActive(false)
|
|
if self.base_empty_activity_bg then
|
|
self.base_empty_activity_bg.gameObject:SetActive(false)
|
|
end
|
|
self.base_win_bg.gameObject:SetActive(false)
|
|
self.main_win_bg.gameObject:SetActive(false)
|
|
end
|
|
|
|
--隐藏某界面的背景
|
|
function LuaViewManager:HideBackData(target)
|
|
self.back_ui_list = self.back_ui_list or {}
|
|
self.back_ui_target_table = self.back_ui_target_table or {}
|
|
if #self.back_ui_list == 0 then return end
|
|
local idx = -1
|
|
for i,v in ipairs(self.back_ui_list) do
|
|
if v.target == target then
|
|
idx = i
|
|
break
|
|
end
|
|
end
|
|
|
|
if idx == -1 then return end
|
|
|
|
self.back_ui_target_table[target] = nil
|
|
if self.back_ui_list[idx] and self.back_ui_list[idx].node_list then
|
|
self:RemoveUIBack(StartToEnd(self.back_ui_list[idx].node_list))
|
|
end
|
|
table.remove(table.remove(self.back_ui_list, idx))
|
|
self:CheckShow()
|
|
end
|
|
|
|
|
|
|
|
LuaViewManager.RoleBackCameraPosY = false
|
|
|
|
LuaViewManager.RoleBackCameraSetting =
|
|
{
|
|
[1] = {ratio = 1, y = 11.82},
|
|
[2] = {ratio = 1.15, y = 11.82},
|
|
[3] = {ratio = 1.25, y = 11.82},
|
|
[4] = {ratio = 1.3, y = 11.92},
|
|
[5] = {ratio = 1.5, y = 12.1},
|
|
[6] = {ratio = 1.7, y = 12.1},
|
|
}
|
|
|
|
LuaViewManager.CameraArgs =
|
|
{
|
|
DepthZero = Vector3(-1.72, 12.1, 446),
|
|
Depth2K = Vector3(-1.72, 12.1, 446),
|
|
}
|
|
|
|
--设置模型摄像机
|
|
function LuaViewManager:SetBackCamera(args)
|
|
if not self.is_init_model then
|
|
self:InitBackModel()
|
|
end
|
|
local pos = (args and args.pos) and args.pos or LuaViewManager.CameraArgs.DepthZero
|
|
--根据屏幕分辨率,调整镜头系数,只要调整Y坐标(不调整镜头会歪)
|
|
if not LuaViewManager.RoleBackCameraPosY then
|
|
local t = LuaViewManager.RoleBackCameraSetting
|
|
local ratio = OriginalResolutionWidth / ResolutionHeight
|
|
local y = 4.5
|
|
if ratio < t[1].ratio then
|
|
y = t[1].y
|
|
elseif ratio > t[#t].ratio then
|
|
y = t[#t].y
|
|
else
|
|
for i=#t,1,-1 do
|
|
if ratio >= t[i].ratio then
|
|
y = t[i].y
|
|
break
|
|
end
|
|
end
|
|
end
|
|
LuaViewManager.RoleBackCameraPosY = y
|
|
end
|
|
pos.y = LuaViewManager.RoleBackCameraPosY
|
|
self.role_back_camera.localPosition = pos
|
|
--测试
|
|
-- if SystemRuntimePlatform.IsAndroid() then
|
|
-- self.role_back_camera.transform.localPosition = Vector3(0,3.12,476)
|
|
-- end
|
|
end
|
|
|
|
--把Ui节点从后背景层,移动到原来的界面
|
|
function LuaViewManager:RemoveUIBack(node_list)
|
|
if not self.is_init_model then
|
|
self:InitBackModel()
|
|
end
|
|
local node_list = node_list or {}
|
|
for k,v in ipairs(node_list) do
|
|
if v and self.back_node_list[v] then
|
|
v.node.transform:SetParent(v.parent)
|
|
v.node.transform:SetSiblingIndex(v.sibling_idx)
|
|
self.back_node_list[v] = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
--把Ui节点移到后背景层
|
|
function LuaViewManager:MoveUIBack(node_list)
|
|
if not self.is_init_model then
|
|
self:InitBackModel()
|
|
end
|
|
local node_list = node_list or {}
|
|
for k,v in pairs(node_list) do
|
|
if not self.back_node_list[v] then
|
|
self.back_node_list[v] = true
|
|
local pos_x, pos_y = GetAnchoredPosition(v.node.transform)
|
|
v.node.transform:SetParent(self.move_root.transform)
|
|
SetLocalScale(v.node.transform)
|
|
SetAnchoredPosition(v.node.transform, pos_x, pos_y)
|
|
self:SetArgs(v.node.transform, v.args)
|
|
end
|
|
end
|
|
end
|
|
|
|
--检测当前需要显示的背景
|
|
function LuaViewManager:CheckShow()
|
|
if #self.back_ui_list == 0 and TableSize(self.back_node_list) == 0 then
|
|
self:LoadEmptyBgRes()
|
|
else
|
|
local temp = self.back_ui_list[#self.back_ui_list]
|
|
self:LoadUIRes(temp)
|
|
end
|
|
end
|
|
|
|
function LuaViewManager:DoMoveUIRootAnim(show, target_view)
|
|
if not self.move_root then return end
|
|
if not self.back_ui_target_table[target_view] then return end
|
|
|
|
local function scale_anim_callback()
|
|
if not show then
|
|
SetLocalScale(self.move_root, 1, 1,1)
|
|
end
|
|
end
|
|
local tween_type = show and TweenFunc.EASE_OUT_BACK or TweenFunc.EASE_IN_BACK
|
|
local cfg = show and BaseView.OpenCloseScaleCfg[1] or BaseView.OpenCloseScaleCfg[2]
|
|
local cur_scale = Vector3.New(cfg.start_scale, cfg.start_scale, cfg.start_scale)
|
|
local target_scale = Vector3.New(cfg.end_scale, cfg.end_scale, cfg.end_scale)
|
|
local time = cfg.time
|
|
SetLocalScale(self.move_root, cur_scale.x, cur_scale.y, cur_scale.z)
|
|
if self.scale_anim_id then
|
|
TweenLite.Stop(self.scale_anim_id)
|
|
self.scale_anim_id = nil
|
|
end
|
|
self.scale_anim_id = TweenLite.to(self, self.move_root, TweenLite.UiAnimationType.SCALE, target_scale, time, scale_anim_callback, tween_type)
|
|
end
|
|
|
|
--是否当前有带遮罩或者全屏界面
|
|
function LuaViewManager:IsHaveFullScreenViewOrMaskBgView()
|
|
local b = false
|
|
for view,v in pairs(self.all_view_queue) do
|
|
if view.use_background or view.hide_maincancas then
|
|
b = true
|
|
break
|
|
end
|
|
end
|
|
return b
|
|
end
|