PGRData/Script/matrix/xui/xuirpgtower/mainpage/XUiRpgTowerNewMain.lua

245 lines
8.6 KiB
Lua
Raw Normal View History

2024-09-01 20:49:41 +00:00
--兵法蓝图选关主界面
local XUiRpgTowerNewMain = XLuaUiManager.Register(XLuaUi, "UiRpgTowerNewMain")
local XUiRpgMainTagGrid = require("XUi/XUiRpgTower/MainPage/PanelTag/XUiRpgMainTagGrid")
function XUiRpgTowerNewMain:OnAwake()
self.MaxLevel = XDataCenter.RpgTowerManager.GetMaxLevel()
self.BtnDic = {}
self.RedEvents = {}
self:InitButtons()
self:InitTagGroup()
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.ActionPoint, XDataCenter.ItemManager.ItemId.Coin)
XEventManager.AddEventListener(XEventId.EVENT_RPGTOWER_TEAM_LV_REFRESH, self.RefreshTeamLevel, self)
end
function XUiRpgTowerNewMain:InitButtons()
XUiHelper.RegisterClickEvent(self, self.BtnBack, self.Close)
XUiHelper.RegisterClickEvent(self, self.BtnMainUi, function() XLuaUiManager.RunMain() end)
XUiHelper.RegisterClickEvent(self, self.BtnTask, function() XLuaUiManager.Open("UiRpgTowerTask") end)
XUiHelper.RegisterClickEvent(self, self.BtnGift, self.OnBtnGiftClick)
XUiHelper.RegisterClickEvent(self, self.BtnTeam, self.OnTeamClick)
self:BindHelpBtn(self.BtnHelp, "RpgTowerHelp")
end
function XUiRpgTowerNewMain:InitTagGroup()
-- 入口标签组初始化
for i = 1, self.PanelGroup.childCount do
local tagGrid = self.BtnDic[i]
if not tagGrid then
local tagGo = self.PanelGroup:Find("Btn"..i)
tagGrid = XUiRpgMainTagGrid.New(tagGo)
self.BtnDic[i] = tagGrid
end
end
end
function XUiRpgTowerNewMain:OnEnable()
self:RefreshGrids()
self:RefreshReward()
self:InitTeamLevel()
self:AddRedPointEvents()
self:SetTimer()
end
function XUiRpgTowerNewMain:RefreshGrids()
-- 刷新
self.AllConfigs = XRpgTowerConfig.GetRTagConfigs()
for i, tagGrid in pairs(self.BtnDic) do
tagGrid:Refresh(self.AllConfigs[i])
end
end
--加载队伍经验条
function XUiRpgTowerNewMain:InitTeamLevel(showEffect)
self.CurrLv = XDataCenter.RpgTowerManager.GetCurrentLevel()
self.Exp = XDataCenter.RpgTowerManager.GetCurrentExp()
local isMaxLv = self.MaxLevel == self.CurrLv
if isMaxLv then
self.Exp = CS.XTextManager.GetText("RpgTowerMaxLevel")
end
local cfg = XRpgTowerConfig.GetTeamLevelCfgByLevel(self.CurrLv)
self.NextExp = cfg and cfg.Exp or self.Exp -- 满级 self.Exp / self.NextExp就等于 1
self.TxtTeamLv.text = self.CurrLv
-- local bgLv = (self.CurrLv < 10) and "0"..self.CurrLv or self.CurrLv -- 大的数字要两位数不足补0
-- self.TxtLvBig.text = bgLv
self.EffectLevel.gameObject:SetActiveEx(showEffect) -- 升级特效
self.TxtExp.text = isMaxLv and CS.XTextManager.GetText("RpgTowerMaxLevel") or CS.XTextManager.GetText("CommonSlashStr", self.Exp, self.NextExp)
self.ImgExp.fillAmount = isMaxLv and 1 or self.Exp / self.NextExp
end
-- 刷新队伍经验(在当前面板升级)播放升级进度条动画
function XUiRpgTowerNewMain:RefreshTeamLevel(newLv, newExp)
if newLv < self.CurrLv or newLv == self.MaxLevel then
return
end
self.EffectLevel.gameObject:SetActiveEx(false)
local round = newLv - self.CurrLv --进度条转的圈数
local currExp = self.Exp
local addTotalExp = XRpgTowerConfig.GetTeamLevelCfgByLevel(self.CurrLv).Exp - currExp
if round > 0 then
if round > 1 then
for i = self.CurrLv + 1, newLv - 1, 1 do
addTotalExp = addTotalExp + XRpgTowerConfig.GetTeamLevelCfgByLevel(i).Exp
end
end
addTotalExp = addTotalExp + newExp
end
local addSpeed = addTotalExp / 60
if self.AnimTimer then
XScheduleManager.UnSchedule(self.AnimTimer)
self.AnimTimer = nil
end
self.AnimTimer = XUiHelper.Tween(1, function ()
-- 先转圈
local cfg = XRpgTowerConfig.GetTeamLevelCfgByLevel(newLv - round)
local nextExp = cfg and cfg.Exp or self.Exp --.Exp字段是升到下级需要达到的exp
if round > 0 then
currExp = currExp + addSpeed
self.ImgExp.fillAmount = currExp / nextExp --不用在意这个速度
if currExp / nextExp >= 1 then -- 转完一圈 减round
round = round - 1
currExp = 0
end
elseif round == 0 then
-- 转完了,没有圈数了 停留在经验值的当前值
currExp = currExp + addSpeed
self.ImgExp.fillAmount = currExp / nextExp
if currExp >= newExp then --
round = -1 --将圈数置负,不再进入判断
self.ImgExp.fillAmount = newExp / nextExp
end
end
end, function ()
local showEffect = newLv - self.CurrLv > 0
self:InitTeamLevel(showEffect)
end)
end
-- 刷新奖励
function XUiRpgTowerNewMain:RefreshReward()
local count = 0
local dayPass = XDataCenter.RpgTowerManager.GetDayCount()
local allDailyRewards = XDataCenter.RpgTowerManager.GetDailyRewards()
local rewardId = allDailyRewards[dayPass]
if rewardId then
local reward = XRewardManager.GetRewardList(rewardId)
count = reward[1].Count -- 策划说奖励只会配1个
end
local isShow = (count > 0) and XDataCenter.RpgTowerManager.GetCanReceiveSupply()
-- self.BtnGift:SetNameByGroup(0, count)
self.BtnGift.transform:Find("ImgReceived").gameObject:SetActiveEx(not isShow)
self.BtnGift:ShowReddot(isShow)
end
-- 领取奖励
function XUiRpgTowerNewMain:OnBtnGiftClick()
if XDataCenter.RpgTowerManager.GetCanReceiveSupply() then
XDataCenter.RpgTowerManager.ReceiveSupply()
else
XUiManager.TipMsg(CS.XTextManager.GetText("RpgTowerCantGetSupply"))
end
end
function XUiRpgTowerNewMain:SetTimer()
self:StopTimer()
self:SetResetTime()
self.Timer = XScheduleManager.ScheduleForever(function()
self:SetResetTime()
end, XScheduleManager.SECOND, 0)
end
--显示倒计时与处理倒计时完成时事件
function XUiRpgTowerNewMain:SetResetTime()
local endTimeSecond = XDataCenter.RpgTowerManager.GetEndTime()
local now = XTime.GetServerNowTimestamp()
local leftTime = endTimeSecond - now
local remainTime = XUiHelper.GetTime(leftTime, XUiHelper.TimeFormatType.STRONGHOLD)
self.TxtRemainTime.text = CS.XTextManager.GetText("ShopActivityItemCount", remainTime)
if leftTime <= 0 then
self:OnActivityReset()
end
end
--停止界面计时器
function XUiRpgTowerNewMain:StopTimer()
if self.Timer then
XScheduleManager.UnSchedule(self.Timer)
self.Timer = nil
end
end
--活动周期结束时弹回主界面
function XUiRpgTowerNewMain:OnActivityReset()
if self.IsReseting then return end
self.IsReseting = true
self:StopTimer()
XLuaUiManager.RunMain()
XUiManager.TipMsg(CS.XTextManager.GetText("RpgTowerFinished"))
end
function XUiRpgTowerNewMain:OnTeamClick()
XLuaUiManager.Open("UiRpgTowerRoleList")
end
function XUiRpgTowerNewMain:OnGetEvents()
return { XEventId.EVENT_RPGTOWER_RESET, XEventId.EVENT_RPGTOWER_REFRESH_DAILYREWARD }
end
function XUiRpgTowerNewMain:OnNotify(evt, ...)
local args = { ... }
if evt == XEventId.EVENT_RPGTOWER_RESET then
self:OnActivityReset()
elseif evt == XEventId.EVENT_RPGTOWER_REFRESH_DAILYREWARD then
self:RefreshReward()
end
end
function XUiRpgTowerNewMain:OnDisable()
self:StopTimer()
self:RemoveRedPointEvents()
if self.AnimTimer then
XScheduleManager.UnSchedule(self.AnimTimer)
self.AnimTimer = nil
end
end
function XUiRpgTowerNewMain:OnDestroy()
XEventManager.RemoveEventListener(XEventId.EVENT_RPGTOWER_TEAM_LV_REFRESH, self.RefreshTeamLevel, self)
end
function XUiRpgTowerNewMain:AddRedPointEvents()
if self.AlreadyAddRed then return end
self.AlreadyAddRed = true
table.insert(self.RedEvents, XRedPointManager.AddRedPointEvent(self.BtnTask, self.OnCheckBtnTaskRedPoint, self, { XRedPointConditions.Types.CONDITION_RPGTOWER_TASK_RED }))
table.insert(self.RedEvents, XRedPointManager.AddRedPointEvent(self.BtnTeam, self.OnCheckBtnTeamRedPoint, self, { XRedPointConditions.Types.CONDITION_RPGTOWER_TEAM_RED }))
end
function XUiRpgTowerNewMain:RemoveRedPointEvents()
if not self.AlreadyAddRed then return end
for _, eventId in pairs(self.RedEvents) do
XRedPointManager.RemoveRedPointEvent(eventId)
end
self.RedEvents = {}
self.AlreadyAddRed = false
end
function XUiRpgTowerNewMain:OnCheckBtnTaskRedPoint(count)
self.BtnTask:ShowReddot(count >= 0)
end
function XUiRpgTowerNewMain:OnCheckBtnTeamRedPoint(count)
self.BtnTeam:ShowReddot(count >= 0)
end
return XUiRpgTowerNewMain