local Loading_Controller = {} local private = {} local loadingPanelPath = "Loading/UILoadingPanel" local EventSystem = require('Event/EventSystem') local LOGIN_BG_STATIC_PIC = ConstAssetPathConfig.LOGIN_BG_STATIC_PIC Loading_Controller.PackDownloadType = { HeroShow = 1, Video = 2, Image = 3, } private._loginLoadingProgress = 0 private._loadTimeOffset = 0 --唯一开启Loading方法 -- isSpecialLoadingPanel 是否正在启用特殊的loading界面 -- 新加context参数,不同类型可以传一定的参数 function Loading_Controller.BeginLoading(type, context) CTL.Sound.BeginLoading(type) CTL.Sound.ClearLevelSound() UIManager.CloseAllBase() --游戏中切场景的时候会关闭所有的界面,这里为了查问题,调用一下UI的检测逻辑 if type == MDL.Loading.LoadingTypeEnum.InGame or type == MDL.Loading.LoadingTypeEnum.PlotReview then UIManager.CheckActiveUIModleTags() end MDL.Loading.SetIsLoadingState(true, type) CTL.Optimize.StopFrameCheck() --分包下载热更资源显示武将展示界面 if type == MDL.Loading.LoadingTypeEnum.StagePackage then if context == Loading_Controller.PackDownloadType.HeroShow then UIManager.CloseSpecialView(Const_UI_Lua.UIEnum.UILoginVideo) private.OpenStageDownload() else if context == Loading_Controller.PackDownloadType.Video then CTL.Login.ShowLoginMoviePanel(MDL.Login.LoginBGTypeEnum.Video, MDL.Login.GetLoginShowPath(), false) else CTL.Login.ShowLoginMoviePanel(MDL.Login.LoginBGTypeEnum.Texture, LOGIN_BG_STATIC_PIC, true) end UIManager.OpenView(loadingPanelPath) EventSystem.Dispatch(EventID.UI_Loading_EnableBG, false) end return end if type == MDL.Loading.LoadingTypeEnum.HotFix then CTL.Login.ShowLoginBgByHotfixSize(context) end if type == MDL.Loading.LoadingTypeEnum.FastFollowAssetPack then CTL.Login.ShowLoginMoviePanel(MDL.Login.LoginBGTypeEnum.Video, MDL.Login.GetLoginShowPath()) end if type<=MDL.Loading.LoadingTypeEnum.StagePackage or not LevelManager.CurLevelIsNeedSpecialLoadingLevel() then UIManager.OpenView(loadingPanelPath) end if type == MDL.Loading.LoadingTypeEnum.None or type == MDL.Loading.LoadingTypeEnum.HotFix or type == MDL.Loading.LoadingTypeEnum.FastFollowAssetPack then EventSystem.Dispatch(EventID.UI_Loading_EnableBG, false) end end function Loading_Controller.OpenSpecialLoadingView() EventSystem.Dispatch(EventID.UI_WorldBoss_CloseView) UIManager.OpenSpecialView(Const_UI_Lua.UIEnum.UISpecialLoadingPanel) end --唯一关闭Loading方法 function Loading_Controller.EndLoading() MDL.Loading.SetIsLoadingState(false,MDL.Loading.LoadingTypeEnum.None) CTL.Optimize.StartFrameCheck() if UIManager.IsViewOpened(loadingPanelPath) then UIManager.CloseView(loadingPanelPath) elseif UIManager.IsViewOpened(Const_UI_Lua.UIEnum.UIHeroLoadingShowPanel) then UIManager.CloseView(Const_UI_Lua.UIEnum.UIHeroLoadingShowPanel) end end function private.OpenStageDownload() --该界面是延时打开的,有可能出现该界面还没打开时,分包就下完了的情况 if CTL.HotFix.Get_IsFirstPackageComplete() then if TAI_DEVELOPMENT_BUILD then CTL.Login.ShowLoginUI() end else UIManager.OpenView(Const_UI_Lua.UIEnum.UIHeroLoadingShowPanel) end end --设置登录阶段进度条进度 function Loading_Controller.SetLoginLoadingProgress(value) private._loginLoadingProgress = value end --获取登录阶段进度条进度 function Loading_Controller.GetLoginLoadingProgress() if LevelManager._levelLogicData.LogicLoadingStep == LuaConst.Enum_LoadingStep.FastPlay then return private.FastPlayProgress() end return private._loginLoadingProgress end --获取切换关卡进度条进度 function Loading_Controller.GetInGameLoadingProgress(step) local progress = 0 if step == LuaConst.Enum_LoadingStep.WaitSceneLoadingOk then private._loadTimeOffset = private._loadTimeOffset + 0.008 if private._loadTimeOffset>0.4 then private._loadTimeOffset = 0.4 end progress = 0.1 + private._loadTimeOffset end if step == LuaConst.Enum_LoadingStep.WaitLoadLevelRes then progress = 0.5 + private.GetLoadTimeOffset() end if step == LuaConst.Enum_LoadingStep.InitLevelMap then progress = 0.6 + private.GetLoadTimeOffset() end if step == LuaConst.Enum_LoadingStep.InitLevelLayout then progress = 0.7 + private.GetLoadTimeOffset() end if step == LuaConst.Enum_LoadingStep.InitPlayer then progress = 0.8 + private.GetLoadTimeOffset() end if step == LuaConst.Enum_LoadingStep.EnterLevel then progress = 1 end if step == LuaConst.Enum_LoadingStep.FastPlay then progress = private.FastPlayProgress() end return progress end function private.GetLoadTimeOffset() private._loadTimeOffset = private._loadTimeOffset + 0.008 if private._loadTimeOffset > 0.1 then private._loadTimeOffset = 0.1 end return private._loadTimeOffset end function Loading_Controller.GetRandomNumber(max, num) --根据系统时间取反取高7位生成差异较大的随机种子 math.randomseed(tostring(os.time()):reverse():sub(1, 7)) --如果只需要一个直接返回一个随机number if num == nil or num <= 1 then return math.random(max) end --需要多个则返回一个随机number组成的table local randomNumList = {} for i=1, num do table.insert(randomNumList, math.random(max)) end return randomNumList end function private.FastPlayProgress() if LogicUpdateManager._serverReplenishFrame > LogicUpdateManager._clientHandleFrame then local percent = LogicUpdateManager._clientHandleFrame / LogicUpdateManager._serverReplenishFrame --print("---------------------------" , percent ,LogicUpdateManager._serverReplenishFrame) return percent else return 1 end end return Loading_Controller