|
|
SceneLoadView = SceneLoadView or BaseClass(BaseView)
|
|
local SceneLoadView = SceneLoadView
|
|
SceneLoadView.LOAD_SCENE_TITLE = {type = 1, weight = 0.4}
|
|
SceneLoadView.LOAD_PRELOAD_RES = {type = 2, weight = 0.5}
|
|
SceneLoadView.LOAD_SCENE_DATA = {type = 3, weight = 0.1}
|
|
|
|
|
|
function SceneLoadView:__init()
|
|
self.base_file = "sceneLoad"
|
|
self.layout_file = "SceneLoadView"
|
|
self.layer_name = "Top"
|
|
self.mask_open_sound = true
|
|
self.mask_close_sound = true
|
|
self.open_guide_close = nil
|
|
-- self.use_local_view = true
|
|
self.close_mode = CloseMode.CloseVisible
|
|
self.destroy_imm = false
|
|
self.use_background = true
|
|
self.is_delay_callback = false
|
|
self.is_set_zdepth = true
|
|
self.hide_maincancas = false
|
|
self.ignore_use_anim = true
|
|
self.background_alpha = 1
|
|
self.auto_update_progress = 0
|
|
self.scene_load_progress_finished = false
|
|
self.progress_time = 7 --进入游戏加载5秒 切换场景3秒
|
|
self.trigger_story = nil
|
|
self.cur_value = 0
|
|
self.is_first_show = true
|
|
-- self.is_first_set_res = true
|
|
self.last_progress_value = 0
|
|
self.curr_progress_value = 0
|
|
self.temp_res_target = {}
|
|
self.default_bg_abname = "icon_sceneload_1"
|
|
self.default_res_name = "1.jpg"
|
|
self:AddPreLoadList("uiComponent_asset", {"ProgressBar2", "progressBg", "progressColor"}, LuaResManager.RES_TYPE.SPRITE)
|
|
self.curr_progress_with_weight = {}
|
|
|
|
self.load_callback = function ()
|
|
self:LoadSuccess()
|
|
self:InitEvent()
|
|
end
|
|
self.open_callback = function ()
|
|
self:OpenFun()
|
|
self:SetPromptTxt()
|
|
if self.hide_load_progress then
|
|
self.gameObject:SetActive(false)
|
|
end
|
|
self:CheckResLoadTime()
|
|
self:StartSmoothTimer()
|
|
if MainCamera and MainCamera.Instance then
|
|
MainCamera:getInstance():ResetAutoRotateInfo()
|
|
end
|
|
end
|
|
|
|
self.close_callback = function ()
|
|
--切换角色之后,不需要预更新,等选角之后重新打开再更新加载图
|
|
if self.is_change_role then
|
|
self.is_change_role = false
|
|
self.need_update_bg_in_open = true
|
|
else
|
|
self:UpdateLoadingBg() --预更新
|
|
end
|
|
|
|
self:Remove()
|
|
self.open_callback_func = nil
|
|
self.curr_progress_with_weight = {}
|
|
GlobalEventSystem:Fire(EventName.PLAY_MAINUI_MOVIE_CENTER_EVENT)
|
|
-- self.is_first_set_res = false
|
|
|
|
end
|
|
|
|
self.destroy_callback = function()
|
|
self:DestroySuccess()
|
|
end
|
|
end
|
|
|
|
function SceneLoadView:DestroySuccess( )
|
|
if self.change_account_id then
|
|
GlobalEventSystem:UnBind(self.change_account_id)
|
|
self.change_account_id = nil
|
|
end
|
|
if self.change_role_id then
|
|
GlobalEventSystem:UnBind(self.change_role_id)
|
|
self.change_role_id = nil
|
|
end
|
|
if self.level_up_id then
|
|
RoleManager.Instance.mainRoleInfo:UnBind(self.level_up_id)
|
|
self.level_up_id = nil
|
|
end
|
|
end
|
|
|
|
function SceneLoadView:Open(hide_load_progress,scene_id)
|
|
self.open_guide_close = nil --此界面不销毁,需要每次都重置一下该状态
|
|
self.hide_load_progress = hide_load_progress or false
|
|
self.scene_id = scene_id or false
|
|
self.is_show_effect = false
|
|
SceneLoadView.super.Open(self)
|
|
|
|
if self.need_update_bg_in_open then
|
|
self.need_update_bg_in_open = false
|
|
self:UpdateLoadingBg()
|
|
end
|
|
end
|
|
|
|
function SceneLoadView:CheckResLoadTime()
|
|
if self.check_close_event then
|
|
GlobalTimerQuest:CancelQuest(self.check_close_event)
|
|
self.check_close_event = nil
|
|
end
|
|
local check_close_func = function()
|
|
if not self.scene_load_progress_finished then
|
|
self.wait_res_load = true
|
|
if not IsNull(self.showText) then
|
|
self:SetLoadText(self.cur_value)
|
|
end
|
|
end
|
|
self.check_close_event = nil
|
|
end
|
|
self.check_close_event = setTimeout(check_close_func,20)
|
|
end
|
|
|
|
function SceneLoadView:Remove()
|
|
GlobalEventSystem:Fire(EventName.SCENELOADVIEWE_CLOSE)
|
|
if self.anima then
|
|
destroy(self.anima)
|
|
self.anima = nil
|
|
end
|
|
if self.recording_bind_id then
|
|
GlobalTimerQuest:CancelQuest(self.recording_bind_id)
|
|
self.recording_bind_id = nil
|
|
end
|
|
self.scene_load_progress_finished = false
|
|
self.auto_update_progress = 0
|
|
self.cur_value = 0
|
|
self.wait_res_load = false
|
|
if not IsNull(self.showText) then
|
|
self.showText.gameObject:SetActive(true)
|
|
end
|
|
|
|
if self.check_close_event then
|
|
GlobalTimerQuest:CancelQuest(self.check_close_event)
|
|
self.check_close_event = nil
|
|
end
|
|
|
|
self:StopSmoothTimer()
|
|
self.last_progress_value = 0
|
|
self.curr_progress_value = 0
|
|
end
|
|
|
|
function SceneLoadView:LoadSuccess()
|
|
self.bg = self:GetChild("bg"):GetComponent("Image")
|
|
-- self.bottom_conta = self:GetChild("bottom_conta")
|
|
-- self.bottom_conta.sizeDelta = Vector2(SrcScreenWidth,self.bottom_conta.sizeDelta.y)
|
|
-- self.bottom_conta.transform.localPosition = Vector3(-SrcScreenWidth / 2, -ScreenHeight / 2, 0)
|
|
self.progressConta,
|
|
self.showTextTran,
|
|
self.bottom_conta
|
|
= GetChildTransforms(self.transform, {
|
|
"bg/bottom_conta/progressConta",
|
|
"bg/bottom_conta/showText",
|
|
"bg/bottom_conta"
|
|
})
|
|
|
|
self.showText = self:GetChild("bg/bottom_conta/showText"):GetComponent("TMP_Text")
|
|
self.promptText = self:GetChild("bg/bottom_conta/promptText"):GetComponent("TMP_Text")
|
|
self.defaultTitleText,
|
|
self.defaultText
|
|
= GetChildTexts(self.transform, {
|
|
"bg/bottom_conta/defaultTitleText",
|
|
"bg/bottom_conta/defaultText",
|
|
})
|
|
|
|
self.progress_bar = ProgressBarComponent.New(self.progressConta, 100, 0, 1150, 14, nil, "progressBg", "progressColor", {x = 0, y = 0}, false, false)
|
|
|
|
-- if ClientConfig.iphone_x_model then
|
|
-- local p = self.showText.transform.localPosition
|
|
-- self.showText.transform.localPosition = Vector3(p.x, p.y, p.z)
|
|
-- end
|
|
|
|
if ClientConfig.iphone_x_model and SystemRuntimePlatform.IsIphone() then
|
|
self.bottom_conta.transform.anchoredPosition = Vector3(0, 50 + ClientConfig.iphone_x_offset_bottom)
|
|
end
|
|
self.bg.transform.sizeDelta = Vector2(SrcScreenWidth, ScreenHeight)
|
|
self.bg.transform.sizeDelta = Vector2(1560, 720)
|
|
|
|
local function load_callback()
|
|
Scene.Instance:SetFirstLoadBgFinish(true)
|
|
local main_role = Scene.Instance.main_role
|
|
if main_role then
|
|
local pos_x = RoleManager.Instance.mainRoleInfo.pos_x
|
|
local pos_y = RoleManager.Instance.mainRoleInfo.pos_y
|
|
main_role:SetRealPos(pos_x,pos_y, true)
|
|
end
|
|
end
|
|
self:UpdateLoadingBg(load_callback)
|
|
end
|
|
|
|
function SceneLoadView:InitEvent()
|
|
local function change_account()
|
|
self.is_change_role = true
|
|
self.last_role_level = false
|
|
end
|
|
self.change_account_id = GlobalEventSystem:Bind(EventName.CHANGE_ACCOUNT, change_account)
|
|
self.change_role_id = GlobalEventSystem:Bind(EventName.CHANGE_ROLE, change_account)
|
|
self:SetDefaultTxt()
|
|
|
|
local function on_change_level(lv)
|
|
self.last_role_level = self.last_role_level or lv
|
|
--限制频率
|
|
if self.last_role_level and lv - self.last_role_level > 5 then
|
|
--只在隐藏的时候更新
|
|
if not IsNull(self.gameObject) and not self.gameObject.activeSelf then
|
|
self:UpdateLoadingBg()
|
|
self.last_role_level = lv
|
|
end
|
|
end
|
|
end
|
|
self.level_up_id = RoleManager.Instance.mainRoleInfo:Bind(EventName.CHANGE_LEVEL, on_change_level)
|
|
end
|
|
|
|
function SceneLoadView:OpenFun()
|
|
-- lua_resM:clearReference(self.temp_res_target)
|
|
GlobalEventSystem:Fire(SceneEventType.SCENE_LOAD_VIEW_HASOPEN)
|
|
|
|
self.is_first_show = false
|
|
self:Remove()
|
|
self:SetProgressValue(0, 100)
|
|
if self.open_callback_func then
|
|
self.open_callback_func()
|
|
self.open_callback_func = nil
|
|
end
|
|
end
|
|
|
|
function SceneLoadView:UpdateLoadingBg( call_back )
|
|
local index = SceneManager:getInstance():CheckMatchLoadingRes()
|
|
local res_name = index .. ".jpg"
|
|
local ab_name = "icon_sceneload_" .. index
|
|
local function load_finish( )
|
|
if call_back then
|
|
call_back()
|
|
end
|
|
end
|
|
lua_resM:setImageSprite(self.temp_res_target, self.bg, ab_name, res_name, nil, load_finish, ASSETS_LEVEL.HIGHT)
|
|
end
|
|
|
|
|
|
function SceneLoadView:SetOpenCallBackFunc(call_back)
|
|
self.open_callback_func = call_back
|
|
end
|
|
|
|
function SceneLoadView:AutoToShow(last_time, need_bind_event)
|
|
local has_bind_back = false
|
|
local progress_back = false
|
|
|
|
if need_bind_event then
|
|
local bind_id
|
|
local on_back = function(...)
|
|
has_bind_back = true
|
|
if progress_back then
|
|
has_bind_back = false
|
|
self:Close()
|
|
end
|
|
GlobalEventSystem:UnBind(bind_id)
|
|
end
|
|
bind_id = GlobalEventSystem:Bind(need_bind_event, on_back)
|
|
else
|
|
has_bind_back = true
|
|
end
|
|
|
|
local finish = function()
|
|
progress_back = true
|
|
if has_bind_back then
|
|
progress_back = false
|
|
self:Close()
|
|
end
|
|
end
|
|
|
|
if not self.auto_show_id then
|
|
local inter = 0.05
|
|
local per_add = 100 / (last_time / inter)
|
|
local auto_show_progress = 0
|
|
|
|
self:Open()
|
|
|
|
local onTimer = function()
|
|
auto_show_progress = auto_show_progress + per_add
|
|
self:SetProgressValue(auto_show_progress, 100)
|
|
|
|
if auto_show_progress >= 100 then
|
|
GlobalTimerQuest:CancelQuest(self.auto_show_id)
|
|
self.auto_show_id = nil
|
|
|
|
finish()
|
|
end
|
|
end
|
|
self.auto_show_id = GlobalTimerQuest:AddPeriodQuest(onTimer, inter, -1)
|
|
end
|
|
end
|
|
|
|
function SceneLoadView:AddLoadTimer()
|
|
if self.recording_bind_id == nil then
|
|
local time = 0
|
|
local function onTimer()
|
|
time = time + 0.05
|
|
if not self.trigger_story and time >= self.progress_time - 0.3 then
|
|
self.trigger_story = true
|
|
GlobalEventSystem:Fire(EventName.TRIGGER_STORY_START)
|
|
end
|
|
|
|
if time <= self.progress_time then
|
|
local add = 5 / self.progress_time
|
|
self:AutoUpdateProgress(add)
|
|
else
|
|
GlobalTimerQuest:CancelQuest(self.recording_bind_id)
|
|
self.recording_bind_id = nil
|
|
self.trigger_story = nil
|
|
self.scene_load_progress_finished = true
|
|
self.progress_time = 3
|
|
end
|
|
end
|
|
onTimer()
|
|
self.recording_bind_id = GlobalTimerQuest:AddPeriodQuest(onTimer, 0.05, -1)
|
|
end
|
|
end
|
|
|
|
--真实的进度条 weight权重
|
|
function SceneLoadView:RealUpdateProgress(curr_value, max_value, load_type)
|
|
if not self.isPop then return end
|
|
if load_type == nil then return end
|
|
curr_value = curr_value or 0
|
|
max_value = max_value or 100
|
|
if max_value == 0 then max_value = 100 end
|
|
self.curr_progress_with_weight[load_type.type] = math.floor(curr_value / max_value * 100) * load_type.weight
|
|
-- self:AutoUpdateProgress()
|
|
end
|
|
|
|
function SceneLoadView:AutoUpdateProgress()
|
|
local value = 0
|
|
for t, v in pairs(self.curr_progress_with_weight) do
|
|
value = value + v
|
|
end
|
|
if self.is_loaded then
|
|
if value > self.curr_progress_value then
|
|
self:SetProgressValue(value, 100)
|
|
end
|
|
-- self:SetLoadText(value)
|
|
end
|
|
|
|
if value >= 100 then
|
|
self.trigger_story = nil
|
|
self.scene_load_progress_finished = true
|
|
end
|
|
end
|
|
|
|
function SceneLoadView:SetProgressValue(value, max_value)
|
|
self.curr_progress_value = value
|
|
self.progress_bar:SetValue(value, max_value)
|
|
self:SetLoadText(value)
|
|
if value >= 0.1 and not self.is_show_effect then
|
|
self.is_show_effect = true
|
|
if self.effectCon then
|
|
self.effectCon.gameObject:SetActive(true)
|
|
end
|
|
end
|
|
end
|
|
|
|
--设置底部的默认提示信息
|
|
function SceneLoadView:SetLoadText(value)
|
|
self.cur_value = value
|
|
if not self.wait_res_load then
|
|
self.showText.text = "加载中 " .. HtmlColorTxt(math.floor(value) .. "%", "#FFFFFF")
|
|
else
|
|
self.promptText.text = "预先加载场景资源可以让游戏体验更好哦(" .. math.floor(value) .. "%)"
|
|
end
|
|
end
|
|
|
|
--设置底部的默认提示信息
|
|
function SceneLoadView:SetDefaultTxt()
|
|
self.defaultTitleText.text = "健康提示忠告"
|
|
self.defaultText.text = "抵制不良游戏 拒绝盗版游戏 注意自我保护 谨防受骗上当 适度游戏益脑 沉迷游戏伤身 合理安排时间 享受健康生活"
|
|
end
|
|
|
|
function SceneLoadView:SetPromptTxt()
|
|
if self.wait_res_load then
|
|
return
|
|
end
|
|
|
|
--math.randomseed(os.time())
|
|
local cfg = Config.ConfigLoadView.LoadViewPromptMsg
|
|
local str = ""
|
|
local index = math.random(1, #cfg)
|
|
if cfg and cfg[index] then
|
|
str = cfg[index]
|
|
end
|
|
self.promptText.text = str
|
|
end
|
|
|
|
function SceneLoadView:StopSmoothTimer( )
|
|
if self.timer_id then
|
|
GlobalTimerQuest:CancelQuest(self.timer_id)
|
|
self.timer_id = nil
|
|
end
|
|
end
|
|
|
|
function SceneLoadView:StartSmoothTimer( step_time )
|
|
self:StopSmoothTimer()
|
|
self.smooth_max_value = 10
|
|
local function onTimer()
|
|
if self.curr_progress_value >= 100 then
|
|
self:StopSmoothTimer()
|
|
self.scene_load_progress_finished = true
|
|
return
|
|
end
|
|
if self.curr_progress_value > self.smooth_max_value then
|
|
local value = 0
|
|
for t, v in pairs(self.curr_progress_with_weight) do
|
|
value = value + v
|
|
end
|
|
--未加载完,停在99
|
|
if self.curr_progress_value > 98 and value < 100 then
|
|
return
|
|
end
|
|
--已经全部加载完了,则提高进度条加载速度
|
|
if value >= 100 and self.logic_step_time == self.real_step_time then
|
|
local faster_step = self.logic_step_time / 5
|
|
self:StartSmoothTimer(faster_step)
|
|
end
|
|
end
|
|
if self.last_progress_value == self.curr_progress_value then
|
|
self.curr_progress_value = self.curr_progress_value + 1
|
|
self:SetProgressValue(self.curr_progress_value,100)
|
|
end
|
|
self.last_progress_value = self.curr_progress_value
|
|
|
|
end
|
|
self.logic_step_time = 0.08
|
|
if SystemMemoryLevel.Cur == SystemMemoryLevel.Hight then
|
|
self.logic_step_time = 0.06
|
|
elseif SystemMemoryLevel.Cur == SystemMemoryLevel.Middle then
|
|
self.logic_step_time = 0.07
|
|
end
|
|
if SystemRuntimePlatform.IsWindows() then
|
|
self.logic_step_time = 0.01
|
|
end
|
|
self.real_step_time = step_time or self.logic_step_time
|
|
self.timer_id = GlobalTimerQuest:AddPeriodQuest(onTimer, self.real_step_time, -1)
|
|
end
|
|
|