437 lines
11 KiB
Lua
437 lines
11 KiB
Lua
|
|
local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
|
|
local PANEL_ID = PanelId.RewardsPopUpForSystem
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RewardsPopUpForSystemCtrl = HL.Class('RewardsPopUpForSystemCtrl', uiCtrl.UICtrl)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RewardsPopUpForSystemCtrl.s_messages = HL.StaticField(HL.Table) << {
|
|
}
|
|
|
|
|
|
|
|
RewardsPopUpForSystemCtrl.m_args = HL.Field(HL.Table)
|
|
|
|
|
|
RewardsPopUpForSystemCtrl.m_items = HL.Field(HL.Table)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RewardsPopUpForSystemCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
|
|
self.view.closeBtn.onClick:AddListener(function()
|
|
if UIManager:IsShow(PanelId.ItemTips) then
|
|
return
|
|
end
|
|
self:_OnClickClose()
|
|
end)
|
|
self.view.fullMask.onClick:AddListener(function()
|
|
if UIManager:IsShow(PanelId.ItemTips) then
|
|
return
|
|
end
|
|
self:_OnClickClose()
|
|
end)
|
|
self.view.skipBtn.onClick:AddListener(function()
|
|
self:_OnClickSkip()
|
|
end)
|
|
|
|
local getItemCells = UIUtils.genCachedCellFunction(self.view.rewardsScrollList)
|
|
self.view.rewardsScrollList.onUpdateCell:AddListener(function(object, csIndex)
|
|
local cell = getItemCells(object)
|
|
self:_OnUpdateCell(cell, LuaIndex(csIndex))
|
|
end)
|
|
self.view.rewardsScrollList.onGraduallyShowFinish:AddListener(function()
|
|
self.view.skipBtn.gameObject:SetActive(false)
|
|
self.view.controllerHintPlaceholder.gameObject:SetActive(true)
|
|
local firstItemGo = self.view.rewardsScrollList:Get(0)
|
|
if firstItemGo then
|
|
self.view.focusItemKeyHint.gameObject:SetActive(true)
|
|
self.view.focusItemKeyHint.transform.position = firstItemGo.transform.position
|
|
local keyHintPos = self.view.focusItemKeyHint.transform.localPosition
|
|
keyHintPos.x = keyHintPos.x - 50
|
|
keyHintPos.y = keyHintPos.y - 90
|
|
self.view.focusItemKeyHint.transform.localPosition = keyHintPos
|
|
end
|
|
end)
|
|
|
|
self.view.naviGroup.getDefaultSelectableFunc = function()
|
|
local cell = getItemCells(1)
|
|
return cell and cell.view.button or nil
|
|
end
|
|
self.view.naviGroup.onIsFocusedChange:AddListener(function(isFocused)
|
|
if not isFocused then
|
|
Notify(MessageConst.HIDE_ITEM_TIPS)
|
|
end
|
|
end)
|
|
self.view.controllerHintPlaceholder:InitControllerHintPlaceholder({self.view.inputGroup.groupId})
|
|
end
|
|
|
|
|
|
|
|
RewardsPopUpForSystemCtrl.OnShow = HL.Override() << function(self)
|
|
|
|
Notify(MessageConst.TOGGLE_IN_MAIN_HUD_STATE, { key = "systemRewards", isInMainHud = false })
|
|
end
|
|
|
|
|
|
|
|
RewardsPopUpForSystemCtrl.OnHide = HL.Override() << function(self)
|
|
Notify(MessageConst.TOGGLE_IN_MAIN_HUD_STATE, { key = "systemRewards", isInMainHud = true })
|
|
end
|
|
|
|
|
|
|
|
RewardsPopUpForSystemCtrl.OnClose = HL.Override() << function(self)
|
|
Notify(MessageConst.TOGGLE_IN_MAIN_HUD_STATE, { key = "systemRewards", isInMainHud = true })
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RewardsPopUpForSystemCtrl.ShowSystemRewards = HL.StaticMethod(HL.Table) << function(args)
|
|
if RewardsPopUpForSystemCtrl._TryShowCharRewards(args) then
|
|
return
|
|
end
|
|
Notify(MessageConst.HIDE_ITEM_TIPS)
|
|
if UIManager:IsOpen(PANEL_ID) then
|
|
UIManager:SetTopOrder(PANEL_ID)
|
|
end
|
|
|
|
local self = UIManager:AutoOpen(PANEL_ID, nil, false)
|
|
self:_ShowRewards(args)
|
|
end
|
|
|
|
|
|
|
|
RewardsPopUpForSystemCtrl.CSShowSystemRewards = HL.StaticMethod(HL.Table) << function(args)
|
|
local title, items, inputChars, onComplete = unpack(args)
|
|
local newArgs = {
|
|
title = title,
|
|
items = items,
|
|
chars = inputChars,
|
|
onComplete = onComplete
|
|
}
|
|
RewardsPopUpForSystemCtrl.ShowSystemRewards(newArgs)
|
|
end
|
|
|
|
|
|
|
|
RewardsPopUpForSystemCtrl._TryShowCharRewards = HL.StaticMethod(HL.Any).Return(HL.Boolean) << function(args)
|
|
if not args.chars then
|
|
return false
|
|
end
|
|
|
|
local chars
|
|
if type(args.chars) == "table" then
|
|
chars = args.chars
|
|
else
|
|
|
|
chars = {}
|
|
for _, v in pairs(args.chars) do
|
|
|
|
local msg = v
|
|
local info = {
|
|
charId = msg.CharTemplateId,
|
|
isNew = not msg.IsConverted,
|
|
}
|
|
info.rarity = Tables.characterTable[info.charId].rarity
|
|
info.items = {}
|
|
if not string.isEmpty(msg.ConvertedItemId) then
|
|
table.insert(info.items, { id = msg.ConvertedItemId, count = 1 })
|
|
end
|
|
if not string.isEmpty(msg.ConvertedRewardId) then
|
|
UIUtils.getRewardItems(msg.ConvertedRewardId, info.items)
|
|
end
|
|
table.insert(chars, info)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
local items = RewardsPopUpForSystemCtrl._TryConvertCSItemsLuaToTable(args.items)
|
|
local finalItems = {}
|
|
local hasCharItem = false
|
|
|
|
local initWeaponIds = {}
|
|
for _, charInfo in pairs(chars) do
|
|
local _, charPresetCfg = Tables.gachaPoolCharPresetTable:TryGetValue(charInfo.charId)
|
|
table.insert(initWeaponIds, charPresetCfg.initialWeaponId)
|
|
end
|
|
|
|
local itemCount = #items
|
|
for i = itemCount, 1, -1 do
|
|
local itemInfo = items[i]
|
|
local itemCfg = Tables.itemTable[itemInfo.id]
|
|
if itemCfg.type == GEnums.ItemType.Char then
|
|
|
|
hasCharItem = true
|
|
elseif lume.find(Tables.charGachaConst.CharConvertItemFilterListClientShow, itemInfo.id) or itemCfg.type == GEnums.ItemType.CharPotentialUp then
|
|
|
|
table.insert(finalItems, itemInfo)
|
|
table.remove(items, i)
|
|
elseif lume.find(initWeaponIds, itemInfo.id) then
|
|
|
|
table.remove(items, i)
|
|
end
|
|
end
|
|
|
|
if not hasCharItem then
|
|
for _, charInfo in pairs(chars) do
|
|
local itemId = charInfo.charId
|
|
local itemData = Tables.itemTable[itemId]
|
|
local itemInfo = {
|
|
id = itemId,
|
|
count = 1,
|
|
sortId1 = itemData.sortId1,
|
|
sortId2 = itemData.sortId2,
|
|
rarity = itemData.rarity,
|
|
}
|
|
table.insert(items, itemInfo)
|
|
end
|
|
end
|
|
table.sort(items, Utils.genSortFunction("rarity", "sortId1", "sortId2", "id"))
|
|
|
|
args.chars = nil
|
|
args.items = finalItems
|
|
|
|
|
|
local charRewardsArg = {
|
|
items = items,
|
|
closeFast = true,
|
|
onComplete = function()
|
|
|
|
PhaseManager:OpenPhaseFast(PhaseId.GachaChar, {
|
|
chars = chars,
|
|
onComplete = function()
|
|
|
|
if #finalItems > 0 then
|
|
RewardsPopUpForSystemCtrl.ShowSystemRewards(args)
|
|
end
|
|
end
|
|
})
|
|
end
|
|
}
|
|
RewardsPopUpForSystemCtrl.ShowSystemRewards(charRewardsArg)
|
|
return true
|
|
end
|
|
|
|
|
|
|
|
RewardsPopUpForSystemCtrl._TryConvertCSItemsLuaToTable = HL.StaticMethod(HL.Any).Return(HL.Table) << function(csItems)
|
|
if type(csItems) == "table" then
|
|
return csItems
|
|
else
|
|
|
|
|
|
local items = {}
|
|
for _, v in pairs(csItems) do
|
|
table.insert(items, { id = v.id, count = v.count })
|
|
end
|
|
return items
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
RewardsPopUpForSystemCtrl._ShowRewards = HL.Method(HL.Table) << function(self, args)
|
|
self.m_args = args
|
|
|
|
if not string.isEmpty(args.title) then
|
|
self.view.titleTxt.text = args.title
|
|
else
|
|
self.view.titleTxt.text = Language.LUA_DEFAULT_SYSTEM_REWARD_POP_UP_TITLE
|
|
end
|
|
if args.subTitle then
|
|
self.view.subTitleTxt.text = args.subTitle
|
|
self.view.subTitleTxt.gameObject:SetActive(true)
|
|
else
|
|
self.view.subTitleTxt.gameObject:SetActive(false)
|
|
end
|
|
|
|
if args.icon then
|
|
self.view.rewardsTypeIcon:LoadSprite(UIConst.UI_SPRITE_REWARDS, args.icon)
|
|
else
|
|
self.view.rewardsTypeIcon:LoadSprite(UIConst.UI_SPRITE_REWARDS, "icon_common_rewards")
|
|
end
|
|
|
|
local items = RewardsPopUpForSystemCtrl._TryConvertCSItemsLuaToTable(args.items)
|
|
local count = #items
|
|
|
|
for k = 1, count do
|
|
local v = items[k]
|
|
if type(v) ~= "table" then
|
|
v = { id = v.id, count = v.count }
|
|
items[k] = v
|
|
end
|
|
local iData = Tables.itemTable[v.id]
|
|
v.sortId1 = iData.sortId1
|
|
v.sortId2 = iData.sortId2
|
|
v.rarity = iData.rarity
|
|
end
|
|
table.sort(items, Utils.genSortFunction(UIConst.COMMON_ITEM_SORT_KEYS))
|
|
|
|
self.m_items = items
|
|
|
|
self.view.rewardsScrollList.gameObject:SetActive(false)
|
|
self.view.rewardsScrollList:UpdateCount(count, true)
|
|
|
|
self.view.skipBtn.gameObject:SetActive(true)
|
|
end
|
|
|
|
|
|
|
|
RewardsPopUpForSystemCtrl._OnClickSkip = HL.Method() << function(self)
|
|
self.view.luaPanel.animationWrapper:SkipInAnimation()
|
|
self.view.rewardsScrollList:SkipGraduallyShow()
|
|
end
|
|
|
|
|
|
|
|
RewardsPopUpForSystemCtrl._OnClickClose = HL.Method() << function(self)
|
|
if self.m_args.closeFast then
|
|
local onComplete = self.m_args.onComplete
|
|
self:_ClearData()
|
|
self:Hide()
|
|
if onComplete then
|
|
onComplete()
|
|
end
|
|
else
|
|
self:PlayAnimationOutWithCallback(function()
|
|
local onComplete = self.m_args.onComplete
|
|
self:_ClearData()
|
|
self:Hide()
|
|
if onComplete then
|
|
onComplete()
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
RewardsPopUpForSystemCtrl._ClearData = HL.Method() << function(self)
|
|
self.m_args.onComplete = nil
|
|
self.m_args = nil
|
|
self.m_items = nil
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
RewardsPopUpForSystemCtrl._OnUpdateCell = HL.Method(HL.Any, HL.Number) << function(self, cell, index)
|
|
local itemBundle = self.m_items[index]
|
|
cell:InitItem(itemBundle, true)
|
|
cell:SetExtraInfo({
|
|
isSideTips = DeviceInfo.usingController,
|
|
})
|
|
|
|
if DeviceInfo.usingController then
|
|
cell:SetEnableHoverTips(false)
|
|
end
|
|
if cell.view.extraCornerNode ~= nil then
|
|
cell.view.extraCornerNode.gameObject:SetActive(itemBundle.isExtra and true or false)
|
|
end
|
|
if cell.view.friendBoostTips ~= nil then
|
|
cell.view.friendBoostTips.gameObject:SetActive(itemBundle.needShowHelp and true or false)
|
|
end
|
|
if cell.view.doubleNode ~= nil then
|
|
cell.view.doubleNode.gameObject:SetActive(itemBundle.isDouble == true)
|
|
end
|
|
UIUtils.setRewardItemRarityGlow(cell, UIUtils.getItemRarity(itemBundle.id))
|
|
local isFullBottle, bottleData = Tables.fullBottleTable:TryGetValue(itemBundle.id)
|
|
if isFullBottle then
|
|
cell.view.name.text = string.format(Language.LUA_REWARD_FULL_BOTTLE_FORMAT, Tables.itemTable[bottleData.emptyBottleId].name, Tables.itemTable[bottleData.liquidId].name)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
RewardsPopUpForSystemCtrl.OnShow = HL.Override() << function(self)
|
|
Notify(MessageConst.TOGGLE_COMMON_ITEM_TOAST, false)
|
|
Notify(MessageConst.ON_ENTER_BLOCKED_REWARD_POP_UP_PANEL)
|
|
|
|
self.view.focusItemKeyHint.gameObject:SetActive(false)
|
|
self.view.controllerHintPlaceholder.gameObject:SetActive(false)
|
|
end
|
|
|
|
|
|
RewardsPopUpForSystemCtrl.OnHide = HL.Override() << function(self)
|
|
Notify(MessageConst.TOGGLE_COMMON_ITEM_TOAST, true)
|
|
Notify(MessageConst.ON_EXIT_BLOCKED_REWARD_POP_UP_PANEL)
|
|
end
|
|
|
|
|
|
RewardsPopUpForSystemCtrl.OnClose = HL.Override() << function(self)
|
|
Notify(MessageConst.TOGGLE_COMMON_ITEM_TOAST, true)
|
|
Notify(MessageConst.ON_EXIT_BLOCKED_REWARD_POP_UP_PANEL)
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
RewardsPopUpForSystemCtrl.OnSortingOrderChange = HL.Override(HL.Number, HL.Boolean) << function(self, order, isInit)
|
|
RewardsPopUpForSystemCtrl.Super.OnSortingOrderChange(self, order, isInit)
|
|
Notify(MessageConst.REFRESH_CONTROLLER_HINT_ORDER)
|
|
end
|
|
|
|
HL.Commit(RewardsPopUpForSystemCtrl)
|