PGRData/Script/launch/xlaunchui/XLaunchUi.lua

377 lines
No EOL
13 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local Creator = function()
local XUiLaunchUi = {}
function XUiLaunchUi:OnAwake()
--self.TxtProgressLoading.gameObject:SetActiveEx(true)
--CS.XLog.Error("new ui lua.")
self.UiLoading = self.UiLoading.gameObject
self.UiDownload = self.UiDownload.gameObject
self.UiVideoPlay = self.UiVideoPlay.gameObject
self.UiDownlosdTips = self.UiDownlosdTips.gameObject
self.UiLoading:SetActiveEx(false)
self.UiDownload:SetActiveEx(false)
self.UiVideoPlay:SetActiveEx(false)
self.UiDownlosdTips:SetActiveEx(false)
--self.BtnSkipVideo.CallBack = delegate(int i) { }
self.BtnMusicOn.CallBack = function()
self.BtnMusicOn.gameObject:SetActiveEx(false)
self.BtnMusicOff.gameObject:SetActiveEx(true)
end
self.BtnMusicOff.CallBack = function()
self.BtnMusicOn.gameObject:SetActiveEx(true)
self.BtnMusicOff.gameObject:SetActiveEx(false)
end
self.BtnBasic.CallBack = function() self:OnSelectBasic() end
self.BtnAll.CallBack = function() self:OnSelectAllDlc() end
self.BtnConfirmSelect.CallBack = function() self:OnConfirmSelect() end
--self.BtnVideo.CallBack = delegate (int i) { }
self.UpdateSize = 0
self.MBSize = 0
self.LastUpdateTime = 0
self.LastProgress = 0
self.CurrentDownloadSelect = 1
end
function XUiLaunchUi:OnStart()
self:HideHealthTip()
end
function XUiLaunchUi:HideHealthTip()
if self.UiLoading then -- 海外屏蔽健康提示十六字真言(不想改UI免得还得修改)
for i = 1, self.UiLoading.transform.childCount do
local child = self.UiLoading.transform:GetChild(i-1)
if child.name == "Text" then
child.gameObject:SetActiveEx(false)
end
end
end
end
function XUiLaunchUi:OnEnable()
CS.UnityEngine.Screen.sleepTimeout = CS.UnityEngine.SleepTimeout.NeverSleep
end
function XUiLaunchUi:OnDisable()
CS.UnityEngine.Screen.sleepTimeout = CS.UnityEngine.SleepTimeout.SystemSetting
end
function XUiLaunchUi:OnDestroy()
self.BtnMusicOn.CallBack = nil
self.BtnMusicOff.CallBack = nil
self.BtnBasic.CallBack = nil
self.BtnAll.CallBack = nil
self.BtnConfirmSelect.CallBack = nil
end
function XUiLaunchUi:OnGetEvents()
return { CS.XEventId.EVENT_LAUNCH_SETMESSAGE,
CS.XEventId.EVENT_LAUNCH_SETPROGRESS,
CS.XEventId.EVENT_LAUNCH_START_DOWNLOAD,
CS.XEventId.EVENT_LAUNCH_START_LOADING,
CS.XEventId.EVENT_LAUNCH_SHOW_DOWNLOAD_SELECT}
end
function XUiLaunchUi:OnNotify(evt, ...)
local args = { ... }
if evt == CS.XEventId.EVENT_LAUNCH_START_DOWNLOAD then
self.UiDownload:SetActiveEx(true)
self.UiLoading:SetActiveEx(false)
self.UpdateSize = args[1]
self.NeedUnit = (args[2] ~= false)
self.MBSize = self.NeedUnit and self.UpdateSize / 1024 / 1024 or self.UpdateSize
self.CustomFormat = args[3]
if self.NeedUnit then
self.TxtDownloadSize.text = string.format("(0MB/%dMB)", math.floor(self.MBSize))
else
self.TxtDownloadSize.text = string.format("(0/%d)", math.floor(self.MBSize))
self.TxtDownloadSpeed.text = ""
end
elseif evt == CS.XEventId.EVENT_LAUNCH_START_LOADING then
self.UiDownload:SetActiveEx(false)
self.UiLoading:SetActiveEx(true)
elseif evt == CS.XEventId.EVENT_LAUNCH_SETMESSAGE then
self.TxtMessageLoading.text = tostring(args[1])
elseif evt == CS.XEventId.EVENT_LAUNCH_SETPROGRESS then
self.VideoPlayer.targetCamera = CS.XUiManager.Instance.UiCamera
local progress = args[1]
if (self.UiLoading.activeInHierarchy) then
self.SliderLoading.value = progress
self.TxtProgressLoading.text = string.format("%d%%", math.floor(progress * 100))
elseif (self.UiDownload.activeInHierarchy) then
-- 版本
if (self.TxtAppVer ~= nil and self.TxtAppVer:Exist()) then
self.TxtAppVer.text = CS.XRemoteConfig.ApplicationVersion .. " (ApplicationVersion)"
end
if (self.TxtDocVer ~= nil and self.TxtDocVer:Exist()) then
self.TxtDocVer.text = CS.XRemoteConfig.DocumentVersion .. " (DocumentVersion)"
end
-- 速度
if self.NeedUnit and (CS.UnityEngine.Time.time - self.LastUpdateTime > 1) then
local kBSpeed = (progress - self.LastProgress) * (self.UpdateSize / 1024)
self.TxtDownloadSpeed.text = string.format("%dKB/S", math.floor(kBSpeed))
self.LastUpdateTime = CS.UnityEngine.Time.time
self.LastProgress = progress
end
self.SliderDownload.value = progress
self.TxtProgressDownload.text = string.format("%d%%", math.floor(progress * 100))
self.TxtDownloadSize.text = string.format("(%dMB/%dMB)", math.floor(self.MBSize * progress), math.floor(self.MBSize))
-- 进度
if self.NeedUnit then
self.TxtDownloadSize.text = string.format(self.CustomFormat or "(%dMB/%dMB)", math.floor(self.MBSize * progress), math.floor(self.MBSize))
else
self.TxtDownloadSize.text = string.format(self.CustomFormat or "(%d/%d)", math.floor(self.MBSize * progress), math.floor(self.MBSize))
end
elseif (self.UiVideoPlay.activeInHierarchy) then
self.TxtProgressVideoPlay.text = string.format("%d%%", math.floor(progress * 100))
end
elseif evt == CS.XEventId.EVENT_LAUNCH_SHOW_DOWNLOAD_SELECT then
self:SetupDownloadSelect(args)
end
end
function XUiLaunchUi:OnSelectBasic()
self.CurrentDownloadSelect = 1
self.BtnBasic:SetButtonState(CS.UiButtonState.Select)
self.BtnAll:SetButtonState(CS.UiButtonState.Normal)
--CS.XLog.Debug(" self.CurrentDownloadSelect == 1")
end
function XUiLaunchUi:OnSelectAllDlc()
self.CurrentDownloadSelect = 2
self.BtnBasic:SetButtonState(CS.UiButtonState.Normal)
self.BtnAll:SetButtonState(CS.UiButtonState.Select)
--CS.XLog.Debug(" self.CurrentDownloadSelect == 2")
end
function XUiLaunchUi:OnConfirmSelect()
self.UiDownlosdTips:SetActiveEx(false)
CS.XGameEventManager.Instance:Notify(CS.XEventId.EVENT_LAUNCH_DONE_DOWNLOAD_SELECT,self.CurrentDownloadSelect==2)
end
local GetSizeAndUnit = function(size)
local unit = "KB"
local num = size / 1024
if (num > 100) then
unit = "MB"
num = num / 1024
end
return num,unit
end
function XUiLaunchUi:SetupDownloadSelect(args)
self.UiDownlosdTips:SetActiveEx(true)
local baseUpdateSize = args[1]
local allUpdateSize = args[2]
if self.CurrentDownloadSelect == 1 then
self:OnSelectBasic()
else
self:OnSelectAllDlc()
end
local baseSize,baseUnit = GetSizeAndUnit(baseUpdateSize)
local allSize,allUnit = GetSizeAndUnit(allUpdateSize)
self.BtnBasic:SetNameByGroup(1,string.format("<b>%s%s</b>", tostring(math.ceil(baseSize)),baseUnit))
self.BtnAll:SetNameByGroup(1,string.format("<b>%s%s</b>", tostring(math.ceil(allSize)),allUnit))
end
function XUiLaunchUi:Ctor(name, uiProxy)
self.Name = name
self.UiProxy = uiProxy
self.Ui = uiProxy.Ui
end
function XUiLaunchUi:SetGameObject()
self.Transform = self.Ui.Transform
self.GameObject = self.Ui.GameObject
self.UiAnimation = self.Ui.UiAnimation
self:InitUiObjects()
end
--用于释放lua的内存
function XUiLaunchUi:OnRelease()
--self.Name = nil
self.UiProxy = nil
self.Ui = nil
self.Transform = nil
self.GameObject = nil
self.UiAnimation = nil
if self.Obj and self.Obj:Exist() then
local nameList = self.Obj.NameList
for _, v in pairs(nameList) do
self[v] = nil
end
self.Obj = nil
end
for k, v in pairs(self) do
local t = type(v)
if t == 'userdata' and CsXUiHelper.IsUnityObject(v) then
self[k] = nil
end
end
end
function XUiLaunchUi:SetUiSprite(image, spriteName, callBack)
self.UiProxy:SetUiSprite(image, spriteName, callBack)
end
--快捷隐藏界面(不建议使用)
function XUiLaunchUi:SetActive(active)
local temp = active and true or false
self.UiProxy:SetActive(temp)
end
--快捷关闭界面
function XUiLaunchUi:Close()
if self.UiProxy == nil then
XLog.Error(self.Name .. "重复Close")
else
self.UiProxy:Close()
end
end
--快捷移除UI,移除的UI不会播放进场、退场动画
function XUiLaunchUi:Remove()
if self.UiProxy then
self.UiProxy:Remove()
end
end
--注册点击事件
--function XUiLaunchUi:RegisterClickEvent(button, handle, clear)
--
-- clear = clear and true or false
-- self.UiProxy:RegisterClickEvent(button, function(eventData)
-- if handle then
-- handle(self, eventData)
-- end
-- end, clear)
--
--end
--返回指定名字的子节点的Component
--@name 子节点名称
--@type Component类型
function XUiLaunchUi:FindComponent(name, type)
return self.UiProxy:FindComponent(name, type)
end
--通过名字查找GameObject 例如:A/B/C
--@name 要查找的名字
function XUiLaunchUi:FindGameObject(name)
return self.UiProxy:FindGameObject(name)
end
--通过名字查找Transfrom 例如:A/B/C
--@name 要查找的名字
function XUiLaunchUi:FindTransform(name)
return self.UiProxy:FindTransform(name)
end
--打开一个子UI
--@childUIName 子UI名字
--@... 传到OnStart的参数
function XUiLaunchUi:OpenChildUi(childUIName, ...)
self.UiProxy:OpenChildUi(childUIName, ...)
end
--打开一个子UI,会关闭其他已显示的子UI
--@childUIName 子UI名字
--@... 传到OnStart的参数
function XUiLaunchUi:OpenOneChildUi(childUIName, ...)
self.UiProxy:OpenOneChildUi(childUIName, ...)
end
--关闭子UI
--@childUIName 子UI名字
function XUiLaunchUi:CloseChildUi(childUIName)
self.UiProxy:CloseChildUi(childUIName)
end
--查找子窗口对应的lua对象
--@childUiName 子窗口名字
function XUiLaunchUi:FindChildUiObj(childUiName)
local childUi = self.UiProxy:FindChildUi(childUiName)
if childUi then
return childUi.UiProxy.UiLuaTable
end
end
function XUiLaunchUi:InitChildUis()
if self.Ui == nil then
return
end
if not self.Ui.UiData.HasChildUi then
return
end
local childUis = self.Ui:GetAllChildUis()
if childUis == nil then
return
end
--子UI初始化完成后可在父UI通过【self.Child+子UI】名称的方式直接获取句柄
local childUiName
for k, v in pairs(childUis) do
childUiName = "Child" .. k
if self[childUiName] then
XLog.Error(string.format("%s该名字已被占用", childUiName))
else
self[childUiName] = v.UiProxy.UiLuaTable
end
end
end
function XUiLaunchUi:InitUiObjects()
self.Obj = self.Transform:GetComponent("UiObject")
if self.Obj ~= nil and self.Obj:Exist() then
for i = 0, self.Obj.NameList.Count - 1 do
self[self.Obj.NameList[i]] = self.Obj.ObjList[i]
end
end
end
--播放动画只支持Timeline模式
function XUiLaunchUi:PlayAnimation(animName, callback, beginCallback)
self.UiProxy:PlayAnimation(animName, callback, beginCallback)
end
--播放动画只支持Timeline模式, 增加Mask阻止操作打断动画
function XUiLaunchUi:PlayAnimationWithMask(animName, callback)
self.UiProxy:PlayAnimation(animName, function()
CS.XUiManager.Instance:SetMask(false)
if callback then
callback()
end
end, function()
CS.XUiManager.Instance:SetMask(true)
end)
end
return XUiLaunchUi
end
return Creator