forked from endernon/PGRData
240 lines
No EOL
6.3 KiB
Lua
240 lines
No EOL
6.3 KiB
Lua
local XUiNewbieTaskAnim = XClass(nil, "XUiNewbieTaskAnim")
|
||
local XNewbieTaskAnimPlayer = require("XEntity/XNewbieTask/XNewbieTaskAnimPlayer")
|
||
local XUiMultClickHelper = require("XUi/XUiCommon/XUiMultClickHelper")
|
||
|
||
local NewbieTaskAnimClickInterval = XUiHelper.GetClientConfig("NewbieTaskAnimClickInterval", XUiHelper.ClientConfigType.Float)
|
||
local NewbieTaskAnimMultClickCountLimit = XUiHelper.GetClientConfig("NewbieTaskAnimMultClickCountLimit", XUiHelper.ClientConfigType.Int)
|
||
local NewbieTaskAnimDelayInterval = XUiHelper.GetClientConfig("NewbieTaskAnimDelayInterval", XUiHelper.ClientConfigType.Float)
|
||
|
||
function XUiNewbieTaskAnim:Ctor(ui, rootUi)
|
||
self.GameObject = ui.gameObject
|
||
self.Transform = ui.transform
|
||
self.RootUi = rootUi
|
||
XTool.InitUiObject(self)
|
||
XUiHelper.RegisterClickEvent(self, self.BtnClick, self.OnBtnClick)
|
||
self.PanelLayout.gameObject:SetActiveEx(false)
|
||
|
||
-- 播放器
|
||
---@type XNewbieTaskAnimPlayer
|
||
self.AnimPlayer = XNewbieTaskAnimPlayer.New(self, 0, NewbieTaskAnimDelayInterval)
|
||
local playerData = XDataCenter.NewbieTaskManager.GetNewbieTaskAnimPlayerData()
|
||
self.AnimPlayer:SetPlayerData(playerData)
|
||
|
||
self.MultClickHelper = XUiMultClickHelper.New(self, NewbieTaskAnimClickInterval, NewbieTaskAnimMultClickCountLimit)
|
||
|
||
-- 播放队列只播放优先级最高的动画
|
||
self:SetPlayOne(true)
|
||
|
||
self:InitIdleTab()
|
||
end
|
||
|
||
function XUiNewbieTaskAnim:LoadSpine()
|
||
local panelSpine = self.RootUi.PanelSpine
|
||
local spinePath = XUiHelper.GetClientConfig("UiNewbieTaskSailika01", XUiHelper.ClientConfigType.String)
|
||
self.Animator = panelSpine:LoadSpinePrefab(spinePath).transform:GetComponent("Animator")
|
||
end
|
||
|
||
function XUiNewbieTaskAnim:InitIdleTab()
|
||
self.IdleTabs = XNewbieTaskConfigs.GetAnimConfigByConditionId(XNewbieEventType.IDLE)
|
||
end
|
||
|
||
function XUiNewbieTaskAnim:OnEnable()
|
||
self:LoadSpine()
|
||
self:StartTimer()
|
||
|
||
if self.AnimPlayer then
|
||
self.AnimPlayer:OnEnable()
|
||
end
|
||
|
||
if self.MultClickHelper then
|
||
self.MultClickHelper:OnEnable()
|
||
end
|
||
|
||
local playList = XDataCenter.NewbieTaskManager.GetPlayElements()
|
||
if not playList then
|
||
return
|
||
end
|
||
|
||
self.AnimPlayer:SetPlayList(playList)
|
||
|
||
self.Enable = true
|
||
end
|
||
|
||
function XUiNewbieTaskAnim:OnDisable()
|
||
self:StopTimer()
|
||
|
||
if self.AnimPlayer then
|
||
self.AnimPlayer:OnDisable()
|
||
end
|
||
|
||
if self.MultClickHelper then
|
||
self.MultClickHelper:OnDisable()
|
||
end
|
||
|
||
self:SoundStop()
|
||
|
||
self.Enable = false
|
||
end
|
||
|
||
function XUiNewbieTaskAnim:OnDestroy()
|
||
self:StopTimer()
|
||
|
||
if self.AnimPlayer then
|
||
self.AnimPlayer:OnDestroy()
|
||
end
|
||
|
||
if self.MultClickHelper then
|
||
self.MultClickHelper:OnDestroy()
|
||
end
|
||
-- 重置播放数据
|
||
XDataCenter.NewbieTaskManager.ResetPlayerData()
|
||
self.Enable = false
|
||
end
|
||
|
||
function XUiNewbieTaskAnim:Update()
|
||
if not self.Enable then
|
||
return
|
||
end
|
||
|
||
local dt = CS.UnityEngine.Time.deltaTime
|
||
|
||
if self.AnimPlayer then
|
||
self.AnimPlayer:Update(dt)
|
||
end
|
||
|
||
if self.MultClickHelper then
|
||
self.MultClickHelper:Update(dt)
|
||
end
|
||
|
||
-- 当有多个Idle时,取第一Idle做判断
|
||
if self.IdleTabs and self.IdleTabs[1] then
|
||
local idle = self.IdleTabs[1]
|
||
if self.AnimPlayer and self.AnimPlayer:CheckIsPlayIdle(idle.ConditionParam) then
|
||
-- 根据权重随机取一个Idle
|
||
local config = XDataCenter.NewbieTaskManager.WeightRandomSelect(self.IdleTabs)
|
||
if self.AnimPlayer:Play(config) then
|
||
self.AnimPlayer.LastPlayTime = -1
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
-- 播放
|
||
function XUiNewbieTaskAnim:Play(element)
|
||
if not element then
|
||
return
|
||
end
|
||
|
||
self:ShowContent(element.Config.CvContent)
|
||
|
||
if element.Config.CvId and element.Config.CvId > 0 then
|
||
self:PlaySound(element.Config.CvId)
|
||
end
|
||
|
||
local actionId = element.Config.ActionId
|
||
if actionId then
|
||
self:PlayAnimation(actionId)
|
||
end
|
||
|
||
local effectPath = element.Config.EffectPath
|
||
if effectPath then
|
||
self:PlayEffect(effectPath)
|
||
end
|
||
end
|
||
|
||
-- 播放动画
|
||
function XUiNewbieTaskAnim:PlayAnimation(actionId)
|
||
if not XTool.UObjIsNil(self.Animator) then
|
||
self.Animator:SetTrigger(actionId)
|
||
end
|
||
end
|
||
|
||
-- 播放音频
|
||
function XUiNewbieTaskAnim:PlaySound(cvId)
|
||
self:SoundStop()
|
||
self.AudioInfo = CS.XAudioManager.PlaySound(cvId)
|
||
end
|
||
|
||
-- 显示对白
|
||
function XUiNewbieTaskAnim:ShowContent(content)
|
||
self.PanelLayout.gameObject:SetActiveEx(content ~= nil)
|
||
self.CvContent.text = XUiHelper.ConvertLineBreakSymbol(content)
|
||
end
|
||
|
||
-- 播放特效
|
||
function XUiNewbieTaskAnim:PlayEffect(effectPath)
|
||
local panelSpine = self.RootUi.PanelSpine
|
||
self.EffectGo = panelSpine.gameObject:LoadPrefab(effectPath)
|
||
end
|
||
|
||
function XUiNewbieTaskAnim:OnStop()
|
||
self:SoundStop()
|
||
-- 隐藏对白
|
||
self.PanelLayout.gameObject:SetActiveEx(false)
|
||
-- 销毁特效
|
||
if self.EffectGo then
|
||
CS.UnityEngine.GameObject.Destroy(self.EffectGo)
|
||
end
|
||
end
|
||
|
||
function XUiNewbieTaskAnim:SoundStop()
|
||
if self.AudioInfo then
|
||
self.AudioInfo:Stop()
|
||
self.AudioInfo = nil
|
||
end
|
||
end
|
||
|
||
function XUiNewbieTaskAnim:StartTimer()
|
||
if self.Timer then
|
||
self:StopTimer()
|
||
end
|
||
|
||
self.Timer = XScheduleManager.ScheduleForever(function()
|
||
self:Update()
|
||
end,0)
|
||
end
|
||
|
||
function XUiNewbieTaskAnim:StopTimer()
|
||
if self.Timer then
|
||
XScheduleManager.UnSchedule(self.Timer)
|
||
self.Timer = nil
|
||
end
|
||
end
|
||
|
||
function XUiNewbieTaskAnim:SetPlayOne(bPlayOne)
|
||
self.AnimPlayer:SetPlayOne(bPlayOne)
|
||
end
|
||
|
||
-- 点击
|
||
function XUiNewbieTaskAnim:OnBtnClick()
|
||
if self.MultClickHelper then
|
||
self.MultClickHelper:Click()
|
||
end
|
||
end
|
||
|
||
-- 点击回调
|
||
function XUiNewbieTaskAnim:OnMultClick(clickTimes)
|
||
local config
|
||
if self.AnimPlayer:IsPlaying() then
|
||
return
|
||
end
|
||
|
||
config = XDataCenter.NewbieTaskManager.GetPlayElementsByClick(clickTimes)
|
||
self.AnimPlayer:Play(config)
|
||
end
|
||
|
||
-- 主动触发的动画(该方法适用于一个conditionId只有一个动画)
|
||
function XUiNewbieTaskAnim:ActiveTriggerAnimation(conditionId)
|
||
local configs
|
||
if self.AnimPlayer:IsPlaying() then
|
||
return
|
||
end
|
||
|
||
configs = XNewbieTaskConfigs.GetAnimConfigByConditionId(conditionId)
|
||
if XTool.IsTableEmpty(configs) then
|
||
return
|
||
end
|
||
self.AnimPlayer:Play(configs[1])
|
||
end
|
||
|
||
return XUiNewbieTaskAnim |