Files
SL1900 5e0d58cfad Initial version - 1.2.0.60
EN: 1.2.0.60
CN: 1.2.0.61
JP: 1.2.0.63
KR: 1.2.0.67
2025-12-03 01:00:00 +09:00

173 lines
6.5 KiB
Lua

local AchievementDetailCtrl = class("AchievementDetailCtrl", BaseCtrl)
AchievementDetailCtrl._mapNodeConfig = {
TMPCupCount = {sComponentName = "TMP_Text", nCount = 3},
txtBtnAllReceive = {
sComponentName = "TMP_Text",
sLanguageId = "Quest_Btn_ReceiveAll"
},
imgFlagIcon = {sComponentName = "Image"},
svAchievementList = {
sComponentName = "LoopScrollView"
},
btnAllReceive = {
sComponentName = "UIButton",
callback = "OnBtnClick_AllReceive"
},
btnTab = {
sComponentName = "UIButton",
nCount = 5,
callback = "OnBtnClick_Tog"
},
imgTabBg = {
sCtrlName = "Game.UI.AchievementEx.AchievementToggle"
},
imgIconF0 = {nCount = 5},
AnimFlag = {sNodeName = "imgFlag", sComponentName = "Animator"}
}
AchievementDetailCtrl._mapEventConfig = {
AchievementRefresh = "OnEvent_ReceiveReward"
}
AchievementDetailCtrl._mapRedDotConfig = {}
function AchievementDetailCtrl:Awake()
self.mapAllAchievement = {}
self.mapAllAchievementCount = {}
self.mapGrid = {}
self.curIdx = 1
end
function AchievementDetailCtrl:FadeIn()
end
function AchievementDetailCtrl:FadeOut()
end
function AchievementDetailCtrl:OnEnable()
self._mapNode.imgTabBg:SetText(ConfigTable.GetUIText("Achievement_Type_1"), ConfigTable.GetUIText("Achievement_Type_2"), ConfigTable.GetUIText("Achievement_Type_3"), ConfigTable.GetUIText("Achievement_Type_4"), ConfigTable.GetUIText("Achievement_Type_5"))
self:RegisterReddot()
end
function AchievementDetailCtrl:OnGridRefresh(goGrid, gridIndex)
if self.mapGrid[goGrid] == nil then
local mapCtrl = self:BindCtrlByNode(goGrid, "Game.UI.AchievementEx.AchievementGridCtrl")
self.mapGrid[goGrid] = mapCtrl
end
local nIdx = gridIndex
if nIdx == nil then
return
end
nIdx = nIdx + 1
local mapAllAchievement = self.mapAllAchievement[self.curType][nIdx]
self.mapGrid[goGrid]:OnGridRefresh(mapAllAchievement)
end
function AchievementDetailCtrl:OnDisable()
for goGrid, mapCtrl in pairs(self.mapGrid) do
self:UnbindCtrlByNode(mapCtrl)
end
self.mapGrid = {}
end
function AchievementDetailCtrl:OnDestroy()
end
function AchievementDetailCtrl:OnRelease()
end
function AchievementDetailCtrl:OpenDetail(nIdx)
self.curType = nIdx
for i = 1, 5 do
self._mapNode.imgIconF0[i]:SetActive(nIdx == i)
end
self._mapNode.imgTabBg:SetState(nIdx)
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
local sAnimName = "imgFlagIcon_in0" .. self.curType
self._mapNode.AnimFlag:Play(sAnimName)
end
cs_coroutine.start(wait)
self._mapNode.svAchievementList:Init(#self.mapAllAchievement[self.curType], self, self.OnGridRefresh)
self:SetPngSprite(self._mapNode.imgFlagIcon, "UI/big_sprites/zs_achievement_icon_0" .. nIdx)
NovaAPI.SetImageNativeSize(self._mapNode.imgFlagIcon)
local bShowAllReceive = false
for _, mapAchievement in ipairs(self.mapAllAchievement[self.curType]) do
if mapAchievement.nStatus == 1 then
bShowAllReceive = true
end
end
self._mapNode.btnAllReceive.gameObject:SetActive(bShowAllReceive)
local mapCount = PlayerData.Achievement:GetAchievementTypeCount(self.curType)
NovaAPI.SetTMPText(self._mapNode.TMPCupCount[1], mapCount.tbRarity[GameEnum.itemRarity.SSR])
NovaAPI.SetTMPText(self._mapNode.TMPCupCount[2], mapCount.tbRarity[GameEnum.itemRarity.SR])
NovaAPI.SetTMPText(self._mapNode.TMPCupCount[3], mapCount.tbRarity[GameEnum.itemRarity.R])
end
function AchievementDetailCtrl:UpdateData()
for _, nValue in pairs(GameEnum.achievementType) do
self.mapAllAchievement[nValue] = {}
local mapAllAchievement = PlayerData.Achievement:GetAchievementTypeList(nValue)
if mapAllAchievement ~= nil then
for _, value in pairs(mapAllAchievement) do
if not PlayerData.Achievement:JudgeHide(nValue, value) then
table.insert(self.mapAllAchievement[nValue], value)
end
end
local sortAchievement = function(a, b)
if a.nStatus ~= b.nStatus then
return a.nStatus < b.nStatus
end
return a.nId < b.nId
end
table.sort(self.mapAllAchievement[nValue], sortAchievement)
end
end
end
function AchievementDetailCtrl:RegisterReddot(...)
for k, v in pairs(self._mapNode.btnTab) do
local goReddot = v.transform:Find("reddot_Tab").gameObject
RedDotManager.RegisterNode(RedDotDefine.Achievement_Tab, k, goReddot)
end
end
function AchievementDetailCtrl:OnBtnClick_Tog(btn, nIdx)
if nIdx == self.curType then
return
end
self.curType = nIdx
for i = 1, 5 do
self._mapNode.imgIconF0[i]:SetActive(nIdx == i)
end
self._mapNode.imgTabBg:SetState(nIdx)
self._mapNode.svAchievementList:SetAnim(0.06)
self._mapNode.svAchievementList:Init(#self.mapAllAchievement[self.curType], self, self.OnGridRefresh)
local mapCount = PlayerData.Achievement:GetAchievementTypeCount(self.curType)
NovaAPI.SetTMPText(self._mapNode.TMPCupCount[1], mapCount.tbRarity[GameEnum.itemRarity.SSR])
NovaAPI.SetTMPText(self._mapNode.TMPCupCount[2], mapCount.tbRarity[GameEnum.itemRarity.SR])
NovaAPI.SetTMPText(self._mapNode.TMPCupCount[3], mapCount.tbRarity[GameEnum.itemRarity.R])
self:SetPngSprite(self._mapNode.imgFlagIcon, "UI/big_sprites/zs_achievement_icon_0" .. nIdx)
NovaAPI.SetImageNativeSize(self._mapNode.imgFlagIcon)
local bShowAllReceive = false
for _, mapAchievement in ipairs(self.mapAllAchievement[self.curType]) do
if mapAchievement.nStatus == 1 then
bShowAllReceive = true
end
end
self._panel.nDetailIdx = nIdx
self._mapNode.btnAllReceive.gameObject:SetActive(bShowAllReceive)
end
function AchievementDetailCtrl:OnBtnClick_AllReceive(btn, nIdx)
local tbId = {}
for _, mapAchievement in ipairs(self.mapAllAchievement[self.curType]) do
if mapAchievement.nStatus == 1 then
table.insert(tbId, mapAchievement.nId)
end
end
PlayerData.Achievement:SendAchievementRewardReq(tbId, self.curType, nil)
end
function AchievementDetailCtrl:OnEvent_ReceiveReward()
self:UpdateData()
self._mapNode.svAchievementList:Init(#self.mapAllAchievement[self.curType], self, self.OnGridRefresh)
local mapCount = PlayerData.Achievement:GetAchievementTypeCount(self.curType)
NovaAPI.SetTMPText(self._mapNode.TMPCupCount[1], mapCount.tbRarity[GameEnum.itemRarity.SSR])
NovaAPI.SetTMPText(self._mapNode.TMPCupCount[2], mapCount.tbRarity[GameEnum.itemRarity.SR])
NovaAPI.SetTMPText(self._mapNode.TMPCupCount[3], mapCount.tbRarity[GameEnum.itemRarity.R])
local bShowAllReceive = false
for _, mapAchievement in ipairs(self.mapAllAchievement[self.curType]) do
if mapAchievement.nStatus == 1 then
bShowAllReceive = true
end
end
self._mapNode.btnAllReceive.gameObject:SetActive(bShowAllReceive)
end
return AchievementDetailCtrl