PGRData/Script/matrix/xui/xuitrpg/xuitrpgpanel/XUiTRPGPanelTask.lua

329 lines
No EOL
10 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 DefaultRoleIcon = CS.XGame.ClientConfig:GetString("TRPGNotTargetDefaultRoleIcon")
local Second = 500
local TRPGPanelTaskEnableTime = CS.XGame.ClientConfig:GetFloat("TRPGPanelTaskEnableTime")
local TRPGPanelTaskDisableTime = CS.XGame.ClientConfig:GetFloat("TRPGPanelTaskDisableTime")
local CSXScheduleManagerScheduleForever = XScheduleManager.ScheduleForever
local CSXScheduleManagerUnSchedule = XScheduleManager.UnSchedule
local PlayAnimaState = {
Stop = 0,
AnimaOne = 1,
AnimaTwo = 2,
AnimaThree = 3,
AnimaFour = 4,
ShowNewPanel = 5
}
--当前的任务引导
local XUiTRPGPanelTask = XClass(nil, "XUiTRPGPanelTask")
function XUiTRPGPanelTask:Ctor(ui, rootUi)
self.GameObject = ui.gameObject
self.Transform = ui.transform
self.RootUi = rootUi
XTool.InitUiObject(self)
self.EndTimeSecond = 0
self.CurrPlayAnimaState = PlayAnimaState.Stop
self.IsPlaying = false
self.PlayAnimaPauseTime = 0 --动画播完一个后等待一段时间再播下一个
self:InitUi()
self:AutoAddListener()
self:Refresh()
end
function XUiTRPGPanelTask:AddEventListeners()
XEventManager.AddEventListener(XEventId.EVENT_TRPG_UPDATE_TARGET, self.Refresh, self)
XEventManager.AddEventListener(XEventId.EVENT_MOVIE_BEGIN, self.SetNewTargetTime, self)
XEventManager.AddEventListener(XEventId.EVENT_MOVIE_END, self.Refresh, self)
end
function XUiTRPGPanelTask:Delete()
XDataCenter.TRPGManager.ClearNewTargetTime()
end
function XUiTRPGPanelTask:OnEnable()
self.RootUi:PlayAnimation("PanelTaskEnable")
self:AddEventListeners()
self:Refresh()
end
function XUiTRPGPanelTask:OnDisable()
self:RePlayAnima()
XEventManager.RemoveEventListener(XEventId.EVENT_TRPG_UPDATE_TARGET, self.Refresh, self)
XEventManager.RemoveEventListener(XEventId.EVENT_MOVIE_BEGIN, self.SetNewTargetTime, self)
XEventManager.RemoveEventListener(XEventId.EVENT_MOVIE_END, self.Refresh, self)
end
function XUiTRPGPanelTask:InitUi()
self.Text = XUiHelper.TryGetComponent(self.Transform, "PanelNormal/Text", "Text")
self.Btn = XUiHelper.TryGetComponent(self.Transform, "Btn", "XUiButton")
self.TxtTask = XUiHelper.TryGetComponent(self.Transform, "PanelNormal/TxtTask", "Text")
self.RImgIcon = XUiHelper.TryGetComponent(self.Transform, "PanelNormal/RImgIcon", "RawImage")
self.ImgIcon = XUiHelper.TryGetComponent(self.Transform, "PanelNormal/Text/ImgIcon", "Image")
self.ImgEmpty = XUiHelper.TryGetComponent(self.Transform, "PanelNormal/ImgEmpty")
self.TxtNone = XUiHelper.TryGetComponent(self.Transform, "PanelNormal/ImgEmpty/TxtNone", "Text")
self.PanelNew = XUiHelper.TryGetComponent(self.Transform, "PanelNormal/PanelNew")
self.Effect = XUiHelper.TryGetComponent(self.Transform, "Effect")
self.PanelNormal = XUiHelper.TryGetComponent(self.Transform, "PanelNormal")
self.PanelComplete = XUiHelper.TryGetComponent(self.Transform, "PanelComplete")
if self.PanelNew then
self.PanelNew.gameObject:SetActiveEx(false)
end
end
function XUiTRPGPanelTask:AutoAddListener()
if self.Btn then
XUiHelper.RegisterClickEvent(self, self.Btn, self.OnBtnTaskClick)
end
end
--isNotPlayNewAnimaXUiTRPGTaskTip主动切换目标不播放新目标动画
function XUiTRPGPanelTask:Refresh(isNotPlayNewAnima)
if self:CheckStopRefresh() then return end
local currTargetLinkId = XDataCenter.TRPGManager.GetCurrTargetLinkId()
local targetLinkIsFinish = XDataCenter.TRPGManager.GetTargetLinkIsFinish(currTargetLinkId)
local currTargetId = XDataCenter.TRPGManager.GetCurrTargetId()
if self.Text then
if targetLinkIsFinish then
self.Text.text = ""
else
self.Text.text = XTRPGConfigs.GetTargetName(currTargetId)
end
end
local targetDesc = XTRPGConfigs.GetTargetDesc(currTargetId)
if self.TxtTask then
if targetLinkIsFinish then
self.TxtTask.text = ""
else
self.TxtTask.text = targetDesc
end
end
if self.ImgEmpty then
if targetLinkIsFinish then
if self.TxtNone then
self.TxtNone.text = targetDesc
end
self.ImgEmpty.gameObject:SetActiveEx(true)
else
self.ImgEmpty.gameObject:SetActiveEx(false)
end
end
--角色头像
if self.RImgIcon then
local areaIconPath = XTRPGConfigs.GetTargetAreaIcon(currTargetId)
if areaIconPath and "" ~= areaIconPath then
self.RImgIcon:SetRawImage(areaIconPath)
else
self.RImgIcon:SetRawImage(DefaultRoleIcon)
end
end
--卡牌图标
if self.ImgIcon and self.RootUi then
local cardIconPath = XTRPGConfigs.GetTargetCardIcon(currTargetId)
if cardIconPath then
self.RootUi:SetUiSprite(self.ImgIcon, cardIconPath)
self.ImgIcon.gameObject:SetActiveEx(true)
else
self.ImgIcon.gameObject:SetActiveEx(false)
end
end
self:RefreshPanelNew(isNotPlayNewAnima)
end
function XUiTRPGPanelTask:RefreshPanelNew(isNotPlayNewAnima)
local isPlayNewAnima, endTimeSecond = self:GetIsPlayNewAnima()
if isPlayNewAnima and not isNotPlayNewAnima then
self:PlayNewAnima(endTimeSecond)
end
end
function XUiTRPGPanelTask:PlayNewAnima(endTimeSecond)
if self:CheckStopRefresh() then
return
end
self:RePlayAnima()
self.Timer = CSXScheduleManagerScheduleForever(function()
self:RefreshNew(endTimeSecond)
end, Second, 0)
self:PlayOneAnima()
end
function XUiTRPGPanelTask:RefreshNew(endTimeSecond)
if self.IsPlaying then
return
end
local nowTime = XTime.GetServerNowTimestamp()
if nowTime < self.PlayAnimaPauseTime then
return
end
if self.CurrPlayAnimaState == PlayAnimaState.AnimaTwo then
self:PlayTwoAnima()
elseif self.CurrPlayAnimaState == PlayAnimaState.AnimaThree then
self:PlayThreeAnima()
elseif self.CurrPlayAnimaState == PlayAnimaState.AnimaFour then
self:PlayFourAnima()
elseif self.CurrPlayAnimaState == PlayAnimaState.ShowNewPanel then
self:RefreshNewTag(endTimeSecond)
end
end
function XUiTRPGPanelTask:PlayOneAnima()
if self:CheckStopRefresh() then
return
end
if self.RootUi then
self:SetIsPlaying(true)
self.RootUi:PlayAnimation("PanelTaskDisable", function()
self:SetIsPlaying(false)
self:SetCurrPlayAnimaState(PlayAnimaState.AnimaTwo)
end)
end
end
function XUiTRPGPanelTask:PlayTwoAnima()
if self:CheckStopRefresh() then
return
end
self:PanelNormalSwitchComplete(true)
self:ShowEffect(true)
if self.RootUi then
self:SetIsPlaying(true)
self.RootUi:PlayAnimation("PanelTaskEnable", function()
self:SetAnimaPauseTime(TRPGPanelTaskEnableTime)
self:SetIsPlaying(false)
self:SetCurrPlayAnimaState(PlayAnimaState.AnimaThree)
end)
end
end
function XUiTRPGPanelTask:PlayThreeAnima()
if self:CheckStopRefresh() then
return
end
if self.RootUi then
self:SetIsPlaying(true)
self.RootUi:PlayAnimation("PanelTaskDisable", function()
self:SetAnimaPauseTime(TRPGPanelTaskDisableTime)
self:ShowEffect(false)
self:SetIsPlaying(false)
self:SetCurrPlayAnimaState(PlayAnimaState.AnimaFour)
end)
end
end
function XUiTRPGPanelTask:PlayFourAnima()
if self:CheckStopRefresh() then
return
end
if self.RootUi then
self:PanelNormalSwitchComplete(false)
self:ShowEffect(true)
self:SetCurrPlayAnimaState(PlayAnimaState.ShowNewPanel)
self.RootUi:PlayAnimation("PanelTaskEnable")
end
end
function XUiTRPGPanelTask:GetIsPlayNewAnima()
self.EndTimeSecond = XDataCenter.TRPGManager.GetTaskPanelNewShowTime()
local newTargetTime = XDataCenter.TRPGManager.GetNewTargetTime()
local now = XTime.GetServerNowTimestamp()
local endTimeSecond = newTargetTime > 0 and newTargetTime + now or self.EndTimeSecond
return now < endTimeSecond, endTimeSecond
end
function XUiTRPGPanelTask:RefreshNewTag(endTimeSecond)
local now = XTime.GetServerNowTimestamp()
if now >= endTimeSecond then
self:ShowNew(false)
self:StopTimer()
XDataCenter.TRPGManager.ClearNewTargetTime()
return
end
self:ShowNew(true)
end
function XUiTRPGPanelTask:StopTimer()
if self.Timer then
CSXScheduleManagerUnSchedule(self.Timer)
self.Timer = nil
end
end
function XUiTRPGPanelTask:OnBtnTaskClick()
XLuaUiManager.Open("UiTRPGTaskTip")
end
function XUiTRPGPanelTask:SetNewTargetTime()
self:StopTimer()
local nowTime = XTime.GetServerNowTimestamp()
if nowTime < self.EndTimeSecond then
XDataCenter.TRPGManager.SetNewTargetTime(self.EndTimeSecond - nowTime)
end
self:ShowNew(false)
end
function XUiTRPGPanelTask:ShowNew(isShow)
if self.PanelNew then
self.PanelNew.gameObject:SetActiveEx(isShow)
end
self:ShowEffect(isShow)
end
function XUiTRPGPanelTask:ShowEffect(isShow)
if self.Effect then
self.Effect.gameObject:SetActiveEx(isShow)
end
end
function XUiTRPGPanelTask:CheckStopRefresh()
if XTool.UObjIsNil(self.GameObject) or not self.GameObject.activeInHierarchy or XDataCenter.MovieManager.IsPlayingMovie() then
self:RePlayAnima()
return true
end
return false
end
function XUiTRPGPanelTask:PanelNormalSwitchComplete(isShowComplete)
if self.PanelNormal then
self.PanelNormal.gameObject:SetActiveEx(not isShowComplete)
end
if self.PanelComplete then
self.PanelComplete.gameObject:SetActiveEx(isShowComplete)
end
end
function XUiTRPGPanelTask:SetCurrPlayAnimaState(animaState)
self.CurrPlayAnimaState = animaState
end
function XUiTRPGPanelTask:SetIsPlaying(isPlaying)
self.IsPlaying = isPlaying
end
function XUiTRPGPanelTask:SetAnimaPauseTime(pauseTime)
local nowTime = XTime.GetServerNowTimestamp()
self.PlayAnimaPauseTime = nowTime + pauseTime
end
function XUiTRPGPanelTask:RePlayAnima()
self:StopTimer()
self:ShowNew(false)
self:SetCurrPlayAnimaState(PlayAnimaState.Stop)
self:SetIsPlaying(false)
self:PanelNormalSwitchComplete(false)
end
return XUiTRPGPanelTask