330 lines
10 KiB
Lua
330 lines
10 KiB
Lua
|
|
local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
|
|
local PANEL_ID = PanelId.BattlePassWeaponCase
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BattlePassWeaponCaseCtrl = HL.Class('BattlePassWeaponCaseCtrl', uiCtrl.UICtrl)
|
|
|
|
local CellStateName = {
|
|
Normal = 'Normal',
|
|
Selected = 'Selected',
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BattlePassWeaponCaseCtrl.s_messages = HL.StaticField(HL.Table) << {
|
|
[MessageConst.ON_SC_OPEN_USABLE_ITEM_CHEST] = '_OnOpenChest',
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BattlePassWeaponCaseCtrl.m_arg = HL.Field(HL.Table)
|
|
|
|
|
|
BattlePassWeaponCaseCtrl.m_selectedRewardId = HL.Field(HL.Any)
|
|
|
|
|
|
BattlePassWeaponCaseCtrl.m_selectedCell = HL.Field(HL.Table)
|
|
|
|
|
|
BattlePassWeaponCaseCtrl.m_chestData = HL.Field(HL.Userdata)
|
|
|
|
|
|
BattlePassWeaponCaseCtrl.isAutoOpenWhenGet = HL.Field(HL.Boolean) << false
|
|
|
|
|
|
BattlePassWeaponCaseCtrl.m_isPreview = HL.Field(HL.Boolean) << false
|
|
|
|
|
|
BattlePassWeaponCaseCtrl.m_itemCellCache = HL.Field(HL.Forward("UIListCache"))
|
|
|
|
|
|
|
|
BattlePassWeaponCaseCtrl.OpenBPWeaponCase = HL.StaticMethod(HL.Any) << function(arg)
|
|
local itemId, isPreview, isAutoOpenWhenGet, subTitle = unpack(arg)
|
|
local luaArg = {
|
|
itemId = itemId,
|
|
isPreview = isPreview,
|
|
isAutoOpenWhenGet = isAutoOpenWhenGet,
|
|
subTitle = subTitle
|
|
}
|
|
UIManager:Open(PanelId.BattlePassWeaponCase, luaArg)
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
BattlePassWeaponCaseCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
|
|
self.m_arg = arg
|
|
self.isAutoOpenWhenGet = self.m_arg.isAutoOpenWhenGet == true
|
|
self.m_isPreview = self.m_arg.isPreview == true
|
|
self.view.txtDesc.text = Language.LUA_BATTLEPASS_WEAPON_CHEST_TITLE
|
|
local hint = arg.subTitle
|
|
if string.isEmpty(hint) then
|
|
hint = self.isAutoOpenWhenGet and Language.LUA_BATTLEPASS_WEAPON_CHEST_SUBTITLE or ""
|
|
end
|
|
self.view.txtHint.text = hint
|
|
self.view.txtHint.gameObject:SetActive(not string.isEmpty(hint))
|
|
self.view.titleTxt.text = self.m_isPreview and
|
|
Language.LUA_BATTLEPASS_WEAPON_CHEST_TITLE_LEFT_PREVIEW or Language.LUA_BATTLEPASS_WEAPON_CHEST_TITLE_LEFT
|
|
self.view.desc3Text.gameObject:SetActive(not self.m_isPreview)
|
|
self.m_itemCellCache = UIUtils.genCellCache(self.view.weaponCell)
|
|
self:_InitAction()
|
|
self:_InitController()
|
|
self:_Refresh()
|
|
self.view.scrollRect.normalizedPosition = 0
|
|
end
|
|
|
|
|
|
|
|
BattlePassWeaponCaseCtrl._InitAction = HL.Method() << function(self)
|
|
self.view.btnBack.onClick:AddListener(function()
|
|
self:_CloseWithConfirm()
|
|
end)
|
|
self.view.btnMore.gameObject:SetActive(self.m_isPreview)
|
|
self.view.btnMore.onClick:AddListener(function()
|
|
self:PlayAnimationOutAndClose()
|
|
end)
|
|
self.view.btnCancel.gameObject:SetActive(not self.m_isPreview)
|
|
self.view.btnCancel.onClick:AddListener(function()
|
|
self:_CloseWithConfirm()
|
|
end)
|
|
self.view.btnConfirm.onClick:AddListener(function()
|
|
if self.m_selectedRewardId then
|
|
local itemId = UIUtils.getRewardFirstItem(self.m_selectedRewardId).id
|
|
Notify(MessageConst.SHOW_POP_UP, {
|
|
content = Language.LUA_BATTLEPASS_WEAPON_CHEST_CONFIRM_TITLE,
|
|
subContent = string.format(Language.LUA_BATTLEPASS_WEAPON_CHEST_CONFIRM_CONTENT_FORMAT, Tables.itemTable[itemId].name),
|
|
onConfirm = function()
|
|
GameInstance.player.inventory:OpenUsableItemChest(self.m_chestData.id, 1, {self.m_selectedRewardId })
|
|
end,
|
|
})
|
|
end
|
|
end)
|
|
self:_UpdateBtns()
|
|
end
|
|
|
|
|
|
|
|
BattlePassWeaponCaseCtrl._CloseWithConfirm = HL.Method() << function(self)
|
|
if self.isAutoOpenWhenGet then
|
|
Notify(MessageConst.SHOW_POP_UP, {
|
|
content = Language.LUA_BATTLEPASS_WEAPON_CHEST_CANCEL_TITLE,
|
|
subContent = Language.LUA_BATTLEPASS_WEAPON_CHEST_CANCEL_CONTENT,
|
|
onConfirm = function()
|
|
self:PlayAnimationOutAndClose()
|
|
end,
|
|
})
|
|
else
|
|
self:PlayAnimationOutAndClose()
|
|
end
|
|
end
|
|
|
|
|
|
|
|
BattlePassWeaponCaseCtrl._UpdateBtns = HL.Method() << function(self)
|
|
local isSelected = self.m_selectedRewardId ~= nil
|
|
self.view.btnConfirm.gameObject:SetActive(not self.m_isPreview and isSelected)
|
|
self.view.emptyNode.gameObject:SetActive(not self.m_isPreview and not isSelected)
|
|
end
|
|
|
|
|
|
|
|
BattlePassWeaponCaseCtrl._Refresh = HL.Method() << function(self)
|
|
local _, itemChestData = Tables.usableItemChestTable:TryGetValue(self.m_arg.itemId)
|
|
self.m_chestData = itemChestData
|
|
if not itemChestData then
|
|
self.m_itemCellCache:Refresh(0)
|
|
return
|
|
end
|
|
local itemCount = #itemChestData.rewardIdList
|
|
|
|
self.m_itemCellCache:Refresh(itemCount, function(cell, index)
|
|
local rewardId = itemChestData.rewardIdList[CSIndex(index)]
|
|
local weaponId = UIUtils.getRewardFirstItem(rewardId).id
|
|
cell.nodeState:SetState(CellStateName.Normal)
|
|
cell.btnConfirm.onClick:RemoveAllListeners()
|
|
cell.btnConfirm.onClick:AddListener(function()
|
|
if self.m_isPreview and not DeviceInfo.usingController then
|
|
self:_PreviewWeapon(weaponId)
|
|
return
|
|
end
|
|
self:_OnWeaponCellClicked(cell, rewardId)
|
|
end)
|
|
cell.btnDetail.onClick:RemoveAllListeners()
|
|
cell.btnDetail.onClick:AddListener(function()
|
|
self:_PreviewWeapon(weaponId)
|
|
end)
|
|
local _, itemData = Tables.itemTable:TryGetValue(weaponId)
|
|
if itemData then
|
|
cell.weaponImg:LoadSprite(UIConst.UI_SPRITE_GACHA_WEAPON, itemData.iconId)
|
|
cell.nameTxt.text = itemData.name
|
|
local stateName = self:_GetCellRarityStateName(itemData.rarity)
|
|
cell.selectedNode:SetState(stateName)
|
|
cell.unselectedNode:SetState(stateName)
|
|
cell.numTxt.text = tostring(Utils.getItemCount(weaponId))
|
|
cell.starGroup:InitStarGroup(itemData.rarity)
|
|
end
|
|
|
|
if DeviceInfo.usingController then
|
|
cell.btnDetailInputGroup.enabled = false
|
|
if not self.m_isPreview then
|
|
InputManagerInst:SetBindingText(cell.btnConfirm.hoverConfirmBindingId, Language.LUA_BATTLEPASS_WEAPON_SELECT)
|
|
else
|
|
InputManagerInst:SetBindingText(cell.btnConfirm.hoverConfirmBindingId, "")
|
|
end
|
|
|
|
cell.btnConfirm.onIsNaviTargetChanged = function(isTarget)
|
|
cell.btnDetailInputGroup.enabled = isTarget
|
|
end
|
|
|
|
if index == 1 then
|
|
UIUtils.setAsNaviTarget(cell.btnConfirm)
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
BattlePassWeaponCaseCtrl._OnWeaponCellClicked = HL.Method(HL.Table, HL.Any) << function(self, cell, rewardId)
|
|
if cell == self.m_selectedCell then
|
|
if DeviceInfo.usingController then
|
|
return
|
|
end
|
|
self.m_selectedCell.nodeState:SetState(CellStateName.Normal)
|
|
self.m_selectedCell = nil
|
|
self.m_selectedRewardId = nil
|
|
self:_UpdateBtns()
|
|
return
|
|
end
|
|
if self.m_selectedCell then
|
|
self.m_selectedCell.nodeState:SetState(CellStateName.Normal)
|
|
end
|
|
cell.nodeState:SetState(CellStateName.Selected)
|
|
self.m_selectedCell = cell
|
|
self.m_selectedRewardId = rewardId
|
|
self:_UpdateBtns()
|
|
end
|
|
|
|
|
|
|
|
|
|
BattlePassWeaponCaseCtrl._PreviewWeapon = HL.Method(HL.String) << function(self, weaponId)
|
|
local weaponGroupData = {
|
|
title = Language.LUA_BATTLEPASS_WEAPON_CHEST_TITLE,
|
|
weaponIds = {},
|
|
}
|
|
for _, rewardId in pairs(self.m_chestData.rewardIdList) do
|
|
local weaponId = UIUtils.getRewardFirstItem(rewardId).id
|
|
table.insert(weaponGroupData.weaponIds, weaponId)
|
|
end
|
|
|
|
|
|
local showWeaponPreviewArgs = {
|
|
isWeaponPreview = true,
|
|
weaponId = weaponId,
|
|
weaponGroups = { weaponGroupData },
|
|
}
|
|
PhaseManager:OpenPhase(PhaseId.Wiki, showWeaponPreviewArgs)
|
|
end
|
|
|
|
|
|
|
|
|
|
BattlePassWeaponCaseCtrl._GetCellRarityStateName = HL.Method(HL.Number).Return(HL.String) << function(self, rarity)
|
|
local stateName = ''
|
|
if rarity <= 4 then
|
|
stateName = 'Low'
|
|
elseif rarity == 5 then
|
|
stateName = 'Mid'
|
|
else
|
|
stateName = 'High'
|
|
end
|
|
return stateName
|
|
end
|
|
|
|
|
|
|
|
|
|
BattlePassWeaponCaseCtrl._OnOpenChest = HL.Method(HL.Table) << function(self, args)
|
|
local openCount = args[1]
|
|
if openCount == 0 then
|
|
Notify(MessageConst.SHOW_TOAST, Language.LUA_USABLE_ITEM_CHEST_OPEN_FAILED)
|
|
return
|
|
end
|
|
self:Close()
|
|
local rewardPack = GameInstance.player.inventory:ConsumeLatestRewardPackOfType(CS.Beyond.GEnums.RewardSourceType.ItemCase)
|
|
local items = {}
|
|
local chars = nil
|
|
if rewardPack and rewardPack.rewardSourceType == CS.Beyond.GEnums.RewardSourceType.ItemCase then
|
|
for _, itemBundle in pairs(rewardPack.itemBundleList) do
|
|
local _, itemData = Tables.itemTable:TryGetValue(itemBundle.id)
|
|
if itemData then
|
|
local putInside = false
|
|
for i = 1, #items do
|
|
if items[i].id == itemData.id and itemBundle.instId == 0 then
|
|
items[i].count = items[i].count + itemBundle.count
|
|
putInside = true
|
|
break
|
|
end
|
|
end
|
|
|
|
if not putInside then
|
|
table.insert(items, {id = itemBundle.id,
|
|
count = itemBundle.count,
|
|
instData = itemBundle.instData,
|
|
instId = itemBundle.instId,
|
|
rarity = itemData.rarity,
|
|
type = itemData.type:ToInt()})
|
|
end
|
|
end
|
|
end
|
|
table.sort(items, Utils.genSortFunction({"rarity", "type", "id"}, false))
|
|
|
|
chars = rewardPack.chars
|
|
end
|
|
local rewardPanelArgs = {}
|
|
rewardPanelArgs.items = items
|
|
rewardPanelArgs.chars = chars
|
|
Notify(MessageConst.SHOW_SYSTEM_REWARDS, rewardPanelArgs)
|
|
end
|
|
|
|
|
|
|
|
BattlePassWeaponCaseCtrl._InitController = HL.Method() << function(self)
|
|
self.view.controllerHintPlaceholder:InitControllerHintPlaceholder({self.view.inputGroup.groupId})
|
|
end
|
|
|
|
HL.Commit(BattlePassWeaponCaseCtrl)
|