PGRData/Script/matrix/xui/xuimoewar/XUiMoeWarMain.lua

381 lines
No EOL
14 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 ButtonStateNormal = CS.UiButtonState.Normal
local ButtonStateSelect = CS.UiButtonState.Select
local ButtonStateDisable = CS.UiButtonState.Disable
local CSXTextManagerGetText = CS.XTextManager.GetText
local MaxMatchCount = 5
local XUiMoeWarMain = XLuaUiManager.Register(XLuaUi, "UiMoeWarMain")
function XUiMoeWarMain:OnStart()
self:RegisterButtonEvent()
self:InitRedPoint()
self:InitUi()
end
function XUiMoeWarMain:OnEnable()
self.AssetActivityPanel:Refresh(self.ActInfo.CurrencyId)
self:StartTimer()
self:RefreshPreparation()
self:RefreshVotePanel()
self:CheckRedPoint()
end
function XUiMoeWarMain:OnDisable()
self:StopTimer()
end
function XUiMoeWarMain:OnGetEvents()
return {
XEventId.EVENT_MOE_WAR_PREPARATION_UPDATE,
XEventId.EVENT_MOE_WAR_UPDATE,
}
end
function XUiMoeWarMain:OnNotify(event, ...)
local args = { ... }
if event == XEventId.EVENT_MOE_WAR_PREPARATION_UPDATE then
self:RefreshPreparation()
elseif event == XEventId.EVENT_MOE_WAR_UPDATE then
self:RefreshVotePanel()
end
end
function XUiMoeWarMain:InitRedPoint()
self.BtnPrepareRedPointEventId = XRedPointManager.AddRedPointEvent(self.BtnPrepare, self.OnPrepareRedPointEvent, self, { XRedPointConditions.Types.CONDITION_MOEWAR_PREPARATION })
XRedPointManager.AddRedPointEvent(self.BtnTask,self.OnTaskRedPointEvent,self,{XRedPointConditions.Types.CONDITION_MOEWAR_TASK})
XRedPointManager.AddRedPointEvent(self.BtnReward,self.OnGachaRedPointEvent,self,{XRedPointConditions.Types.CONDITION_MOEWAR_DRAW})
end
function XUiMoeWarMain:InitUi()
self.ActInfo = XDataCenter.MoeWarManager.GetActivityInfo()
self.TxtName.text = self.ActInfo.Name
self.AssetActivityPanel = XUiPanelActivityAsset.New(self.PanelSpecialTool)
for i = 1,#self.ActInfo.CurrencyId do
XDataCenter.ItemManager.AddCountUpdateListener(self.ActInfo.CurrencyId[i], function()
self.AssetActivityPanel:Refresh(self.ActInfo.CurrencyId)
end, self.AssetActivityPanel)
end
self.ItemGridList = {}
local showItems = XMoeWarConfig.GetShowItems()
for i = 1,#showItems do
if self.ItemGrid then
local obj = CS.UnityEngine.GameObject.Instantiate(self.ItemGrid,self.ItemContent)
local grid = XUiGridCommon.New(self,obj)
local itemTemplate = XDataCenter.ItemManager.GetItemTemplate(showItems[i])
table.insert(self.ItemGridList,grid)
grid:Refresh(itemTemplate)
end
end
if self.ItemGrid then
self.ItemGrid.gameObject:SetActiveEx(false)
end
--self.BtnVote:SetName(CS.XTextManager.GetText("MoeWarGoVote"))
self.BtnRank:SetName(CS.XTextManager.GetText("MoeWarRankName"))
self.BtnRole:SetName(CS.XTextManager.GetText("MoeWarIntroduceName"))
self.BtnSchedule:SetName(CS.XTextManager.GetText("MoeWarGameName"))
self.BtnActivity:SetNameByGroup(0,CS.XTextManager.GetText("MoeWarWebName"))
self.BtnActivity:SetNameByGroup(1,CS.XTextManager.GetText("MoeWarWebNameEng"))
self.BtnReward:SetNameByGroup(0,CS.XTextManager.GetText("MoeWarRewardName"))
self.BtnReward:SetNameByGroup(1,CS.XTextManager.GetText("MoeWarRewardNameEng"))
self.BtnShop:SetNameByGroup(0,CS.XTextManager.GetText("MoeWarGachaName"))
self.BtnShop:SetNameByGroup(1,CS.XTextManager.GetText("MoeWarGachaNameEng"))
self.BtnTask:SetNameByGroup(0,CS.XTextManager.GetText("MoeWarTaskName"))
self.BtnTask:SetNameByGroup(1,CS.XTextManager.GetText("MoeWarTaskNameEng"))
self.TxtRewardMain = self.Transform:Find("SafeAreaContentPane/PanelAll/PanelReward/Text"):GetComponent("Text")
if self.TxtRewardMain then
local text = CS.XTextManager.GetText("MoeWarMainText")
self.TxtRewardMain.text = string.gsub(text, "\\n", "\n")
end
self:InitBtnPrepare()
self:RefreshActivityTime()
self:RefreshVoteTime()
end
function XUiMoeWarMain:InitBtnPrepare()
local preparationActivityId = XMoeWarConfig.GetPreparationActivityIdInTime()
if not preparationActivityId then
return
end
local activityName = XMoeWarConfig.GetPreparationActivityName(preparationActivityId)
local smallTitle = CSXTextManagerGetText("MoeWarBtnPrepareSmallTitle")
self.BtnPrepare:SetNameByGroup(0, activityName)
self.BtnPrepare:SetNameByGroup(1, smallTitle)
end
function XUiMoeWarMain:RegisterButtonEvent()
self.BtnMainUi.CallBack = function()
XLuaUiManager.RunMain()
end
self.BtnBack.CallBack = function()
self:Close()
end
self.BtnShop.CallBack = function()
local gachaSkipId = XMoeWarConfig.GetGachaSkipId()
if gachaSkipId then
XFunctionManager.SkipInterface(gachaSkipId)
end
end
self.BtnActivity.CallBack = function()
local webUrl = XMoeWarConfig.GetWebUrl()
if webUrl then
if string.find(webUrl, "eden") ~= nil then -- 伊甸文化跳转
local uid = XUserManager.UserId
local serverId = CS.XHeroBdcAgent.ServerId
if uid and uid ~= "" then
if serverId and serverId ~= "" then
CS.UnityEngine.Application.OpenURL(webUrl.."?uid="..uid.."&serverId="..serverId)
else
CS.UnityEngine.Application.OpenURL(webUrl.."?uid="..uid)
end
else
CS.UnityEngine.Application.OpenURL(webUrl)
end
else
CS.UnityEngine.Application.OpenURL(webUrl)
end
end
end
self.BtnReward.CallBack = function()
XLuaUiManager.Open("UiMoeWarShop")
end
self.BtnWelfare.CallBack = function()
local rewardSkipId = XMoeWarConfig.GetRewardSkipId()
if rewardSkipId then
XFunctionManager.SkipInterface(rewardSkipId)
end
end
self.BtnTask.CallBack = function()
XLuaUiManager.Open("UiMoeWarTask")
end
self.BtnRank.CallBack = function()
XLuaUiManager.Open("UiMoeWarRankingList")
end
self.BtnRole.CallBack = function()
XLuaUiManager.Open("UiMoeWarMessage")
end
self.BtnSchedule.CallBack = function()
XLuaUiManager.Open("UiMoeWarSchedule")
end
self.BtnPrepare.CallBack = function()
XLuaUiManager.Open("UiMoeWarPreparation")
end
self.BtnPublicity.CallBack = function()
self:OnClickBtnVote()
end
self.BtnVote.CallBack = function()
self:OnClickBtnVote()
end
self.BtnParkour.CallBack = function()
XDataCenter.MoeWarManager.JumpToParkour()
end
if self.BtnHelp then
local mainHelpId = XMoeWarConfig.GetMainHelpId()
self.BtnHelp.CallBack = function ()
if mainHelpId > 0 then
local template = XHelpCourseConfig.GetHelpCourseTemplateById(mainHelpId)
XUiManager.ShowHelpTip(template.Function)
end
end
self.BtnHelp.gameObject:SetActiveEx(mainHelpId > 0)
end
end
function XUiMoeWarMain:OnClickBtnVote()
local match = XDataCenter.MoeWarManager.GetCurMatch()
if match and match:GetType() == XMoeWarConfig.MatchType.Publicity and (match:GetSessionId() ~= XMoeWarConfig.SessionType.GameInAudition) then
local index = 1
--local index = XDataCenter.MoeWarManager.GetDefaultSelect()
local saveKey = string.format("%s_%s_%d_%d",XMoeWarConfig.MOE_WAR_VOTE_ANIMATION_RECORD,tostring(XPlayer.Id),match:GetSessionId(),index)
local data = XSaveTool.GetData(saveKey)
local isSkip = XDataCenter.MoeWarManager.IsSelectSkip() or false
if not data and not isSkip then
XDataCenter.MoeWarManager.EnterAnimation(match:GetPairList()[index],match,function()
XDataCenter.MoeWarManager.OpenVotePanel(index)
XLuaUiManager.Remove("UiMoeWarAnimation")
end)
XSaveTool.SaveData(saveKey,1)
else
XDataCenter.MoeWarManager.OpenVotePanel(index)
end
else
XDataCenter.MoeWarManager.OpenVotePanel()
end
end
function XUiMoeWarMain:StartTimer()
if self.Timer then
self:StopTimer()
end
self.Timer = XScheduleManager.ScheduleForever(function()
if XTool.UObjIsNil(self.TxtTime) then
self:StopTimer()
return
end
self:RefreshVoteTime()
self:RefreshActivityTime()
end, XScheduleManager.SECOND, 0)
end
function XUiMoeWarMain:StopTimer()
if self.Timer then
XScheduleManager.UnSchedule(self.Timer)
self.Timer = nil
end
end
function XUiMoeWarMain:RefreshVotePanel()
local match = XDataCenter.MoeWarManager.GetCurMatch()
if not match then return end
local desc = match:GetDesc()
local matchType = match:GetType()
local session = match:GetSessionId()
self.TxtVoteTitle.text = desc[3]
self.ImgCover:SetRawImage(match:GetCoverImg())
if matchType == XMoeWarConfig.MatchType.Publicity and session == XMoeWarConfig.SessionType.Game3In1 then
self.Group01.gameObject:SetActiveEx(false)
self.Group02.gameObject:SetActiveEx(true)
self.Group03.gameObject:SetActiveEx(false)
self.PanelSchedule.gameObject:SetActiveEx(false)
local playerEntity = XDataCenter.MoeWarManager.GetPlayer(match:GetPairList()[1].WinnerId)
self.ImgVictoryHead:SetRawImage(playerEntity:GetCircleHead())
self.TxtVictoryName.text = playerEntity:GetName()
elseif session == XMoeWarConfig.SessionType.GameInAudition or session == XMoeWarConfig.SessionType.Game6In3 or (session == XMoeWarConfig.SessionType.Game3In1 and matchType == XMoeWarConfig.MatchType.Voting) then
self.Group01.gameObject:SetActiveEx(false)
self.Group02.gameObject:SetActiveEx(false)
self.Group03.gameObject:SetActiveEx(true)
self.TxtSingleTitle.text = desc[1]
self.TxtSingleState.text = desc[2]
else
self.Group01.gameObject:SetActiveEx(true)
self.Group02.gameObject:SetActiveEx(false)
self.Group03.gameObject:SetActiveEx(false)
self.TxtWinProgress.text = desc[1]
self.TxtFailProgress.text = desc[2]
end
end
function XUiMoeWarMain:RefreshVoteTime()
local match = XDataCenter.MoeWarManager.GetCurMatch()
if not match then return end
local endTime = match:GetEndTime()
local now = XTime.GetServerNowTimestamp()
local offset = endTime - now
if match:GetVoteEnd() and (not match:GetResultOut()) and match:GetType() == XMoeWarConfig.MatchType.Voting then
self.TxtVoteTime.text = CS.XTextManager.GetText("MoeWarMatchVoteNoResult")
else
self.TxtVoteTime.text = XUiHelper.GetTime(offset, XUiHelper.TimeFormatType.CHALLENGE)
end
self.BtnVote.gameObject:SetActiveEx(match:GetType() == XMoeWarConfig.MatchType.Voting)
self.BtnPublicity.gameObject:SetActiveEx(match:GetType() == XMoeWarConfig.MatchType.Publicity)
end
function XUiMoeWarMain:RefreshActivityTime()
local endTime = XDataCenter.MoeWarManager.GetActivityEndTime()
local now = XTime.GetServerNowTimestamp()
local offset = endTime - now
if offset <= 0 then
XLuaUiManager.RunMain()
XUiManager.TipText("MoeWarActivityOver")
self:StopTimer()
return
end
self.TxtTime.text = XUiHelper.GetTime(offset,XUiHelper.TimeFormatType.ACTIVITY)
end
function XUiMoeWarMain:RefreshPreparation()
local preparationActivityId = XMoeWarConfig.GetPreparationActivityIdInTime()
local defaultPreparationActivityId = XMoeWarConfig.GetPreparationActivityIdInTime(true)
local timeId = preparationActivityId and XMoeWarConfig.GetPreparationActivityTimeId(preparationActivityId)
--活动结束时使用最后一个结束的活动id显示
local matchIds = defaultPreparationActivityId and XMoeWarConfig.GetPreparationActivityMatchIds(defaultPreparationActivityId) or {}
for i = 1, MaxMatchCount do
if matchIds[i] then
local matchId = matchIds[i]
local numText = XMoeWarConfig.GetPreparationMatchNumText(matchId)
local matchState = XDataCenter.MoeWarManager.GetPreparationMatchOpenState(matchId)
local btnState
local lineState = ButtonStateNormal
if matchState == XMoeWarConfig.MatchState.Open then
btnState = ButtonStateSelect
elseif matchState == XMoeWarConfig.MatchState.Over then
btnState = ButtonStateDisable
lineState = ButtonStateDisable
else
btnState = ButtonStateNormal
end
self["GridProgress" .. i]:SetNameByGroup(0, numText)
self["GridProgress" .. i]:SetButtonState(btnState)
self["GridProgress" .. i].gameObject:SetActiveEx(true)
if self["Line" .. i] then
self["Line" .. i]:SetButtonState(lineState)
self["Line" .. i].gameObject:SetActiveEx(true)
end
else
self["GridProgress" .. i].gameObject:SetActiveEx(false)
if self["Line" .. i] then
self["Line" .. i].gameObject:SetActiveEx(false)
end
end
end
if not XFunctionManager.CheckInTimeByTimeId(timeId) then
self.BtnPrepare:SetDisable(true, false)
self.PanelJd.gameObject:SetActiveEx(false)
local startTime = XFunctionManager.GetStartTimeByTimeId(timeId) or 0
local nowTime = XTime.GetServerNowTimestamp()
self.TxtOver.text = nowTime < startTime and XUiHelper.GetText("MoeWarPrepareNotOpen") or XUiHelper.GetText("MoeWarPrepareOver")
self.TxtOverEn.text = nowTime < startTime and XUiHelper.GetText("MoeWarPrepareNotOpenEn") or XUiHelper.GetText("MoeWarPrepareOverEn")
self.PanelOver.gameObject:SetActiveEx(true)
return
end
if self.BtnPrepare.ButtonState == ButtonStateDisable then
self.BtnPrepare:SetDisable(false)
end
local maxStageCount = XMoeWarConfig.GetPreparationActivityMaxStageCount(preparationActivityId)
local currOpenStageCount = XDataCenter.MoeWarManager.GetPreparationAllOpenStageCount()
self.PrepareJdTxtNumber.text = currOpenStageCount .. "/" .. maxStageCount
self.PrepareJd.fillAmount = maxStageCount > 0 and currOpenStageCount / maxStageCount or 0
self.PanelOver.gameObject:SetActiveEx(false)
self.PanelJd.gameObject:SetActiveEx(true)
end
function XUiMoeWarMain:OnPrepareRedPointEvent(count)
self.BtnPrepare:ShowReddot(count >= 0)
end
function XUiMoeWarMain:OnTaskRedPointEvent(count)
self.BtnTask:ShowReddot(count >= 0)
end
function XUiMoeWarMain:OnGachaRedPointEvent(count)
self.BtnShop:ShowReddot(count >= 0)
end
function XUiMoeWarMain:CheckRedPoint()
XRedPointManager.Check(self.BtnPrepareRedPointEventId)
end