Files
Endfield-Data/LuaScripts/UI/Panels/GachaOptional/GachaOptionalCtrl.lua
2026-01-31 21:42:01 +07:00

263 lines
7.5 KiB
Lua

local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
local PANEL_ID = PanelId.GachaOptional
GachaOptionalCtrl = HL.Class('GachaOptionalCtrl', uiCtrl.UICtrl)
local csGachaSystem = GameInstance.player.gacha
GachaOptionalCtrl.s_messages = HL.StaticField(HL.Table) << {
[MessageConst.ON_GACHA_POOL_ROLE_DATA_CHANGED] = 'OnGachaPoolRoleDataChanged',
}
GachaOptionalCtrl.m_info = HL.Field(HL.Table)
GachaOptionalCtrl.m_optionalCellListCache = HL.Field(HL.Forward("UIListCache"))
GachaOptionalCtrl.m_waitResult = HL.Field(HL.Boolean) << false
GachaOptionalCtrl.m_curSelectIndex = HL.Field(HL.Number) << 0
GachaOptionalCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
self:_InitUI()
self:_InitData(arg)
self:_UpdateData()
self:_RefreshAllUI()
end
GachaOptionalCtrl.OnShow = HL.Override() << function(self)
local cell = self.m_optionalCellListCache:Get(self.m_curSelectIndex)
if cell then
InputManagerInst.controllerNaviManager:SetTarget(cell.naviDeco)
end
end
GachaOptionalCtrl._InitData = HL.Method(HL.Table) << function(self, arg)
self.m_info = arg
local charInfos = {}
local charBag = GameInstance.player.charBag
self.m_info.charInfos = charInfos
for _, charId in pairs(self.m_info.charIds) do
local bagCharInfo = charBag:GetCharInfoByTemplateId(charId, GEnums.CharType.Default)
local isOwned = bagCharInfo ~= nil
local potentialLevel = 0
local isPotentialMax = false
if isOwned then
potentialLevel = bagCharInfo.potentialLevel
isPotentialMax = potentialLevel >= UIConst.CHAR_MAX_POTENTIAL
end
local charCfg = Tables.characterTable[charId]
local info = {
charId = charId,
name = charCfg.name,
engName = charCfg.engName,
professionIcon = CharInfoUtils.getCharProfessionIconName(charCfg.profession),
isOwned = isOwned,
potentialLevel = potentialLevel,
isPotentialMax = isPotentialMax,
selectImg = string.format("gachapool_role_selected_%s", charId),
selectGlassImg = string.format("gachapool_role_glass_%s", charId),
unselectImg = string.format("gachapool_role_unselected_%s", charId),
instId = "",
}
table.insert(charInfos, info)
end
end
GachaOptionalCtrl._UpdateData = HL.Method() << function(self)
self.m_curSelectIndex = 1
end
GachaOptionalCtrl._InitUI = HL.Method() << function(self)
self.view.btnBack.onClick:AddListener(function()
self:PlayAnimationOutAndClose()
end)
self.view.inviteBtn.onClick:AddListener(function()
local charInfo = self.m_info.charInfos[self.m_curSelectIndex]
local charId = charInfo.charId
local content = string.format(Language.LUA_GACHA_STANDARD_CHOICE_PACK_CONFIRM_INVITE, charInfo.name)
Notify(MessageConst.SHOW_POP_UP, {
content = content,
onConfirm = function()
csGachaSystem:SendSelectChoicePackReq(self.m_info.poolId, charId)
self.m_waitResult = true
end,
})
end)
self.m_optionalCellListCache = UIUtils.genCellCache(self.view.optionalCell)
self.view.controllerHintPlaceholder:InitControllerHintPlaceholder({ self.view.inputGroup.groupId })
end
GachaOptionalCtrl._RefreshAllUI = HL.Method() << function(self)
self.m_optionalCellListCache:Refresh(#self.m_info.charInfos, function(cell, luaIndex)
self:_RefreshOptionalCell(cell, luaIndex)
end)
self.view.remainInvitableNumTxt.text = self.m_info.remainChoicePackProgress
self.view.invitableStateCtrl:SetState(self.m_info.remainChoicePackProgress <= 0 and "Invitable" or "NotInvitable")
end
GachaOptionalCtrl._RefreshOptionalCell = HL.Method(HL.Any, HL.Number) << function(self, _cell, luaIndex)
local charInfo = self.m_info.charInfos[luaIndex]
local cell = _cell
cell.selectStateCtrl:SetState(luaIndex == self.m_curSelectIndex and "Selected" or "Unselected")
cell.naviDeco.onIsNaviTargetChanged = function(active)
if active then
self:_OnClickOptionalCell(luaIndex)
end
end
cell.naviDeco.hideNaviHint = true
local selectNode = cell.selectedNode
selectNode.englishNameTxt.text = charInfo.engName
selectNode.nameTxt.text = charInfo.name
if charInfo.isPotentialMax then
selectNode.ownedStateCtrl:SetState("FullPotential")
else
selectNode.ownedStateCtrl:SetState(charInfo.isOwned and "Owned" or "NotOwned")
end
selectNode.potentialStar:InitCharPotentialStarByLevel(charInfo.potentialLevel, false)
selectNode.professionIcon:LoadSprite(UIConst.UI_SPRITE_CHAR_PROFESSION, charInfo.professionIcon)
selectNode.roleSelectedImg:LoadSprite(UIConst.UI_SPRITE_GACHA_POOL, charInfo.selectImg)
selectNode.roleGlassImg:LoadSprite(UIConst.UI_SPRITE_GACHA_POOL, charInfo.selectGlassImg)
selectNode.starGroup:InitStarGroup(UIConst.CHAR_MAX_RARITY)
selectNode.previewBtn.onClick:RemoveAllListeners()
selectNode.previewBtn.onClick:AddListener(function()
local ids = self.m_info.charIds
local charInstIdList = {}
for _, id in ipairs(ids) do
local info = GameInstance.player.charBag:CreateClientInitialGachaPoolChar(id)
table.insert(charInstIdList, info.instId)
end
local maxCharInstIdList = {}
for _, id in ipairs(ids) do
local info = GameInstance.player.charBag:CreateClientPerfectGachaPoolCharInfo(id)
table.insert(maxCharInstIdList, info.instId)
end
CharInfoUtils.openCharInfoBestWay({
initCharInfo = {
instId = charInstIdList[luaIndex],
templateId = charInfo.charId,
charInstIdList = charInstIdList,
maxCharInstIdList = maxCharInstIdList,
isShowPreview = true,
},
onClose = function()
GameInstance.player.charBag:ClearAllClientCharAndItemData()
end,
})
end)
local unselectNode = cell.unselectedNode
unselectNode.roleUnselectedImg:LoadSprite(UIConst.UI_SPRITE_GACHA_POOL, charInfo.unselectImg)
unselectNode.nameTxt.text = charInfo.name
unselectNode.ownedStateCtrl:SetState(charInfo.isOwned and "Owned" or "NotOwned")
unselectNode.potentialStar:InitCharPotentialStarByLevel(charInfo.potentialLevel, false)
unselectNode.btn.onClick:RemoveAllListeners()
unselectNode.btn.onClick:AddListener(function()
self:_OnClickOptionalCell(luaIndex)
end)
end
GachaOptionalCtrl.OnGachaPoolRoleDataChanged = HL.Method() << function(self)
if self.m_waitResult then
self:Close()
if self.m_info.onSuccess then
self.m_info.onSuccess()
end
end
end
GachaOptionalCtrl._OnClickOptionalCell = HL.Method(HL.Number) << function(self, luaIndex)
if self.m_curSelectIndex ~= luaIndex then
local oldIndex = self.m_curSelectIndex
self.m_curSelectIndex = luaIndex
local cell = self.m_optionalCellListCache:Get(luaIndex)
if cell then
cell.selectStateCtrl:SetState("Selected")
end
local oldCell = self.m_optionalCellListCache:Get(oldIndex)
if oldCell then
oldCell.selectStateCtrl:SetState("Unselected")
end
end
end
HL.Commit(GachaOptionalCtrl)