627 lines
No EOL
24 KiB
Lua
627 lines
No EOL
24 KiB
Lua
local XUiLivWarmSoundsActivity = XLuaUiManager.Register(XLuaUi, "UiLivWarmSoundsActivity")
|
||
|
||
local XUiLivWarmSoundsActivityAudioGrid = require("XUi/XUiLivWarmActivity/XUiLivWarmSoundsActivityAudioGrid")
|
||
local XUiLivWarmSoundsActivityTaskPanel = require("XUi/XUiLivWarmActivity/XUiLivWarmSoundsActivityTaskPanel")
|
||
|
||
local GAME_STATE = { --游戏面板状态
|
||
EditorState = 1,
|
||
PlayState = 2,
|
||
}
|
||
|
||
local LONG_CLICK_OFFSET = 1 --长按触发时间
|
||
local MAX_AUDIO_PIECES = 5 --最大音频数量
|
||
local MAX_TIP_COUNT = 5 --最大提示数量
|
||
local PROGRESS_SPEED = CS.XGame.ClientConfig:GetInt("LivWarmSoundsActivityProgressSpeed") --播放进度条速度
|
||
|
||
function XUiLivWarmSoundsActivity:OnAwake()
|
||
self.AudioOrder = {} --存储调整的音频位置,拖拽的时候更新
|
||
self.AudioPieces = {} --音频片段
|
||
self.PanelSinglePopup = {}--PanelPopup代理传递给audio类控制
|
||
XTool.InitUiObjectByUi(self.PanelSinglePopup, self.PanelPopup)
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:OnStart()
|
||
self.PanelAllCd = self.Transform:FindTransform("PanelAllCd")
|
||
self.AudioAreaRectTransform = self.PanelAllCd:GetComponent("RectTransform")
|
||
self.ProgressBar = self.Transform:FindTransform("PanelMode"):FindTransform("ProgressBar")
|
||
self.ImgLan = self.Transform:FindTransform("PanelMode"):FindTransform("Lan")
|
||
self.Bar = self.Transform:FindTransform("PanelMode"):FindTransform("Bar")
|
||
self.Effect = self.Transform:FindTransform("PanelMode"):FindTransform("Effect")
|
||
self.EffectPan = self.Transform:FindTransform("RImgAirvinyl"):FindTransform("Effect")
|
||
self.ImgBlue = self.Transform:FindTransform("ImgBlue")
|
||
self.RImgQuietWave = self.Transform:FindTransform("RImgQuietWave")
|
||
self.Camera = CS.XUiManager.Instance.UiCamera
|
||
self.PanelReward = XUiLivWarmSoundsActivityTaskPanel.New(self.PanelCheckReward, self)
|
||
self.ActivityId = XDataCenter.LivWarmSoundsActivityManager.GetActivityId()
|
||
self.TxtWords.text = ""
|
||
self:SetPlayEff(false)
|
||
self:InitTimer()
|
||
self:InitAudioPieces()
|
||
self:AddListener()
|
||
self:InitBtnGroup()
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:OnEnable()
|
||
self:CheckActivityEnd()
|
||
self:CheckHitFaceHelp()
|
||
self:RefreshTitle() --标题刷新
|
||
self:RefreshBtnState() --按钮stage状态更新
|
||
self:RefreshTaskProgress() --任务进度
|
||
self.BtnGroupChapter:SelectIndex(XDataCenter.LivWarmSoundsActivityManager.GetTheNewestStage())
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:OnGetEvents()
|
||
return {
|
||
XEventId.EVENT_XLIVWARMSOUND_ACTIVITY_STAGE_AUDIO_CHANGE,
|
||
XEventId.EVENT_XLIVWARMSOUND_ACTIVITY_TIP_COUNT_CHANGE,
|
||
XEventId.EVENT_XLIVWARMSOUND_ACTIVITY_STAGE_AUDIO_CLIENT_CHANGE,
|
||
XEventId.EVENT_XLIVWARMSOUND_ACTIVITY_END,
|
||
XEventId.EVENT_TASK_SYNC,
|
||
}
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:OnNotify(evt, ...)
|
||
local args = { ... }
|
||
if evt == XEventId.EVENT_XLIVWARMSOUND_ACTIVITY_STAGE_AUDIO_CHANGE then
|
||
self:SwitchToPlayMode()
|
||
self:RefreshBtnState()
|
||
elseif evt == XEventId.EVENT_XLIVWARMSOUND_ACTIVITY_TIP_COUNT_CHANGE then
|
||
local nowTipCount = args[1]
|
||
self:RefreshTips(nowTipCount)
|
||
elseif evt == XEventId.EVENT_XLIVWARMSOUND_ACTIVITY_STAGE_AUDIO_CLIENT_CHANGE then
|
||
self:RefreshAudioInfo()
|
||
elseif evt == XEventId.EVENT_XLIVWARMSOUND_ACTIVITY_END then
|
||
self:CheckActivityEnd()
|
||
elseif evt == XEventId.EVENT_TASK_SYNC then
|
||
self:RefreshTaskProgress()
|
||
end
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:OnDisable()
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:OnDestroy()
|
||
XCountDown.UnBindTimer(self.PanelTitle, XCountDown.GTimerName.LivWarmSoundsActivity)
|
||
self:OnButtonStop()
|
||
self:DestroyTimerByTimerId(self.PlayTimerId)
|
||
self:DestroyTimerByTimerId(self.ProgressTimerId)
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:SetPlayEff(isEff)--处理特效相关的播放表现
|
||
if isEff then
|
||
self.Effect.gameObject:SetActiveEx(true)
|
||
self.RImgQuietWave.gameObject:SetActiveEx(false)
|
||
self.EffectPan.gameObject:SetActiveEx(true)
|
||
else
|
||
self.Effect.gameObject:SetActiveEx(false)
|
||
self.RImgQuietWave.gameObject:SetActiveEx(true)
|
||
self.EffectPan.gameObject:SetActiveEx(false)
|
||
end
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:CheckActivityEnd()
|
||
if self.IsEnd then
|
||
return
|
||
end
|
||
if XDataCenter.LivWarmSoundsActivityManager.OnActivityEnd() then
|
||
self.IsEnd = true
|
||
return
|
||
end
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:InitTimer()
|
||
local textTime = self.PanelTitle.transform:Find("TxtTime")
|
||
XCountDown.BindTimer(self.PanelTitle, XCountDown.GTimerName.LivWarmSoundsActivity, function(v)
|
||
if not XDataCenter.LivWarmActivityManager.CheckActivityIsOpen() then
|
||
return
|
||
end
|
||
textTime:GetComponent("Text").text = XUiHelper.GetTime(v, XUiHelper.TimeFormatType.ACTIVITY)
|
||
end)
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:InitBtnGroup()
|
||
self.DataSource = XDataCenter.LivWarmSoundsActivityManager.GetStages()
|
||
if XTool.IsTableEmpty(self.DataSource) then
|
||
return
|
||
end
|
||
local tabGroup = {}
|
||
for i = 1, #self.DataSource do
|
||
local uiButton
|
||
if i == 1 then
|
||
uiButton = self.BtnStage
|
||
else
|
||
local itemGo = CS.UnityEngine.Object.Instantiate(self.BtnStage.gameObject)
|
||
itemGo.transform:SetParent(self.BtnGroupChapter.transform, false)
|
||
uiButton = itemGo.transform:GetComponent("XUiButton")
|
||
end
|
||
uiButton:SetNameByGroup(0, XLivWarmSoundsActivityConfig.GetStageStageName(self.DataSource[i]))
|
||
table.insert(tabGroup, uiButton)
|
||
end
|
||
self.BtnGroupChapter:Init(tabGroup, function(tabIndex)
|
||
self:BtnStageClick(self.DataSource[tabIndex])
|
||
end)
|
||
end
|
||
|
||
--StageBtn的状态 播放状态下是不可点击的
|
||
function XUiLivWarmSoundsActivity:RefreshBtnState()
|
||
if XTool.IsTableEmpty(self.DataSource) or not self.BtnGroupChapter then
|
||
return
|
||
end
|
||
for i, v in pairs(self.DataSource) do
|
||
local uiButton = self.BtnGroupChapter:GetButtonByIndex(i)
|
||
local isPass, desc = XConditionManager.CheckCondition(XLivWarmSoundsActivityConfig.GetStageCondition(v), v)
|
||
if not isPass then
|
||
uiButton:SetDisable(true)
|
||
uiButton:SetNameByGroup(1, desc)
|
||
else
|
||
uiButton:SetDisable(false)
|
||
uiButton:SetNameByGroup(1, "")
|
||
end
|
||
end
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:AddListener()
|
||
self.BtnBack.CallBack = function()
|
||
self:OnBtnBackClick()
|
||
end
|
||
self.BtnMainUi.CallBack = function()
|
||
self:OnBtnMainUiClick()
|
||
end
|
||
self:BindHelpBtn(self.BtnHelp, "LivWarmSoundsActivityHelp")
|
||
|
||
self.BtnTestPlay.CallBack = function()
|
||
if self.BtnTestPlay.ButtonState == CS.UiButtonState.Disable then
|
||
return
|
||
end
|
||
XDataCenter.LivWarmSoundsActivityManager.SetStageAnswer(self.StageId, self.AudioOrder)
|
||
end
|
||
|
||
self.BtnReplay.CallBack = function()
|
||
self:SwitchToPlayMode(true)
|
||
end
|
||
|
||
self.BtnReplayStop.CallBack = function()
|
||
self.IsPlaying = false
|
||
end
|
||
|
||
self.BtnStop.CallBack = function()
|
||
self.IsPlaying = false
|
||
end
|
||
|
||
self.BtnHint.CallBack = function()
|
||
self:OnButtonHint()
|
||
end
|
||
|
||
self.BtnUrl.CallBack = function()
|
||
CS.UnityEngine.Application.OpenURL(XLivWarmSoundsActivityConfig.GetStageFinishUrl(self.StageId))
|
||
end
|
||
|
||
self:RegisterClickEvent(self.BtnTreasure, function()
|
||
self:Switch2RewardList()
|
||
end)
|
||
|
||
self:InitBtnLongClicks()
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:OnButtonStop()
|
||
self:SetPlayEff(false)
|
||
self:StopAudioPlay()
|
||
self:ResetProgress()
|
||
self:SwitchToEditorMode(true)
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:OnBtnBackClick()
|
||
self:Close()
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:OnBtnMainUiClick()
|
||
XLuaUiManager.RunMain()
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:CheckHitFaceHelp()
|
||
local IsShowHelp = XDataCenter.LivWarmSoundsActivityManager.CheckShowHelp()
|
||
if IsShowHelp then
|
||
XUiManager.ShowHelpTip("LivWarmSoundsActivityHelp")
|
||
end
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:RefreshTitle()
|
||
self.PanelTitle.transform:Find("RawImage"):GetComponent("RawImage"):SetRawImage(XLivWarmSoundsActivityConfig.GetActivityName(self.ActivityId))
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:OnButtonHint()
|
||
XDataCenter.LivWarmSoundsActivityManager.SetTipCount(self.StageId)
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:RefreshTips(count)
|
||
self:RefreshTipsBtn()
|
||
local tipCount = XDataCenter.LivWarmSoundsActivityManager.StageTipCount(self.StageId)
|
||
local hints = XLivWarmSoundsActivityConfig.GetStageHint(self.StageId)
|
||
if tipCount then
|
||
if count then
|
||
self["PanelHint" .. count].gameObject:SetActiveEx(true)
|
||
--self:PlayAnimation("PanelHint" .. count .. "Enable")
|
||
self["PanelHint" .. count].transform:Find("Text"):GetComponent("Text").text = hints[count]
|
||
else
|
||
for i = 1, MAX_TIP_COUNT do
|
||
if i <= tipCount then
|
||
self["PanelHint" .. i].gameObject:SetActiveEx(true)
|
||
--self:PlayAnimation("PanelHint" .. i .. "Enable")
|
||
self["PanelHint" .. i].transform:Find("Text"):GetComponent("Text").text = hints[i]
|
||
else
|
||
self["PanelHint" .. i].gameObject:SetActiveEx(false)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:RefreshTipsBtn()
|
||
--tips按钮刷新
|
||
local isMax = XDataCenter.LivWarmSoundsActivityManager.IsTipCountMax(self.StageId)
|
||
self.BtnHint:SetDisable(isMax, not isMax)
|
||
end
|
||
|
||
|
||
--------Audio 相关---------------
|
||
|
||
|
||
-- 初始化长按事件 图片拖拽替换,以及单点播放
|
||
function XUiLivWarmSoundsActivity:InitBtnLongClicks()
|
||
for i = 1, MAX_AUDIO_PIECES do
|
||
XUiButtonLongClick.New(self.AudioPieces[i].BtnCd, 10, self, nil, function(pressTime)
|
||
self:LongClick(i, pressTime)
|
||
end, self.OnBtnLongUp, false, nil, false, nil, LONG_CLICK_OFFSET)
|
||
end
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:LongClick(changeIndex, pressTime)
|
||
if changeIndex > #self.AudioOrder or (self.GameState ~= GAME_STATE.EditorState and XDataCenter.LivWarmSoundsActivityManager.IsStageFinished(self.StageId)) then
|
||
--音频片段可能会小于changeIndex
|
||
return
|
||
end
|
||
self.ChangeIndex = changeIndex
|
||
self.BtnReplacePanelCd.gameObject:SetActiveEx(true)
|
||
self:ReplaceBtnCd(self.AudioOrder[changeIndex])
|
||
self.BtnReplacePanelCd.transform.localPosition = self:GetPosition()
|
||
self:OnJudgeInsert()
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:OnBtnLongUp()
|
||
self.TargetIndex = self:OnJudgeInsert(true)
|
||
self:ChangeAudioOrder(self.ChangeIndex, self.TargetIndex)
|
||
self:ResetLongClick()
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:OnJudgeInsert(isUp) --判断音频将要插入的位置,isUp标识抬手动作
|
||
if not XTool.IsNumberValid(self.ChangeIndex) then
|
||
return
|
||
end
|
||
local replaceAnchoredPosition = self.BtnReplacePanelCd.transform.anchoredPosition
|
||
local dragPlayArea = self.DragPlayArea.transform.anchoredPosition;
|
||
local dragPlayX = { minX = dragPlayArea.x - self.DragPlayArea.transform.rect.width / 2, maxX = dragPlayArea.x + self.DragPlayArea.transform.rect.width / 2 }
|
||
local dragPlayY = { minY = dragPlayArea.y - self.DragPlayArea.transform.rect.height / 2, maxY = dragPlayArea.y + self.DragPlayArea.transform.rect.height / 2 }
|
||
if replaceAnchoredPosition.x >= dragPlayX.minX and replaceAnchoredPosition.x <= dragPlayX.maxX and replaceAnchoredPosition.y >= dragPlayY.minY and replaceAnchoredPosition.y <= dragPlayY.maxY then
|
||
if isUp then
|
||
self.AudioPieces[self.ChangeIndex]:PlaySound(true)
|
||
self:ResetLongClick()
|
||
else
|
||
self:OnSetBtnSelect()
|
||
end
|
||
return
|
||
end
|
||
local replaceAnchoredPosition = self.BtnReplacePanelCd.transform.anchoredPosition
|
||
local targetIndex = self.ChangeIndex
|
||
if self.AudioPieces[self.ChangeIndex].Transform.anchoredPosition.x < replaceAnchoredPosition.x then --往右边拖动
|
||
for i = self.ChangeIndex + 1, MAX_AUDIO_PIECES do
|
||
if self.AudioPieces[i].Transform.anchoredPosition.x < replaceAnchoredPosition.x then
|
||
targetIndex = i
|
||
end
|
||
end
|
||
else
|
||
for i = self.ChangeIndex - 1, 1,-1 do
|
||
if self.AudioPieces[i].Transform.anchoredPosition.x >= replaceAnchoredPosition.x then
|
||
targetIndex = i
|
||
end
|
||
end
|
||
end
|
||
self:OnSetBtnSelect(targetIndex)
|
||
return targetIndex
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:OnSetBtnSelect(selectIndex)
|
||
for i = 1, MAX_AUDIO_PIECES do
|
||
if i == selectIndex then
|
||
self.AudioPieces[i].BtnCd:SetButtonState(CS.UiButtonState.Select)
|
||
else
|
||
self.AudioPieces[i].BtnCd:SetButtonState(CS.UiButtonState.Normal)
|
||
end
|
||
end
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:ResetLongClick()
|
||
self:OnSetBtnSelect()
|
||
self.BtnReplacePanelCd.gameObject:SetActiveEx(false)
|
||
self.ChangeIndex = 0
|
||
self.TargetIndex = 0
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:ReplaceBtnCd(soundIndex)
|
||
self.BtnReplacePanelCd:SetRawImage(XLivWarmSoundsActivityConfig.GetSoundAttachedImgUrl(soundIndex))
|
||
self.BtnReplacePanelCd:SetName(XLivWarmSoundsActivityConfig.GetSoundRankNumber(soundIndex))
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:GetPosition()
|
||
local screenPoint
|
||
if CS.UnityEngine.Application.platform == CS.UnityEngine.RuntimePlatform.WindowsEditor or CS.UnityEngine.Application.platform == CS.UnityEngine.RuntimePlatform.WindowsPlayer then
|
||
screenPoint = CS.UnityEngine.Vector2(CS.UnityEngine.Input.mousePosition.x, CS.UnityEngine.Input.mousePosition.y)
|
||
else
|
||
screenPoint = CS.UnityEngine.Input.GetTouch(0).position
|
||
end
|
||
|
||
-- 设置拖拽
|
||
local hasValue, v2 = CS.UnityEngine.RectTransformUtility.ScreenPointToLocalPointInRectangle(self.AudioAreaRectTransform, screenPoint, self.Camera)
|
||
if hasValue then
|
||
return CS.UnityEngine.Vector3(v2.x, v2.y, 0)
|
||
else
|
||
return CS.UnityEngine.Vector3.zero
|
||
end
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:ChangeAudioOrder(changeIndex, targetIndex)
|
||
if XTool.IsTableEmpty(self.AudioOrder) or not XTool.IsNumberValid(targetIndex) or changeIndex == targetIndex then
|
||
return
|
||
end
|
||
local answer = XTool.Clone(self.AudioOrder)
|
||
local changeId = answer[changeIndex]
|
||
table.remove(answer, changeIndex)
|
||
table.insert(answer, targetIndex, changeId)
|
||
XDataCenter.LivWarmSoundsActivityManager.SetClientStageAnswer(self.StageId, answer)
|
||
self:RefreshTestBtnState(self.StageId, answer)
|
||
end
|
||
--拖拽结束--------------
|
||
--关卡点击
|
||
function XUiLivWarmSoundsActivity:BtnStageClick(stageId)
|
||
local isPass, desc = XConditionManager.CheckCondition(XLivWarmSoundsActivityConfig.GetStageCondition(stageId), stageId)
|
||
if not isPass then
|
||
XUiManager.TipMsg(desc)
|
||
return
|
||
end
|
||
|
||
if self.GameState == GAME_STATE.PlayState then
|
||
return
|
||
end
|
||
self:PlayAnimation("QieHuan")
|
||
self:RefreshAudioInfo(stageId)
|
||
self:RefreshTips()
|
||
self:SwitchToEditorMode()
|
||
end
|
||
|
||
--audio初始化
|
||
function XUiLivWarmSoundsActivity:InitAudioPieces()
|
||
for i = 1, MAX_AUDIO_PIECES do
|
||
if not self.AudioPieces[i] then
|
||
local audioObj
|
||
if i == 1 then
|
||
audioObj = self.BtnCd
|
||
else
|
||
audioObj = CS.UnityEngine.Object.Instantiate(self.BtnCd, self.PanelAllCd)
|
||
end
|
||
local audio = XUiLivWarmSoundsActivityAudioGrid.New(audioObj, self)
|
||
table.insert(self.AudioPieces, audio)
|
||
end
|
||
end
|
||
self.BtnReplacePanelCd.transform:SetAsLastSibling()
|
||
end
|
||
|
||
--audio信息刷新
|
||
function XUiLivWarmSoundsActivity:RefreshAudioInfo(stageId)
|
||
if stageId then
|
||
self.StageId = stageId
|
||
end
|
||
if not XTool.IsNumberValid(self.StageId) then
|
||
return
|
||
end
|
||
self.AudioOrder = XDataCenter.LivWarmSoundsActivityManager.GetStageAnswer(self.StageId)
|
||
self:RefreshAudioPieces()
|
||
self:RefreshTestBtnState(self.StageId, self.AudioOrder)
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:RefreshTestBtnState(stageId,audioOrder) --海外修改:根据是否排列正确刷新按钮状态
|
||
local flag = XDataCenter.LivWarmSoundsActivityManager.CheckStageAnswer(stageId, audioOrder)
|
||
if flag then
|
||
self.BtnTestPlay:SetButtonState(CS.UiButtonState.Normal)
|
||
else
|
||
self.BtnTestPlay:SetButtonState(CS.UiButtonState.Disable)
|
||
end
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:RefreshAudioPieces()
|
||
self:ResetAudioPieces()
|
||
for i, audioIndex in ipairs(self.AudioOrder) do
|
||
self.AudioPieces[i]:RefreshData(audioIndex, self.PanelSinglePopup, function(isSingleTouch)
|
||
--区分单点以及播放方法
|
||
if not isSingleTouch then
|
||
if self.AudioPieces[i + 1] then
|
||
self.AudioPieces[i + 1]:PlaySound()
|
||
end
|
||
end
|
||
end)
|
||
end
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:ResetAudioPieces()
|
||
if not XTool.IsTableEmpty(self.AudioPieces) then
|
||
for i, v in pairs(self.AudioPieces) do
|
||
v.GameObject:SetActiveEx(false)
|
||
end
|
||
end
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:StopAudioPlay()
|
||
if not XTool.IsTableEmpty(self.AudioPieces) then
|
||
for i, v in pairs(self.AudioPieces) do
|
||
v:StopPlaySound()
|
||
end
|
||
end
|
||
end
|
||
|
||
----------------Audio End----------------------
|
||
|
||
|
||
-----------布局刷新--------
|
||
function XUiLivWarmSoundsActivity:SwitchToEditorMode(noAnim)
|
||
self.GameState = GAME_STATE.EditorState
|
||
self:RefreshStateInfo(noAnim)
|
||
end
|
||
--客户端调试播放需要服务端验证后播放,重播不需要,重播使用isReplay标识
|
||
function XUiLivWarmSoundsActivity:SwitchToPlayMode(isReplay)
|
||
self.GameState = GAME_STATE.PlayState
|
||
--[[if XTool.IsNumberValid(self.StageId) then
|
||
if XDataCenter.LivWarmSoundsActivityManager.IsStageFinished(self.StageId) and not isReplay then
|
||
--重播不需要播放转场动画
|
||
-- self:PlayAnimationWithMask("AnimEnable2", function()
|
||
self:PlayBehaviour()
|
||
-- end)
|
||
else
|
||
self:PlayBehaviour()
|
||
end
|
||
end--]]
|
||
self:RefreshStateInfo(true)
|
||
self:PlayAllText()
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:PlayBehaviour()
|
||
--播放音频
|
||
if not XTool.IsTableEmpty(self.AudioPieces) then
|
||
self:StopAudioPlay()
|
||
self.IsPlaying = true
|
||
self:PlayAnimation("PlayMusic")
|
||
self:StartPlayTimer()
|
||
self.AudioPieces[1]:PlaySound() --播放音频从头开始
|
||
end
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:PlayAllText() --海外修改:显示CG完整文字
|
||
self.PanelPlayMask.gameObject:SetActiveEx(true)
|
||
self.TxtTypeWriterL.CompletedHandle = function()
|
||
self.PanelPlayMask.gameObject:SetActiveEx(false)
|
||
self.GameState = GAME_STATE.EditorState
|
||
end
|
||
self.TxtTypeWriterL:Play()
|
||
end
|
||
|
||
--一共两种大状态,播放状态以及编辑状态,每个大状下都有两个小状态,通关以及未通关状态
|
||
function XUiLivWarmSoundsActivity:RefreshStateInfo(noPlayEnableAnim)
|
||
if not self.isReplaceBgImg and XDataCenter.LivWarmSoundsActivityManager.IsAllStageFinished() then
|
||
self.isReplaceBgImg = true
|
||
self.RImgBg:SetRawImage(XLivWarmSoundsActivityConfig.GetActivityClearBgImg(self.ActivityId))
|
||
end
|
||
local isStageFinish = XDataCenter.LivWarmSoundsActivityManager.IsStageFinished(self.StageId)
|
||
if isStageFinish then
|
||
--if not noPlayEnableAnim then
|
||
self:PlayAnimation("AnimEnable")
|
||
--end
|
||
self.Transform:FindTransform("PanelPlay").gameObject:SetActiveEx(true)
|
||
self.Transform:FindTransform("PanelVinylRecord").gameObject:SetActiveEx(false)
|
||
self.TextFinishTip.text = XUiHelper.ConvertLineBreakSymbol(XLivWarmSoundsActivityConfig.GetStageFinishText(self.StageId))
|
||
self.RImgFinish:SetRawImage(XLivWarmSoundsActivityConfig.GetStageFinishImg(self.StageId))
|
||
self.BtnUrl.gameObject:SetActiveEx(XLivWarmSoundsActivityConfig.GetStageFinishUrl(self.StageId) ~= "" and true or false)
|
||
else
|
||
self.Transform:FindTransform("PanelPlay").gameObject:SetActiveEx(false)
|
||
self.Transform:FindTransform("PanelVinylRecord").gameObject:SetActiveEx(true)
|
||
end
|
||
end
|
||
|
||
--播放进度条处理
|
||
function XUiLivWarmSoundsActivity:RefreshProgress(count)
|
||
local BroadTestTime = XLivWarmSoundsActivityConfig.GetStageBroadTestTime(self.StageId)
|
||
local maxCount = (XScheduleManager.SECOND/PROGRESS_SPEED)*BroadTestTime --需要动画的总次数
|
||
if XDataCenter.LivWarmSoundsActivityManager.IsStageFinished(self.StageId) then
|
||
self.ImgBlue:GetComponent("Image").fillAmount = count / maxCount
|
||
else
|
||
local deltaWidth = (self.Bar.rect.width - self.ProgressBar.rect.width) / ((XScheduleManager.SECOND/PROGRESS_SPEED)*BroadTestTime) --进度条本身有宽度需要处理
|
||
self.ProgressBar.anchoredPosition = CS.UnityEngine.Vector2((self.ProgressBar.rect.width / 2 + deltaWidth * count), self.ProgressBar.anchoredPosition.y)
|
||
self.ImgLan:GetComponent("Image").fillAmount = count / maxCount
|
||
end
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:ResetProgress()
|
||
if XDataCenter.LivWarmSoundsActivityManager.IsStageFinished(self.StageId) then
|
||
self.ImgBlue:GetComponent("Image").fillAmount = 0
|
||
else
|
||
self.ProgressBar.anchoredPosition = CS.UnityEngine.Vector2((self.ProgressBar.rect.width / 2), self.ProgressBar.anchoredPosition.y)
|
||
self.ImgLan:GetComponent("Image").fillAmount = 0
|
||
end
|
||
end
|
||
|
||
--------布局刷新 End-----------
|
||
--任务进程
|
||
function XUiLivWarmSoundsActivity:RefreshTaskProgress()
|
||
local taskList = XDataCenter.TaskManager.GetLivWarmSoundsActivityFullTaskList()
|
||
local passCount, allCount = XDataCenter.TaskManager.GetTaskProgressByTaskList(taskList)
|
||
self.ImgJindu.fillAmount = passCount / allCount
|
||
self.TxtTaskProgress.text = CS.XTextManager.GetText("LivWarmTaskProgress", passCount, allCount)
|
||
self.ImgLingqu.gameObject:SetActiveEx(passCount == allCount)
|
||
self.ImgTaskRed.gameObject:SetActiveEx(XDataCenter.TaskManager.GetIsRewardForEx(TaskType.LivWarmSoundsActivity))
|
||
if self.PanelReward.GameObject.activeSelf then
|
||
self.PanelReward:UpdateRewardList()
|
||
end
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:Switch2RewardList()
|
||
self.PanelReward.GameObject:SetActiveEx(true)
|
||
self:PlayAnimation("PanelCheckRewardEnable")
|
||
self.PanelReward:UpdateRewardList()
|
||
end
|
||
|
||
-------------------------------------------------------计时器------------------------------------------------------------
|
||
function XUiLivWarmSoundsActivity:DestroyTimerByTimerId(id)
|
||
if XTool.IsNumberValid(id) then
|
||
XScheduleManager.UnSchedule(id)
|
||
end
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:StartPlayTimer()
|
||
self:DestroyTimerByTimerId(self.PlayTimerId)
|
||
self:DestroyTimerByTimerId(self.ProgressTimerId)
|
||
self.PlayTimerId = nil
|
||
self.ProgressTimerId = nil
|
||
self.BtnReplayStop.gameObject:SetActiveEx(true)
|
||
self.PanelPlayMask.gameObject:SetActiveEx(true)
|
||
self:SetPlayEff(true)
|
||
local loopCount = XLivWarmSoundsActivityConfig.GetStageBroadTestTime(self.StageId)
|
||
local progressCount = 0
|
||
self.ProgressTimerId = XScheduleManager.ScheduleForever(function()
|
||
progressCount = progressCount + 1
|
||
self:RefreshProgress(progressCount)
|
||
end, PROGRESS_SPEED, 0)
|
||
self.PlayTimerId = XScheduleManager.Schedule(function()
|
||
loopCount = loopCount - 1
|
||
self:PlayFun(loopCount)
|
||
end, XScheduleManager.SECOND, XLivWarmSoundsActivityConfig.GetStageBroadTestTime(self.StageId), 0)
|
||
end
|
||
|
||
|
||
function XUiLivWarmSoundsActivity:PlayFun(loopCount)
|
||
if loopCount <= 0 or not self.IsPlaying then
|
||
self:PlayAnimation("StopMusic")
|
||
self.PanelPlayMask.gameObject:SetActiveEx(false)
|
||
self.BtnReplayStop.gameObject:SetActiveEx(false)
|
||
XSoundManager.ResumeMusic()
|
||
self:OnButtonStop() --播放结束或打断播放需要切换状态
|
||
self:DestroyTimerByTimerId(self.PlayTimerId)
|
||
self:DestroyTimerByTimerId(self.ProgressTimerId)
|
||
end
|
||
end
|
||
|
||
function XUiLivWarmSoundsActivity:PlayTypeWriter(content)
|
||
self.TxtWords.text = content
|
||
self.Mask1.gameObject:SetActiveEx(true)
|
||
self.TxtTypeWriter.CompletedHandle = function()
|
||
self.Mask1.gameObject:SetActiveEx(false)
|
||
end
|
||
--self.TxtTypeWriter.Duration = string.Utf8Len(content) * XMovieConfigs.TYPE_WRITER_SPEED
|
||
self.TxtTypeWriter:Play()
|
||
end |