PGRData/Script/matrix/xui/xuiscenesettingmain/XBackgroundScene.lua
2024-09-01 22:49:41 +02:00

168 lines
No EOL
7.1 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 XBackgroundScene=XClass(nil,"XBackgroundScene")
local XQualityManager = CS.XQualityManager.Instance
local BatteryComponent = CS.XUiBattery
local DateStartTime = CS.XGame.ClientConfig:GetString("BackgroundChangeTimeStr")
local DateEndTime = CS.XGame.ClientConfig:GetString("BackgroundChangeTimeEnd")
local LowPowerValue = CS.XGame.ClientConfig:GetFloat("UiMainLowPowerValue")
function XBackgroundScene:Ctor(parent)
self.Parent=parent
end
---切换预览场景
function XBackgroundScene:ChangeScenePreview(sceneModeId,firstload)
local scenePath,modelPath = XSceneModelConfigs.GetSceneAndModelPathById(sceneModeId)
local _this=self
if not firstload then
self.Parent:PlayAnimation('Loading',function()
_this.Parent:LoadUiScene(scenePath, modelPath, function() _this:OnUiSceneLoaded(firstload) end, false)
end)
else
--第一次加载已经是从黑屏过度了,就不用在淡入淡出一次
self.Parent:LoadUiScene(scenePath,modelPath,function() _this:OnUiSceneLoaded(firstload) end, false)
end
end
function XBackgroundScene:OnUiSceneLoaded(firstload)
--加载新场景要刷新电池模式
self.CurBatteryMode=nil
--刷新右上角信息栏显示
self.Parent:RefreshRightTagPanel()
--刷新同步按钮
self.Parent:RefreshSyncBtnState()
if not firstload then
--执行淡出动画
self.Parent:PlayAnimation('Loading2')
end
--self.Parent:SetGameObject()
self:InitSceneRoot()
self:UpdateCamera()
if self:InitBatteryUi() then
self:UpdateBatteryMode()
end
-- 开启时钟
self.Parent:ReStartClockTime()
end
function XBackgroundScene:InitSceneRoot()
local root = self.Parent.UiModelGo.transform
self.CameraFar = self.Parent:FindVirtualCamera("CamFarMain")
self.CameraNear = self.Parent:FindVirtualCamera("CamNearMain")
self.CameraComponentFar = root:FindTransform("UiFarCamera"):GetComponent("Camera")
self.CameraComponentNear = root:FindTransform("UiNearCamera"):GetComponent("Camera")
self.UiModelParent = root:FindTransform("UiModelParent")
self.ChangeActionEffect = root:FindTransform("ChangeActionEffect")
end
function XBackgroundScene:InitBatteryUi()
self.animationRoot = self.Parent.UiSceneInfo.Transform:Find("Animations")
if XTool.UObjIsNil(self.animationRoot) then return false end
self.toChargeTimeLine = self.animationRoot:Find("ToChargeTimeLine")
self.toFullTimeLine = self.animationRoot:Find("ToFullTimeLine")
self.fullTimeLine = self.animationRoot:Find("FullTimeLine")
self.chargeTimeLine = self.animationRoot:Find("ChargeTimeLine")
self.toChargeTimeLine.gameObject:SetActiveEx(false)
self.toFullTimeLine.gameObject:SetActiveEx(false)
self.fullTimeLine.gameObject:SetActiveEx(false)
self.chargeTimeLine.gameObject:SetActiveEx(false)
return true
end
function XBackgroundScene:UpdateCamera()
self.CameraFar.gameObject:SetActiveEx(true)
self.CameraNear.gameObject:SetActiveEx(true)
end
function XBackgroundScene:UpdateBatteryMode()
if XTool.UObjIsNil(self.animationRoot) then return end
--先还原状态
self.toChargeTimeLine.gameObject:SetActiveEx(false)
self.toFullTimeLine.gameObject:SetActiveEx(false)
self.fullTimeLine.gameObject:SetActiveEx(false)
self.chargeTimeLine.gameObject:SetActiveEx(false)
local curSelectSceneId = self.Parent.SceneList:GetCurDisplaySceneId()
local particleGroupName = XDataCenter.PhotographManager.GetSceneTemplateById(curSelectSceneId).ParticleGroupName
local chargeAnimator = nil
if particleGroupName and particleGroupName ~= "" then
local chargeAnimatorTrans = self.Parent.UiSceneInfo.Transform:FindTransform(particleGroupName)
if chargeAnimatorTrans then
chargeAnimator = chargeAnimatorTrans:GetComponent("Animator")
else
XLog.Error("Can't Find \"" .. particleGroupName .. "\", Plase Check \"ParticleGroupName\" In Share/PhotoMode/Background.tab")
end
end
local type = XPhotographConfigs.GetBackgroundTypeById(curSelectSceneId)
if type == XPhotographConfigs.BackGroundType.PowerSaved then
if BatteryComponent.IsCharging then --充电状态
self:PlayBatteryModeAnimation(false,chargeAnimator)
XDataCenter.PhotographManager.UpdatePreviewState(true, true)
else
if BatteryComponent.BatteryLevel > LowPowerValue then -- 比较电量
self:PlayBatteryModeAnimation(false,chargeAnimator)
XDataCenter.PhotographManager.UpdatePreviewState(true, true)
else
self:PlayBatteryModeAnimation(true,chargeAnimator)
XDataCenter.PhotographManager.UpdatePreviewState(false, true)
end
end
else
--时间模式判断
local startTime = XTime.ParseToTimestamp(DateStartTime)
local endTime = XTime.ParseToTimestamp(DateEndTime)
local nowTime = XTime.ParseToTimestamp(CS.System.DateTime.Now:ToLocalTime():ToString())
if startTime > nowTime and nowTime > endTime then -- 比较时间
self:PlayBatteryModeAnimation(false,chargeAnimator)
XDataCenter.PhotographManager.UpdatePreviewState(true, true)
else
self:PlayBatteryModeAnimation(true,chargeAnimator)
XDataCenter.PhotographManager.UpdatePreviewState(false, true)
end
end
end
-- 执行与电池模式Timeline动画相关逻辑
--@ IsSetLow目标状态是否是低电量/夜晚模式
--@chargeAnimator: 传入的动画控制器
function XBackgroundScene:PlayBatteryModeAnimation(IsSetLow,chargeAnimator)
if self.CurBatteryMode==XPhotographConfigs.BackGroundState.Full then
if IsSetLow then
if chargeAnimator then chargeAnimator:Play("FullToLow") end
self.CurBatteryMode=XPhotographConfigs.BackGroundState.Low
self.toChargeTimeLine.gameObject:SetActiveEx(true)
else
if chargeAnimator then chargeAnimator:Play("Full") end
self.fullTimeLine.gameObject:SetActiveEx(true)
end
elseif self.CurBatteryMode==XPhotographConfigs.BackGroundState.Low then
if IsSetLow then
if chargeAnimator then chargeAnimator:Play("Low") end
self.chargeTimeLine.gameObject:SetActiveEx(true)
else
if chargeAnimator then chargeAnimator:Play("LowToFull") end
self.CurBatteryMode=XPhotographConfigs.BackGroundState.Full
self.toFullTimeLine.gameObject:SetActiveEx(true)
end
else --如果没有有效值,说明是第一次打开该场景,直接设置状态
if IsSetLow then
if chargeAnimator then chargeAnimator:Play("Low") end
self.CurBatteryMode=XPhotographConfigs.BackGroundState.Low
self.chargeTimeLine.gameObject:SetActiveEx(true)
else
if chargeAnimator then chargeAnimator:Play("Full") end
self.CurBatteryMode=XPhotographConfigs.BackGroundState.Full
self.fullTimeLine.gameObject:SetActiveEx(true)
end
end
end
return XBackgroundScene