80af235e05
EN: 1.12.0.120 CN: 1.12.0.120 JP: 1.12.0.124 KR: 1.12.0.124
301 lines
10 KiB
Lua
301 lines
10 KiB
Lua
local BattlePassQuestCtrl = class("BattlePassQuestCtrl", BaseCtrl)
|
|
BattlePassQuestCtrl._mapNodeConfig = {
|
|
srQuestDaily = {
|
|
sComponentName = "LoopScrollView"
|
|
},
|
|
srQuestWeekly = {
|
|
sComponentName = "LoopScrollView"
|
|
},
|
|
togDaily = {
|
|
sCtrlName = "Game.UI.TemplateEx.TemplateToggleCtrl"
|
|
},
|
|
togWeek = {
|
|
sCtrlName = "Game.UI.TemplateEx.TemplateToggleCtrl"
|
|
},
|
|
btnDaily = {
|
|
sNodeName = "togDaily",
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Daily"
|
|
},
|
|
btnWeek = {
|
|
sNodeName = "togWeek",
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Weekly"
|
|
},
|
|
btnAllReceive = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_AllReceive"
|
|
},
|
|
TMPWeekLimit = {sComponentName = "TMP_Text"},
|
|
txtBtnAllReceive = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "BattlePassReceiveAll"
|
|
},
|
|
redDotDailyQuest = {},
|
|
redDotWeekQuest = {},
|
|
txt_DailyTime = {sComponentName = "TMP_Text", nCount = 2},
|
|
txt_WeeklyTime = {sComponentName = "TMP_Text", nCount = 2}
|
|
}
|
|
BattlePassQuestCtrl._mapEventConfig = {
|
|
BattlePassQuestReceive = "OnEvent_QuestReceive",
|
|
ShowQuestReward = "ShowQuestReward"
|
|
}
|
|
BattlePassQuestCtrl._mapRedDotConfig = {
|
|
[RedDotDefine.BattlePass_Quest_Daily] = {
|
|
sNodeName = "redDotDailyQuest"
|
|
},
|
|
[RedDotDefine.BattlePass_Quest_Week] = {
|
|
sNodeName = "redDotWeekQuest"
|
|
}
|
|
}
|
|
function BattlePassQuestCtrl:Awake()
|
|
self.mapQuestsGrids = {}
|
|
end
|
|
function BattlePassQuestCtrl:FadeIn()
|
|
end
|
|
function BattlePassQuestCtrl:FadeOut()
|
|
end
|
|
function BattlePassQuestCtrl:OnEnable()
|
|
self._mapNode.togDaily:SetText(ConfigTable.GetUIText("BattlePassRewardDaily"))
|
|
self.togRefreshTimer = nil
|
|
end
|
|
function BattlePassQuestCtrl:OnDisable()
|
|
self:UnbindAllCtrl()
|
|
if self.togRefreshTimer ~= nil then
|
|
self.togRefreshTimer:Cancel(false)
|
|
end
|
|
end
|
|
function BattlePassQuestCtrl:OnDestroy()
|
|
end
|
|
function BattlePassQuestCtrl:OnRelease()
|
|
end
|
|
function BattlePassQuestCtrl:Refresh(nExpThisWeek, nCurLevel)
|
|
local mapDailyQuest, mapWeeklyQuest = PlayerData.Quest:GetBattlePassQuestData()
|
|
local nExpLimit = ConfigTable.GetConfigNumber("BattlePassWeeklyExpLimit")
|
|
local bMaxLevel = ConfigTable.GetData("BattlePassLevel", nCurLevel + 1) == nil
|
|
if bMaxLevel then
|
|
NovaAPI.SetTMPText(self._mapNode.TMPWeekLimit, ConfigTable.GetUIText("BattlePassQusetMax"))
|
|
else
|
|
NovaAPI.SetTMPText(self._mapNode.TMPWeekLimit, orderedFormat(ConfigTable.GetUIText("BattlePassQusetExpLimit"), nExpThisWeek, nExpLimit))
|
|
end
|
|
local bFullExp = nExpThisWeek >= nExpLimit
|
|
self.tbDaily = {}
|
|
self.tbWeekly = {}
|
|
local statusOrder = {
|
|
[0] = 1,
|
|
[1] = 2,
|
|
[2] = 0
|
|
}
|
|
local sort = function(a, b)
|
|
if a.nStatus ~= b.nStatus then
|
|
return statusOrder[a.nStatus] > statusOrder[b.nStatus]
|
|
end
|
|
return a.nTid < b.nTid
|
|
end
|
|
local bHasComplete = false
|
|
local bDailyAllComplete = true
|
|
local bQuestAllComplete = true
|
|
local nIdx = 0
|
|
for _, mapQuestData in pairs(mapDailyQuest) do
|
|
if mapQuestData.nStatus == 1 then
|
|
bHasComplete = true
|
|
nIdx = 1
|
|
end
|
|
if 2 > mapQuestData.nStatus then
|
|
bDailyAllComplete = false
|
|
bQuestAllComplete = false
|
|
end
|
|
table.insert(self.tbDaily, mapQuestData)
|
|
end
|
|
for _, mapQuestData in pairs(mapWeeklyQuest) do
|
|
if mapQuestData.nStatus == 1 then
|
|
bHasComplete = true
|
|
if nIdx < 1 then
|
|
nIdx = 2
|
|
end
|
|
end
|
|
if 2 > mapQuestData.nStatus then
|
|
bQuestAllComplete = false
|
|
end
|
|
table.insert(self.tbWeekly, mapQuestData)
|
|
end
|
|
if nIdx < 1 then
|
|
nIdx = not bDailyAllComplete and 1 or 2
|
|
end
|
|
self:SetWeeklyTogText()
|
|
table.sort(self.tbDaily, sort)
|
|
table.sort(self.tbWeekly, sort)
|
|
self.enableQuest = not bMaxLevel and not bFullExp
|
|
self._mapNode.srQuestDaily:Init(#self.tbDaily, self, self.OnGridRefreshDaily)
|
|
self._mapNode.srQuestWeekly:Init(#self.tbWeekly, self, self.OnGridRefreshWeekly)
|
|
self._mapNode.btnAllReceive.gameObject:SetActive(bHasComplete and not bMaxLevel and not bFullExp)
|
|
if self.togRefreshTimer == nil then
|
|
self.togRefreshTimer = self:AddTimer(0, 60, "SetWeeklyTogText", true, true, true, nil)
|
|
end
|
|
return bHasComplete, nIdx, bQuestAllComplete
|
|
end
|
|
function BattlePassQuestCtrl:SetToggle(nIdx)
|
|
if nIdx == 1 then
|
|
self.curTab = 1
|
|
self._mapNode.togDaily:SetDefault(true)
|
|
self._mapNode.togWeek:SetDefault(false)
|
|
self._mapNode.srQuestDaily.gameObject:SetActive(true)
|
|
self._mapNode.srQuestWeekly.gameObject:SetActive(false)
|
|
else
|
|
self.curTab = 2
|
|
self._mapNode.togDaily:SetDefault(false)
|
|
self._mapNode.togWeek:SetDefault(true)
|
|
self._mapNode.srQuestDaily.gameObject:SetActive(false)
|
|
self._mapNode.srQuestWeekly.gameObject:SetActive(true)
|
|
end
|
|
end
|
|
function BattlePassQuestCtrl:UnbindAllCtrl()
|
|
for _, mapCtrl in pairs(self.mapQuestsGrids) do
|
|
self:UnbindCtrlByNode(mapCtrl)
|
|
end
|
|
self.mapQuestsGrids = {}
|
|
end
|
|
function BattlePassQuestCtrl:PlayListInAnim()
|
|
if self.curTab == 1 then
|
|
self._mapNode.srQuestDaily:SetAnim(0.07)
|
|
self._mapNode.srQuestDaily:Init(#self.tbDaily, self, self.OnGridRefreshDaily)
|
|
else
|
|
self._mapNode.srQuestWeekly:SetAnim(0.07)
|
|
self._mapNode.srQuestWeekly:Init(#self.tbWeekly, self, self.OnGridRefreshWeekly)
|
|
end
|
|
EventManager.Hit(EventId.TemporaryBlockInput, 0.5)
|
|
end
|
|
function BattlePassQuestCtrl:OnGridRefreshDaily(goGrid, gridIndex)
|
|
if self.mapQuestsGrids[goGrid] == nil then
|
|
self.mapQuestsGrids[goGrid] = self:BindCtrlByNode(goGrid, "Game.UI.BattlePass.BattlePassQuestGridCtrl")
|
|
end
|
|
local nIdx = gridIndex + 1
|
|
local mapQuestData = self.tbDaily[nIdx]
|
|
if mapQuestData == nil then
|
|
printError("BattlePassQuest missing" .. nIdx)
|
|
self.mapQuestsGrids[goGrid]:Refresh(nil, nil)
|
|
return
|
|
end
|
|
local mapQuestCfgData = ConfigTable.GetData("BattlePassQuest", mapQuestData.nTid)
|
|
self.mapQuestsGrids[goGrid]:Refresh(mapQuestData, mapQuestCfgData, self.enableQuest)
|
|
end
|
|
function BattlePassQuestCtrl:OnGridRefreshWeekly(goGrid, gridIndex)
|
|
if self.mapQuestsGrids[goGrid] == nil then
|
|
self.mapQuestsGrids[goGrid] = self:BindCtrlByNode(goGrid, "Game.UI.BattlePass.BattlePassQuestGridCtrl")
|
|
end
|
|
local nIdx = gridIndex + 1
|
|
local mapQuestData = self.tbWeekly[nIdx]
|
|
if mapQuestData == nil then
|
|
printError("BattlePassQuest missing" .. nIdx)
|
|
self.mapQuestsGrids[goGrid]:Refresh(nil, nil)
|
|
return
|
|
end
|
|
local mapQuestCfgData = ConfigTable.GetData("BattlePassQuest", mapQuestData.nTid)
|
|
self.mapQuestsGrids[goGrid]:Refresh(mapQuestData, mapQuestCfgData, self.enableQuest)
|
|
end
|
|
function BattlePassQuestCtrl:OnEvent_QuestReceive(mapData)
|
|
local mapDailyQuest, mapWeeklyQuest = PlayerData.Quest:GetBattlePassQuestData()
|
|
local nExpLimit = ConfigTable.GetConfigNumber("BattlePassWeeklyExpLimit")
|
|
local bMaxLevel = ConfigTable.GetData("BattlePassLevel", mapData.Level + 1) == nil
|
|
local bFullExp = nExpLimit <= mapData.ExpThisWeek
|
|
if bMaxLevel then
|
|
NovaAPI.SetTMPText(self._mapNode.TMPWeekLimit, ConfigTable.GetUIText("BattlePassQusetMax"))
|
|
else
|
|
NovaAPI.SetTMPText(self._mapNode.TMPWeekLimit, orderedFormat(ConfigTable.GetUIText("BattlePassQusetExpLimit"), mapData.ExpThisWeek, nExpLimit))
|
|
end
|
|
self.tbDaily = {}
|
|
self.tbWeekly = {}
|
|
local statusOrder = {
|
|
[0] = 1,
|
|
[1] = 2,
|
|
[2] = 0
|
|
}
|
|
local sort = function(a, b)
|
|
if a.nStatus ~= b.nStatus then
|
|
return statusOrder[a.nStatus] > statusOrder[b.nStatus]
|
|
end
|
|
return a.nTid < b.nTid
|
|
end
|
|
local bHasComplete = false
|
|
for _, mapQuestData in pairs(mapDailyQuest) do
|
|
table.insert(self.tbDaily, mapQuestData)
|
|
if mapQuestData.nStatus == 1 then
|
|
bHasComplete = true
|
|
end
|
|
end
|
|
for _, mapQuestData in pairs(mapWeeklyQuest) do
|
|
table.insert(self.tbWeekly, mapQuestData)
|
|
if mapQuestData.nStatus == 1 then
|
|
bHasComplete = true
|
|
end
|
|
end
|
|
self:SetWeeklyTogText()
|
|
table.sort(self.tbDaily, sort)
|
|
table.sort(self.tbWeekly, sort)
|
|
self.enableQuest = not bMaxLevel and not bFullExp
|
|
self._mapNode.btnAllReceive.gameObject:SetActive(bHasComplete and not bMaxLevel and not bFullExp)
|
|
self._mapNode.srQuestDaily:Init(#self.tbDaily, self, self.OnGridRefreshDaily, nil, true, nil)
|
|
self._mapNode.srQuestWeekly:Init(#self.tbWeekly, self, self.OnGridRefreshWeekly, nil, true, nil)
|
|
end
|
|
function BattlePassQuestCtrl:OnBtnClick_Daily(btn)
|
|
self._panel.questTab = 1
|
|
if self.curTab == 1 then
|
|
return
|
|
end
|
|
self._mapNode.togDaily:SetTrigger(true)
|
|
self._mapNode.togWeek:SetTrigger(false)
|
|
self.curTab = 1
|
|
self._mapNode.srQuestDaily.gameObject:SetActive(true)
|
|
self._mapNode.srQuestWeekly.gameObject:SetActive(false)
|
|
end
|
|
function BattlePassQuestCtrl:OnBtnClick_Weekly(btn)
|
|
self._panel.questTab = 2
|
|
if self.curTab == 2 then
|
|
return
|
|
end
|
|
self._mapNode.togDaily:SetTrigger(false)
|
|
self._mapNode.togWeek:SetTrigger(true)
|
|
self.curTab = 2
|
|
self._mapNode.srQuestDaily.gameObject:SetActive(false)
|
|
self._mapNode.srQuestWeekly.gameObject:SetActive(true)
|
|
end
|
|
function BattlePassQuestCtrl:OnBtnClick_AllReceive(btn)
|
|
PlayerData.Quest:ReceiveBattlePassQuestData(0, nil)
|
|
end
|
|
function BattlePassQuestCtrl:ShowQuestReward(grid)
|
|
local nIdx = tonumber(grid.name)
|
|
if self.curTab == 1 then
|
|
self._mapNode.srQuestDaily:SetScrollGridPos(nIdx, 0, 1)
|
|
else
|
|
self._mapNode.srQuestWeekly:SetScrollGridPos(nIdx, 0, 1)
|
|
end
|
|
end
|
|
function BattlePassQuestCtrl:SetWeeklyTogText()
|
|
local mapWeeklyQuestData = self.tbWeekly[1]
|
|
if mapWeeklyQuestData ~= nil then
|
|
local nBattlePassEndTS = PlayerData.BattlePass.nDeadlineTS
|
|
if nBattlePassEndTS < 1 then
|
|
nBattlePassEndTS = mapWeeklyQuestData.nExpire
|
|
end
|
|
local curTime = CS.ClientManager.Instance.serverTimeStamp
|
|
local sumTime = math.max(0, math.min(mapWeeklyQuestData.nExpire, nBattlePassEndTS) - curTime)
|
|
local nDay = math.floor(sumTime / 86400)
|
|
local nHour = math.floor((sumTime - nDay * 86400) / 3600)
|
|
local nHourReal = (sumTime - nDay * 86400) / 3600
|
|
self._mapNode.togWeek:SetText(ConfigTable.GetUIText("BattlePassQuset"))
|
|
if 0 < nDay then
|
|
NovaAPI.SetTMPText(self._mapNode.txt_WeeklyTime[1], orderedFormat(ConfigTable.GetUIText("BattlePassQusetWeekly"), nDay, nHour))
|
|
NovaAPI.SetTMPText(self._mapNode.txt_WeeklyTime[2], orderedFormat(ConfigTable.GetUIText("BattlePassQusetWeekly"), nDay, nHour))
|
|
elseif 1 < nHourReal then
|
|
NovaAPI.SetTMPText(self._mapNode.txt_WeeklyTime[1], orderedFormat(ConfigTable.GetUIText("BattlePassQusetWeeklyHour"), nHour))
|
|
NovaAPI.SetTMPText(self._mapNode.txt_WeeklyTime[2], orderedFormat(ConfigTable.GetUIText("BattlePassQusetWeeklyHour"), nHour))
|
|
else
|
|
NovaAPI.SetTMPText(self._mapNode.txt_WeeklyTime[1], ConfigTable.GetUIText("Depot_LeftTime_LessThenHour"))
|
|
NovaAPI.SetTMPText(self._mapNode.txt_WeeklyTime[2], ConfigTable.GetUIText("Depot_LeftTime_LessThenHour"))
|
|
end
|
|
else
|
|
self._mapNode.togWeek.gameObject:SetActive(false)
|
|
end
|
|
end
|
|
return BattlePassQuestCtrl
|