PGRData/Script/matrix/xui/xuiguardcamp/XUiGuardCampMain.lua

384 lines
15 KiB
Lua
Raw Normal View History

local CSXTextManagerGetText = CS.XTextManager.GetText
local mathFloor = math.floor
local stringFormat = string.format
local TenThousand = 10000
local Billion = 100000000
-- en
local Thousand = 1000
local Million = Thousand * Thousand
local S = 60
local H = 3600
local D = 3600 * 24
local W = 3600 * 24 * 7
local M = 3600 * 24 * 30
local STR_HOUR = CS.XTextManager.GetText("Hour")
local STR_MINUTE = CS.XTextManager.GetText("Minute")
--炸服押注活动
local XUiGuardCampMain = XLuaUiManager.Register(XLuaUi, "UiGuardCampMain")
function XUiGuardCampMain:OnAwake()
self:CheckAutoOpenHelp()
XDataCenter.GuardCampManager.CheckUpdateRedPointTimeStamp()
self:AutoAddListener()
self:InitUi()
end
function XUiGuardCampMain:OnStart()
XDataCenter.PurchaseManager.GetPurchaseListRequest(XPurchaseConfigs.GetLBUiTypesList())
self:InitData()
self:InitJoinNum()
self:InitPondAdd()
self:InitCampName()
self:InitIcon()
end
function XUiGuardCampMain:OnEnable()
if self:CheckActivityIsClose() then
return
end
self:RequestGetGuardCampGlobalDataSend()
self:Refresh()
end
function XUiGuardCampMain:OnDisable()
self:RemoveTimer()
end
function XUiGuardCampMain:OnDestroy()
XDataCenter.PurchaseManager.ClearData()
end
function XUiGuardCampMain:CheckAutoOpenHelp()
local isFirstOpenView = XDataCenter.GuardCampManager.IsFirstOpenView()
if isFirstOpenView then
XUiManager.ShowHelpTip("GuardCamp")
end
end
function XUiGuardCampMain:InitUi()
self.PanelBtnYilingquDetail = XUiHelper.TryGetComponent(self.Transform, "SafeAreaContentPane/PanelBtnYilingquDetail")
end
function XUiGuardCampMain:AutoAddListener()
self:RegisterClickEvent(self.BtnBack, self.OnBtnBackClick)
self:RegisterClickEvent(self.BtnMainUi, self.OnBtnMainUiClick)
self:BindHelpBtn(self.BtnHelp, "GuardCamp")
self:RegisterClickEvent(self.BtnBuyJump2, self.OnBtnBuyJumpClick)
self:RegisterClickEvent(self.KachiButton, self.OnKachiButtonClick)
self:RegisterClickEvent(self.PanelBtnJiazhuTudou, self.OnPanelBtnJiazhuTudouClick)
self:RegisterClickEvent(self.PanelBtnJiazhuSolon, self.OnPanelBtnJiazhuSolonClick)
self:RegisterClickEvent(self.PanelBtnYingyuanTudou, self.OnPanelBtnYingyuanTudouClick)
self:RegisterClickEvent(self.PanelBtnYingyuanSolon, self.OnPanelBtnYingyuanSolonClick)
self:RegisterClickEvent(self.PanelBtnTingzhTudou, self.OnPanelBtnTingzhiClick)
self:RegisterClickEvent(self.PanelBtnTingzhSolon, self.OnPanelBtnTingzhiClick)
self:RegisterClickEvent(self.BtnClosePanelTips, self.OnKachiButtonClick)
self.PanelBtnLingquDetail.CallBack = function() self:OnPanelBtnLingquDetailClick() end
end
function XUiGuardCampMain:InitData()
self.ActivityId = XGuardCampConfig.GetActivityId()
self.LeftCampId = XGuardCampConfig.GetCampId(1)
self.RightCampId = XGuardCampConfig.GetCampId(2)
self.SupportItemId = XGuardCampConfig.GetActivitySupportItemId(self.ActivityId)
XDataCenter.ItemManager.AddCountUpdateListener(self.SupportItemId, function()
self:RefreshSupportItemNum()
end, self.TxtTool2)
self.IsOverPlayWinAnima = false
end
function XUiGuardCampMain:InitJoinNum()
local activityId = XGuardCampConfig.GetActivityId()
local joinNumList = XGuardCampConfig.GetActivityJoinNumList(activityId)
local num
for i, joinNum in ipairs(joinNumList) do
self["TxtRenshu" .. i].text = self:GetNumConver(joinNum)
end
end
function XUiGuardCampMain:InitPondAdd()
local activityId = XGuardCampConfig.GetActivityId()
local pondAddList = XGuardCampConfig.GetActivityPondAddList(activityId)
local num
for i, pondAdd in ipairs(pondAddList) do
self["PanelJiangliText" .. i].text = self:GetNumConver(pondAdd)
end
end
function XUiGuardCampMain:GetNumConver(num)
-- if num % Billion == 0 then
-- return stringFormat("%d%s", num / Billion, CSXTextManagerGetText("AHundredMillion"))
-- end
-- if num % TenThousand == 0 then
-- return stringFormat("%d%s", num / TenThousand, CSXTextManagerGetText("TenThousand"))
-- end
-- en使用m
if num % Million == 0 then
return stringFormat("%d%s", num / Million, CSXTextManagerGetText("MillionEN"))
end
-- en使用k
if num % Thousand == 0 then
return stringFormat("%d%s", num / Thousand, CSXTextManagerGetText("ThousandEN"))
end
local numTemp = num / TenThousand
return stringFormat("%.1f%s", numTemp, CSXTextManagerGetText("TenThousand"))
end
function XUiGuardCampMain:InitIcon()
local supportItemId = XGuardCampConfig.GetActivitySupportItemId(self.ActivityId)
local supportItemIcon = XDataCenter.ItemManager.GetItemIcon(supportItemId)
self.RImgTool2:SetRawImage(supportItemIcon)
self.TudouYingyuanRawImage:SetRawImage(supportItemIcon)
self.SolonYingyuanRawImage:SetRawImage(supportItemIcon)
local joinNumList = XGuardCampConfig.GetActivityJoinNumList(self.ActivityId)
for i in ipairs(joinNumList) do
self["PanelJiangliRawImage" .. i]:SetRawImage(supportItemIcon)
end
self.KachiRawImage:SetRawImage(supportItemIcon)
end
function XUiGuardCampMain:InitCampName()
self.TudouTitleText.text = XGuardCampConfig.GetCampName(self.LeftCampId)
self.SolonTitleText.text = XGuardCampConfig.GetCampName(self.RightCampId)
end
function XUiGuardCampMain:RequestGetGuardCampGlobalDataSend()
XDataCenter.GuardCampManager.RequestGetGuardCampGlobalDataSend(self.ActivityId, function() self:Refresh() end)
end
function XUiGuardCampMain:Refresh()
if self:CheckActivityIsClose() then
return
end
local state, timeStr, title, endTimestamp = XDataCenter.GuardCampManager.GetActivityState(self.ActivityId)
local selectCampId = XDataCenter.GuardCampManager.GetSelectCampIdByActivityId(self.ActivityId)
local isSelectCamp = selectCampId ~= XGuardCampConfig.NotGuardId
local isGetReward = XDataCenter.GuardCampManager.IsGetReward(self.ActivityId)
if self.MyZhenyingTudou then
self.MyZhenyingTudou.gameObject:SetActiveEx(selectCampId == self.LeftCampId)
end
if self.MyZhenyingSolon then
self.MyZhenyingSolon.gameObject:SetActiveEx(selectCampId == self.RightCampId)
end
self.PanelBtnYingyuanDetail.gameObject:SetActiveEx(not isSelectCamp and (state == XGuardCampConfig.ActivityState.UnOpen or state == XGuardCampConfig.ActivityState.SupportOpen))
self.PanelBtnJiazhuDetail.gameObject:SetActiveEx(isSelectCamp and state == XGuardCampConfig.ActivityState.SupportOpen)
self.PanelBtnTingzhiDetail.gameObject:SetActiveEx(state == XGuardCampConfig.ActivityState.SupportClose)
self.TxtWeikaishi.gameObject:SetActiveEx(state == XGuardCampConfig.ActivityState.UnOpen)
self.PanelKachiDtail.gameObject:SetActiveEx(state ~= XGuardCampConfig.ActivityState.UnOpen)
self.PaneJiesuoJindu.gameObject:SetActiveEx(state ~= XGuardCampConfig.ActivityState.DrawLottery)
self.PanelYingyuanCountTudouDetail.gameObject:SetActiveEx(state ~= XGuardCampConfig.ActivityState.UnOpen)
self.PaneTudouZhenying.gameObject:SetActiveEx(state ~= XGuardCampConfig.ActivityState.UnOpen)
self.PanelYingyuanCountSolonDetail.gameObject:SetActiveEx(state ~= XGuardCampConfig.ActivityState.UnOpen)
self.PaneSolonZhenying.gameObject:SetActiveEx(state ~= XGuardCampConfig.ActivityState.UnOpen)
self.PanelBtnLingquDetail.gameObject:SetActiveEx(isSelectCamp and state == XGuardCampConfig.ActivityState.DrawLottery and not isGetReward)
self.PanelBtnYilingquDetail.gameObject:SetActiveEx(isGetReward)
self:RefreshSupportCount(selectCampId)
self:RefreshJoinCount()
self:RefreshJoinPercent()
self:RefreshSupportItemNum()
self:RefreshWinImg(state)
self.KachiText.text = XDataCenter.GuardCampManager.GetPondCountByActivityId(self.ActivityId)
self.PanelTipsText.text = XGuardCampConfig.GetCaption(state)
self:RefreshTimer(timeStr, title, endTimestamp)
end
function XUiGuardCampMain:RefreshTimer(timeStr, title, endTimestamp)
local serverTimestamp = XTime.GetServerNowTimestamp()
self.EndTimestamp = endTimestamp
self.Title = title
self.TimeStr = timeStr
if not self.Timer then
self.Timer = XScheduleManager.ScheduleForever(function()
serverTimestamp = XTime.GetServerNowTimestamp()
if self.EndTimestamp <= serverTimestamp then
self:Refresh()
else
self:RequestGetGuardCampGlobalDataSend()
self:RefreshTimeStr(self.TimeStr, self.Title, self.EndTimestamp - serverTimestamp)
end
end, XScheduleManager.SECOND)
end
self:RefreshTimeStr(timeStr, title, endTimestamp - serverTimestamp)
end
function XUiGuardCampMain:RefreshTimeStr(timeStr, title, endLastTimestamp)
local hours = mathFloor(endLastTimestamp / H)
local minutes = mathFloor((endLastTimestamp % H) / S)
minutes = minutes > 0 and minutes or 1 --小于1分钟显示1分钟
self.TxtTitle.text = title
self.TxtTime.text = timeStr ~= "" and timeStr or stringFormat("%d%s%d%s", hours, STR_HOUR, minutes, STR_MINUTE)
end
function XUiGuardCampMain:RemoveTimer()
if self.Timer then
XScheduleManager.UnSchedule(self.Timer)
self.Timer = nil
end
end
function XUiGuardCampMain:RefreshSupportItemNum()
self.TxtTool2.text = XDataCenter.ItemManager.GetCount(self.SupportItemId)
end
function XUiGuardCampMain:RefreshJoinPercent()
local percent = XDataCenter.GuardCampManager.GetJoinPercent(self.ActivityId)
self.ImgPercent.fillAmount = percent
local joinNumList = XGuardCampConfig.GetActivityJoinNumList(self.ActivityId)
local totalNum = XDataCenter.GuardCampManager.GetJoinTotalNum(self.ActivityId)
for i, joinNum in ipairs(joinNumList) do
self["ZhuangtaidianRawImage" .. i].gameObject:SetActiveEx(totalNum >= joinNum)
end
end
function XUiGuardCampMain:RefreshSupportCount(selectCampId)
local perSupportNum = XGuardCampConfig.GetActivityPerSupportNum(self.ActivityId)
local supporNum = XDataCenter.GuardCampManager.GetSupportCount(self.ActivityId, self.LeftCampId)
local selectCampNeedCount = XGuardCampConfig.GetActivitySelectCampNeedCount(self.ActivityId)
local addSelectCampNeedCount = selectCampId == self.LeftCampId and selectCampNeedCount or 0
self.TudouYingyuanCount.text = supporNum * perSupportNum + addSelectCampNeedCount
addSelectCampNeedCount = selectCampId == self.RightCampId and selectCampNeedCount or 0
supporNum = XDataCenter.GuardCampManager.GetSupportCount(self.ActivityId, self.RightCampId)
self.SolonYingyuanCount.text = supporNum * perSupportNum + addSelectCampNeedCount
end
function XUiGuardCampMain:RefreshJoinCount()
self.TudouZhenyingText.text = XDataCenter.GuardCampManager.GetJoinNum(self.ActivityId, self.LeftCampId)
self.SolonZhenyingText.text = XDataCenter.GuardCampManager.GetJoinNum(self.ActivityId, self.RightCampId)
end
function XUiGuardCampMain:RefreshWinImg(state)
local winCampId = XDataCenter.GuardCampManager.GetWinCampIdByActivityId(self.ActivityId)
local tudouLose = state == XGuardCampConfig.ActivityState.DrawLottery and winCampId ~= 0 and self.LeftCampId ~= winCampId
local solonLose = state == XGuardCampConfig.ActivityState.DrawLottery and winCampId ~= 0 and self.RightCampId ~= winCampId
self.ImgTudouLose.gameObject:SetActiveEx(tudouLose)
self.ImgSolonLose.gameObject:SetActiveEx(solonLose)
self.ImgWin.gameObject:SetActiveEx(state == XGuardCampConfig.ActivityState.DrawLottery and winCampId ~= 0)
if not self.IsOverPlayWinAnima then
if tudouLose then
self:PlayAnimation("SolonWin")
self.IsOverPlayWinAnima = true
elseif solonLose then
self:PlayAnimation("TuDouWin")
self.IsOverPlayWinAnima = true
end
end
end
function XUiGuardCampMain:CheckActivityIsClose()
if XDataCenter.GuardCampManager.IsActivityClose() then
XUiManager.TipText("ActivityAlreadyOver")
self:Close()
return true
end
end
function XUiGuardCampMain:OnPanelBtnJiazhuTudouClick()
self:OnJiaZhuClick(self.LeftCampId)
end
function XUiGuardCampMain:OnPanelBtnJiazhuSolonClick()
self:OnJiaZhuClick(self.RightCampId)
end
function XUiGuardCampMain:OnJiaZhuClick(selectCampId)
local maxSupportCount = XDataCenter.GuardCampManager.GetMaxSupportCount(self.ActivityId)
if maxSupportCount == 0 then
XUiManager.TipText("GuardCampSupportCampMax")
return
end
local perSupportNum = XGuardCampConfig.GetActivityPerSupportNum(self.ActivityId)
local itemCount = XDataCenter.ItemManager.GetCount(self.SupportItemId)
if itemCount < perSupportNum then
self:OnBtnBuyJumpClick()
return
end
XLuaUiManager.Open("UiGuardCampTips", self.ActivityId, selectCampId)
end
function XUiGuardCampMain:OnPanelBtnYingyuanTudouClick()
self:OnYingyuan(self.LeftCampId)
end
function XUiGuardCampMain:OnPanelBtnYingyuanSolonClick()
self:OnYingyuan(self.RightCampId)
end
function XUiGuardCampMain:OnYingyuan(selectCampId)
local state, timeStr = XDataCenter.GuardCampManager.GetActivityState(self.ActivityId)
if state == XGuardCampConfig.ActivityState.UnOpen then
local errorDesc = CS.XTextManager.GetText("GuardCampUnopenTipDesc", timeStr)
XUiManager.TipError(errorDesc)
return
end
local selectCampNeedCount = XGuardCampConfig.GetActivitySelectCampNeedCount(self.ActivityId)
local itemCount = XDataCenter.ItemManager.GetCount(self.SupportItemId)
if itemCount < selectCampNeedCount then
self:OnBtnBuyJumpClick()
return
end
local itemId = XGuardCampConfig.GetActivitySupportItemId(self.ActivityId)
local itemName = XDataCenter.ItemManager.GetItemName(itemId)
local campName = XGuardCampConfig.GetCampName(selectCampId)
local content = CS.XTextManager.GetText("GuardCampSelectCampTipDesc", selectCampNeedCount, itemName, campName)
XUiManager.DialogTip("", content, XUiManager.DialogType.Normal, nil, function()
XDataCenter.GuardCampManager.RequestSelectGuardCampSend(self.ActivityId, selectCampId)
end)
end
function XUiGuardCampMain:OnPanelBtnLingquDetailClick()
local selectCampId = XDataCenter.GuardCampManager.GetSelectCampIdByActivityId(self.ActivityId)
XDataCenter.GuardCampManager.RequestGetGuardCampRewardSend(self.ActivityId, function() self:Refresh() end)
end
function XUiGuardCampMain:OnBtnBuyJumpClick()
local data = XDataCenter.GuardCampManager.GetActivityPurchasePackageData(self.ActivityId)
if not data or data.IsSelloutHide then
XUiManager.TipText("NotPurchaseData")
return
end
XLuaUiManager.Open("UiChongzhiTanchuang", data)
end
--奖池说明弹窗
function XUiGuardCampMain:OnKachiButtonClick()
local activeSelf = self.PanelTipsDetail.gameObject.activeSelf
self.PanelTipsDetail.gameObject:SetActiveEx(not activeSelf)
end
function XUiGuardCampMain:OnPanelBtnTingzhiClick()
XUiManager.TipText("GuardCampSupportCloseTipDesc")
end
function XUiGuardCampMain:OnBtnBackClick()
self:Close()
end
function XUiGuardCampMain:OnBtnMainUiClick()
XLuaUiManager.RunMain()
end
function XUiGuardCampMain:OnGetEvents()
return {XEventId.EVENT_GUARD_CAMP_ACTIVITY_DATA_CHANGE}
end
function XUiGuardCampMain:OnNotify(evt, ...)
if evt == XEventId.EVENT_GUARD_CAMP_ACTIVITY_DATA_CHANGE then
self:Refresh()
end
end