|
|
- --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
|