Files
Endfield-Data/LuaScripts/UI/Panels/AchievementMain/AchievementMainCtrl.lua
2025-12-02 20:37:18 +07:00

148 lines
4.0 KiB
Lua

local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
local PANEL_ID = PanelId.AchievementMain
local PHASE_ID = PhaseId.AchievementMain
AchievementMainCtrl = HL.Class('AchievementMainCtrl', uiCtrl.UICtrl)
AchievementMainCtrl.s_messages = HL.StaticField(HL.Table) << {
[MessageConst.ON_ACHIEVEMENT_DISPLAY_UPDATE] = '_OnDisplayUpdate',
}
AchievementMainCtrl.OpenAchievementMainPanel = HL.StaticMethod() << function()
PhaseManager:OpenPhase(PHASE_ID)
end
AchievementMainCtrl.m_achievementCountInfo = HL.Field(HL.Any) << nil
AchievementMainCtrl.m_displayBundles = HL.Field(HL.Any) << nil
AchievementMainCtrl.m_editSwitch = HL.Field(HL.Any) << nil
local IRON_LEVEL = 1
local SILVER_LEVEL = 2
local GOLD_LEVEL = 3
AchievementMainCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
self:_InitViews()
self:_LoadData()
self:_RenderView()
end
AchievementMainCtrl._InitViews = HL.Method() << function(self)
self.view.controllerHintPlaceholder:InitControllerHintPlaceholder({ self.view.inputGroup.groupId })
self.view.helpBtn.onClick:AddListener(function()
Notify(MessageConst.SHOW_INTRO, "achievement")
end)
self.view.btnClose.onClick:AddListener(function()
PhaseManager:PopPhase(PHASE_ID)
end)
self.view.redDot:InitRedDot("AchievementMain")
self.view.detailBtn.onClick:AddListener(function()
UIManager:Open(PanelId.AchievementList)
end)
local switchBuilder = CS.Beyond.UI.UIAnimationSwitchTween.Builder()
switchBuilder.animWrapper = self.view.mainAnimationWrapper
switchBuilder.dontDisableGameObject = true
self.m_editSwitch = switchBuilder:Build()
self.m_editSwitch:Reset(false)
self.view.editBtn.onClick:AddListener(function()
UIManager:Open(PanelId.AchievementEdit, {
onClose = function()
self.m_editSwitch.isShow = false
end
})
self.m_editSwitch.isShow = true
end)
end
AchievementMainCtrl._LoadData = HL.Method() << function(self)
self.m_achievementCountInfo = {}
self.m_displayBundles = {}
local playerAchievements = GameInstance.player.achievementSystem.achievementData;
local achievementTable = Tables.achievementTable
for i, info in pairs(playerAchievements.achievementInfos) do
local level = info.level
if self.m_achievementCountInfo[level] == nil then
self.m_achievementCountInfo[level] = 0
end
self.m_achievementCountInfo[level] = self.m_achievementCountInfo[level] + 1
end
for slotIndex, achievementId in pairs(playerAchievements.displayInfo) do
if not string.isEmpty(achievementId) then
local hasPlayer, playerAchievement = playerAchievements.achievementInfos:TryGetValue(achievementId)
local hasData, achievementData = achievementTable:TryGetValue(achievementId)
self.m_displayBundles[slotIndex] = {
achievementId = achievementId,
level = hasPlayer and playerAchievement.level or false,
isPlated = hasPlayer and playerAchievement.isPlated or false,
isRare = hasData and achievementData.applyRareEffect or false,
}
end
end
end
AchievementMainCtrl._RenderView = HL.Method() << function(self)
local ironCount = self.m_achievementCountInfo[IRON_LEVEL] == nil and 0 or self.m_achievementCountInfo[IRON_LEVEL]
local silverCount = self.m_achievementCountInfo[SILVER_LEVEL] == nil and 0 or self.m_achievementCountInfo[SILVER_LEVEL]
local goldCount = self.m_achievementCountInfo[GOLD_LEVEL] == nil and 0 or self.m_achievementCountInfo[GOLD_LEVEL]
self.view.sumAllTxt.text = ironCount + silverCount + goldCount
self.view.sumIronTxt.text = ironCount
self.view.sumSilverTxt.text = silverCount
self.view.sumGoldTxt.text = goldCount
self.view.medalGroup:InitMedalGroup(self.m_displayBundles, self.view.config.MEDAL_DISPLAY_SLOT_COUNT)
end
AchievementMainCtrl._OnDisplayUpdate = HL.Method() << function(self)
self:_LoadData()
self:_RenderView()
end
HL.Commit(AchievementMainCtrl)