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

381 lines
14 KiB
Lua
Raw Normal View History

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