PGRData/Script/matrix/xui/xuibag/XUiBag.lua
2024-09-01 22:49:41 +02:00

847 lines
33 KiB
Lua

local XUiPanelBagItem = require("XUi/XUiBag/XUiPanelBagItem")
local XUiPanelSidePopUp = require("XUi/XUiBag/XUiPanelSidePopUp")
local XUiPanelBagRecycle = require("XUi/XUiBag/XUiPanelBagRecycle")
local XUiPanelSelectGift = require("XUi/XUiBag/XUiPanelSelectGift")
local XUiPanelSelectReplicatedGift = require("XUi/XUiBag/XUiPanelSelectReplicatedGift")
local GridTimeAnimation = 10
local DefaultSortTypeIndex = 0
local PartnerPageIndex = 5
local CapacityDesStr = {
EquipCapacityDes = CS.XTextManager.GetText("EquipCapacityDes"),
EquipDecomposionCapacityDes = CS.XTextManager.GetText("EquipDecomposionCapacityDes"),
EquipRecycleCapacityDes = CS.XTextManager.GetText("EquipRecycleCapacityDes"),
AwarenessCapacityDes = CS.XTextManager.GetText("AwarenessCapacityDes"),
AwarenessDecomposionCapacityDes = CS.XTextManager.GetText("AwarenessDecomposionCapacityDes"),
AwarenessRecycleCapacityDes = CS.XTextManager.GetText("AwarenessRecycleCapacityDes"),
SuitCapacityDes = CS.XTextManager.GetText("SuitCapacityDes"),
MaterialCapacityDes = CS.XTextManager.GetText("MaterialCapacityDes"),
FragmentCapacityDes = CS.XTextManager.GetText("FragmentCapacityDes"),
PartnerCapacityDes = CS.XTextManager.GetText("PartnerCapacityDes"),
PartnerDecomposionCapacityDes = CS.XTextManager.GetText("PartnerDecomposionCapacityDes"),
}
local XUiBag = XLuaUiManager.Register(XLuaUi, "UiBag")
--背包页签按钮索引组
XUiBag.PageIndexGroup = {
[1] = XItemConfigs.PageType.Equip, --武器
[2] = XItemConfigs.PageType.SuitCover, --意识套装封面
[3] = XItemConfigs.PageType.Material, --材料
[4] = XItemConfigs.PageType.Fragment, --碎片
[5] = XItemConfigs.PageType.Partner, --伙伴
}
--背包页签按钮索引组
XUiBag.PageTypeToIndex = {
[XItemConfigs.PageType.Equip] = 1, --武器
[XItemConfigs.PageType.SuitCover] = 2, --意识套装封面
[XItemConfigs.PageType.Material] = 3, --材料
[XItemConfigs.PageType.Fragment] = 4, --碎片
[XItemConfigs.PageType.Awareness] = 2, --意识
[XItemConfigs.PageType.Partner] = 5, --伙伴
}
XUiBag.ItemPageToTypes = {
[XItemConfigs.PageType.Material] = XItemConfigs.Materials,
[XItemConfigs.PageType.Fragment] = { XItemConfigs.ItemType.Fragment },
}
--背包操作类型
XUiBag.OperationType = {
Common = 1, --无操作
Sell = 2, --出售
Decomposion = 3, --分解
Convert = 4, --转化
Recycle = 5, --回收
PartnerDecomposion = 6, --伙伴分解
}
--道具页签筛选类型
XUiBag.MaterialType = {
All = 1, --全部
Material = 2, --材料
Consumables = 3, --消耗品
Others = 4, --其他
}
XUiBag.MaterialTypeToItemTypes = {
[XUiBag.MaterialType.All] = XItemConfigs.Materials,
[XUiBag.MaterialType.Material] = {
XItemConfigs.ItemType.CardExp,
XItemConfigs.ItemType.EquipExp,
XItemConfigs.ItemType.Material,
XItemConfigs.ItemType.EquipResonanace,
},
[XUiBag.MaterialType.Consumables] = {
XItemConfigs.ItemType.Gift,
},
[XUiBag.MaterialType.Others] = {
XItemConfigs.ItemType.ExchangeMoney,
XItemConfigs.ItemType.SpExchangeMoney,
XItemConfigs.ItemType.FavorGift,
XItemConfigs.ItemType.ActiveMoney,
XItemConfigs.ItemType.PlayingItem,
},
}
local MaterialTypeCache = XUiBag.MaterialType.All
function XUiBag:OnAwake()
local togs = { self.BtnTog0, self.BtnTog1, self.BtnTog2, self.BtnTog3, self.BtnTog4 }
self.TabBtnGroup:Init(togs, function(index) self:PageSelect(index) end)
local isCanOpenPantnerTog = XFunctionManager.JudgeCanOpen(XFunctionManager.FunctionName.Partner)
self.BtnTog4.gameObject:SetActiveEx(isCanOpenPantnerTog)
local sorttogs = { self.BtnTogSortStar, self.BtnTogSortBreakthrough, self.BtnTogSortLevel, self.BtnTogSortProceed }
self.SortBtnGroup = XUiTabBtnGroup.New(sorttogs, function(index) self:SortTypeTurn(index) end)
local partnerSorttogs = {
self.PanelPartnerSort:GetObject("BtnPartnerSortStar"),
self.PanelPartnerSort:GetObject("BtnPartnerSortBreakthrough"),
self.PanelPartnerSort:GetObject("BtnPartnerSortLevel"),
}
self.PartnerSortBtnGroup = XUiTabBtnGroup.New(partnerSorttogs, function(index) self:PartnerSortTypeTurn(index) end)
local materialTypeTogs = { self.TogAll, self.TogStuff, self.TtogConsumables, self.TogOthers }
self.PanelFilter2:Init(materialTypeTogs, function(index) self:SelectMaterialType(index) end)
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.ActionPoint, XDataCenter.ItemManager.ItemId.Coin)
self.SidePopUpPanel = XUiPanelSidePopUp.New(self.PanelSidePopUp, self)
self.BagRecyclePanel = XUiPanelBagRecycle.New(self, self.PanelBagRecycle)
self.SelectGiftPanel = XUiPanelSelectGift.New(self, self.PanelSelectGift)
self.SelectReplicatedGiftPanel = XUiPanelSelectReplicatedGift.New(self, self.PanelSelectReplicatedGift)
self.DynamicTable = XDynamicTableNormal.New(self.PanelDynamicTable)
self.DynamicTable:SetProxy(XUiPanelBagItem)
self.DynamicTable:SetDelegate(self)
self.PanelBagItem.gameObject:SetActiveEx(false)
self.GridBagItemRect = self.PanelBagItem.transform:Find("GridEquip"):GetComponent("RectTransform").rect
self.GridSuitSimpleRect = self.PanelBagItem.transform:Find("GridSuitSimple"):GetComponent("RectTransform").rect
XRedPointManager.AddRedPointEvent(self.BtnTog2, self.OnCheckBtnItemRed, self, {
XRedPointConditions.Types.CONDITION_ITEM_COLLECTION_ENTRANCE,
})
XRedPointManager.AddRedPointEvent(self.BtnCollection, self.OnCheckBtnCollectRed, self, {
XRedPointConditions.Types.CONDITION_ITEM_COLLECTION_ENTRANCE,
})
self:AutoAddListener()
end
function XUiBag:OnStart(record)
self.PageRecord = record or XDataCenter.ItemManager.PageRecordCache
self.MaterailTypeRecord = MaterialTypeCache
self.IsAscendOrder = false
self.Operation = XUiBag.OperationType.Common
self.SortType = XEquipConfig.PriorSortType.Star
self.PartnerSortType = DefaultSortTypeIndex
self.StarCheckList = {true, true, true, true, true, true }
self.IsFirstAnimation = true
self.SelectList = {}
--打开背包时如果上次选择是意识那么回到套装封面
if self.PageRecord == XItemConfigs.PageType.Awareness then
self.PageRecord = XItemConfigs.PageType.SuitCover
end
self.TabBtnGroup:SelectIndex(XUiBag.PageTypeToIndex[self.PageRecord], false)
self.SortBtnGroup:SelectIndex(self.SortType + 1, false)
self.PartnerSortBtnGroup:SelectIndex(self.PartnerSortType + 1, false)
--self:PlayAnimationWithMask("AnimStartEnable")
end
function XUiBag:OnEnable()
self.GridCount = 1
self:Refresh(false)
self.SelectGiftPanel:OnEnable()
self:PlayAnimationWithMask("AnimStartEnable")
end
function XUiBag:OnDestroy()
XDataCenter.ItemManager.SetPageRecordCache(self.PageRecord)
MaterialTypeCache = self.MaterailTypeRecord
end
--注册监听事件
function XUiBag:OnGetEvents()
return {
XEventId.EVENT_ITEM_USE,
XEventId.EVENT_ITEM_RECYCLE,
XEventId.EVENT_ITEM_MULTIPLY_USE,
XEventId.EVENT_EQUIP_RECYCLE_NOTIFY,
}
end
--处理事件监听
function XUiBag:OnNotify(evt)
if evt == XEventId.EVENT_ITEM_USE
or evt == XEventId.EVENT_ITEM_RECYCLE
or evt == XEventId.EVENT_ITEM_MULTIPLY_USE
then
self:UpdateDynamicTable()
elseif evt == XEventId.EVENT_EQUIP_RECYCLE_NOTIFY then
self:UpdateDynamicTable()
self:OperationTurn(self.OperationType.Common)
end
end
function XUiBag:Refresh(bReload)
self:UpdateDynamicTable(bReload)
self:UpdatePanels()
end
--设置动态列表
function XUiBag:UpdateDynamicTable(bReload)
--刷新数据
self.PageDatas = self:GetDataByPage()
local gridSize
if self.PageRecord == XItemConfigs.PageType.SuitCover then
--套装的格子比较大
gridSize = CS.UnityEngine.Vector2(self.GridSuitSimpleRect.width, self.GridSuitSimpleRect.height)
else
gridSize = CS.UnityEngine.Vector2(self.GridBagItemRect.width, self.GridBagItemRect.height)
end
self.DynamicTable:SetGridSize(gridSize)
self.DynamicTable:SetDataSource(self.PageDatas)
self.DynamicTable:ReloadDataASync(bReload and 1 or -1)
--刷新容量文本
local curPageCount = #self.PageDatas
local maxCount
local capacityDes = ""
if self.PageRecord == XItemConfigs.PageType.Equip then
maxCount = XEquipConfig.GetMaxWeaponCount()
if self.Operation == XUiBag.OperationType.Decomposion then
capacityDes = CapacityDesStr.EquipDecomposionCapacityDes
elseif self.Operation == XUiBag.OperationType.Recycle then
capacityDes = CapacityDesStr.EquipRecycleCapacityDes
else
capacityDes = CapacityDesStr.EquipCapacityDes
end
elseif self.PageRecord == XItemConfigs.PageType.Awareness then
maxCount = XEquipConfig.GetMaxAwarenessCount()
if self.Operation == XUiBag.OperationType.Decomposion then
capacityDes = CapacityDesStr.AwarenessDecomposionCapacityDes
elseif self.Operation == XUiBag.OperationType.Recycle then
capacityDes = CapacityDesStr.AwarenessRecycleCapacityDes
else
capacityDes = CapacityDesStr.AwarenessCapacityDes
end
elseif self.PageRecord == XItemConfigs.PageType.SuitCover then
curPageCount = curPageCount - XEquipConfig.GetDefaultSuitIdCount() --去掉默认全部套装特殊Id
maxCount = XDataCenter.EquipManager.GetMaxSuitCount()
capacityDes = CapacityDesStr.SuitCapacityDes
elseif self.PageRecord == XItemConfigs.PageType.Material then
capacityDes = CapacityDesStr.MaterialCapacityDes
elseif self.PageRecord == XItemConfigs.PageType.Fragment then
capacityDes = CapacityDesStr.FragmentCapacityDes
elseif self.PageRecord == XItemConfigs.PageType.Partner then
maxCount = XDataCenter.PartnerManager.GetMaxPartnerCount()
if self.Operation == XUiBag.OperationType.PartnerDecomposion then
capacityDes = CapacityDesStr.PartnerDecomposionCapacityDes
else
capacityDes = CapacityDesStr.PartnerCapacityDes
end
end
self.TxtCapacityDes.text = capacityDes
if maxCount then
self.TxtNowCapacity.text = curPageCount
self.TxtMaxCapacity.text = "/" .. maxCount
end
--刷新消耗品道具剩余时间文本
if self.PageRecord == XItemConfigs.PageType.Material then
self:CalLeftTime(XUiBag.MaterialTypeToItemTypes[XUiBag.MaterialType.Consumables], self.TxtTimeConsumables)
self:CalLeftTime(XUiBag.MaterialTypeToItemTypes[XUiBag.MaterialType.Others], self.TxtTimeOthers)
end
end
function XUiBag:CalLeftTime(types, txtGo)
local originData = XDataCenter.ItemManager.GetItemsByTypes(types)
local minLeftTime = XDataCenter.ItemManager.GetBagItemListMinLeftTime(originData)
if minLeftTime > 0 then
local timeStr = XUiHelper.GetBagTimeLimitTimeStrAndBg(minLeftTime)
txtGo.text = timeStr
txtGo.gameObject:SetActiveEx(true)
else
txtGo.gameObject:SetActiveEx(false)
end
end
--动态列表事件
function XUiBag:OnDynamicTableEvent(event, index, grid)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
if self.IsFirstAnimation then
grid:Init(self, self.PageRecord, true)
else
grid:Init(self, self.PageRecord, false)
end
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
local gridSize = self.DynamicTable:GetGridSize()
local data = self.PageDatas[index]
if self.PageRecord == XItemConfigs.PageType.Equip or self.PageRecord == XItemConfigs.PageType.Awareness then
grid:SetupEquip(data, gridSize)
grid:SetSelectedEquip(self.SelectList[data])
elseif self.PageRecord == XItemConfigs.PageType.SuitCover then
grid:SetupSuit(data, self.PageDatas, gridSize)
elseif self.PageRecord == XItemConfigs.PageType.Partner then --zhang
grid:SetupPartner(data, gridSize, self.PartnerDataInPrefab[data:GetId()])
grid:SetSelectedPartner(self.SelectList[data])
elseif self.PageRecord == XItemConfigs.PageType.Fragment then
grid:SetupCommon(data, self.PageRecord, self.Operation, gridSize)
grid:SetSelectedCommon(self.SelectList[data.Data.Id])
else
grid:SetupCommon(data, self.PageRecord, self.Operation, gridSize)
grid:SetSelectedCommon(self.SelectList[data.GridIndex] and self.SelectList[data.GridIndex] == data.Data.Id)
end
self.GridCount = self.GridCount + 1
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_RELOAD_COMPLETED then
local grids = self.DynamicTable:GetGrids()
self.GridIndex = 1
local item = grids[self.GridIndex]
if not item or not item.IsFirstAnimation then
return
end
XLuaUiManager.SetMask(true)
self.CurAnimationTimerId = XScheduleManager.Schedule(function()
item = grids[self.GridIndex]
if item then
item:PlayAnimation()
end
self.GridIndex = self.GridIndex + 1
end, GridTimeAnimation, self.GridCount, 0)
XScheduleManager.ScheduleOnce(function()
XLuaUiManager.SetMask(false)
end, XScheduleManager.SECOND * 0.8)
end
end
function XUiBag:OnDisable()
self.IsFirstAnimation = nil
if self.CurAnimationTimerId then
XScheduleManager.UnSchedule(self.CurAnimationTimerId)
self.CurAnimationTimerId = nil
end
end
--刷新面板状态
function XUiBag:UpdatePanels()
local isEmpty = #self.PageDatas <= 0
self.PanelTag.gameObject:SetActiveEx(self.Operation == XUiBag.OperationType.Common)
self.PanelSort.gameObject:SetActiveEx(self.PageRecord == XItemConfigs.PageType.Equip or self.PageRecord == XItemConfigs.PageType.Awareness)
self.PanelPartnerSort.gameObject:SetActiveEx(self.PageRecord == XItemConfigs.PageType.Partner)
self.PanelFilter.gameObject:SetActiveEx(self.PageRecord == XItemConfigs.PageType.SuitCover)
self.PanelFilter2.gameObject:SetActiveEx(self.PageRecord == XItemConfigs.PageType.Material)
self.PanelEmpty.gameObject:SetActiveEx(isEmpty)
self.TxtNowCapacity.gameObject:SetActiveEx(self.PageRecord == XItemConfigs.PageType.Equip or self.PageRecord == XItemConfigs.PageType.Awareness or self.PageRecord == XItemConfigs.PageType.SuitCover or self.PageRecord == XItemConfigs.PageType.Partner)
self.TxtMaxCapacity.gameObject:SetActiveEx(self.PageRecord == XItemConfigs.PageType.Equip or (self.PageRecord == XItemConfigs.PageType.Awareness and self.SelectSuitId == XEquipConfig.DEFAULT_SUIT_ID) or self.PageRecord == XItemConfigs.PageType.SuitCover or self.PageRecord == XItemConfigs.PageType.Partner)
self.BtnHelp.gameObject:SetActiveEx(self.Operation == XUiBag.OperationType.Recycle)
self.SidePopUpPanel:Refresh()
--操作按钮
if self.PageRecord == XItemConfigs.PageType.Equip or self.PageRecord == XItemConfigs.PageType.Awareness or self.PageRecord == XItemConfigs.PageType.Partner then--zhang
self.PanelDecomposionBtn.gameObject:SetActiveEx(true)
self.PanelRecycleBtn.gameObject:SetActiveEx(self.PageRecord == XItemConfigs.PageType.Awareness)--装备回收暂时屏蔽武器
self.BtnDecomposion.gameObject:SetActiveEx(not isEmpty)
self.ImgCantDecomposion.gameObject:SetActiveEx(isEmpty)
else
self.PanelDecomposionBtn.gameObject:SetActiveEx(false)
self.PanelRecycleBtn.gameObject:SetActiveEx(false)
end
if self.PageRecord == XItemConfigs.PageType.Material then
self.PanelFilter2:SelectIndex(self.MaterailTypeRecord, false)
self.PanelSellBtn.gameObject:SetActiveEx(true)
self.BtnSell.gameObject:SetActiveEx(not isEmpty)
self.ImgCantSell.gameObject:SetActiveEx(isEmpty)
else
self.PanelSellBtn.gameObject:SetActiveEx(false)
end
if self.PageRecord == XItemConfigs.PageType.Fragment then
self.PanelConvertBtn.gameObject:SetActiveEx(true)
self.BtnConvert.gameObject:SetActiveEx(not isEmpty)
self.ImgCantConvert.gameObject:SetActiveEx(isEmpty)
else
self.PanelConvertBtn.gameObject:SetActiveEx(false)
end
end
function XUiBag:CheckDecomposeRewardNotOverLimit(equipId, deSelect)
--屏蔽分解拦截
do return true end
--if self.Operation == XUiBag.OperationType.Decomposion then return true end
-- local deSelectSymbol = deSelect and -1 or 1
-- self.CurDecomposeRewardWeaponCount = self.CurDecomposeRewardWeaponCount or XDataCenter.EquipManager.GetWeaponCount()
-- self.CurDecomposeRewardAwarenessCount = self.CurDecomposeRewardAwarenessCount or XDataCenter.EquipManager.GetAwarenessCount()
-- local maxWeaponCount = XEquipConfig.GetMaxWeaponCount()
-- local maxAwarenessCount = XEquipConfig.GetMaxAwarenessCount()
-- local curWeaponCount = self.CurDecomposeRewardWeaponCount
-- local curAwarenessCount = self.CurDecomposeRewardAwarenessCount
-- local tryAddWeaponCount, tryAddAwarenessCount = XDataCenter.EquipManager.GetDecomposeRewardEquipCount(equipId)
-- tryAddWeaponCount = tryAddWeaponCount * deSelectSymbol
-- tryAddAwarenessCount = tryAddAwarenessCount * deSelectSymbol
-- curWeaponCount = curWeaponCount + tryAddWeaponCount
-- if not deSelect and curWeaponCount > maxWeaponCount then
-- XUiManager.TipMsg(XEquipConfig.DecomposeRewardOverLimitTip[XEquipConfig.Classify.Weapon])
-- return false
-- end
-- self.CurDecomposeRewardWeaponCount = curWeaponCount
-- curAwarenessCount = curAwarenessCount + tryAddAwarenessCount
-- if not deSelect and curAwarenessCount > maxAwarenessCount then
-- XUiManager.TipMsg(XEquipConfig.DecomposeRewardOverLimitTip[XEquipConfig.Classify.Awareness])
-- return false
-- end
-- self.CurDecomposeRewardAwarenessCount = curAwarenessCount
-- return true
end
--获取数据
function XUiBag:GetDataByPage()
--武器
if self.PageRecord == XItemConfigs.PageType.Equip then
local equipIds
if self.Operation == XUiBag.OperationType.Decomposion then
equipIds = XDataCenter.EquipManager.GetCanDecomposeWeaponIds()
elseif self.Operation == XUiBag.OperationType.Recycle then
equipIds = XDataCenter.EquipManager.GetCanRecycleWeaponIds()
else
equipIds = XDataCenter.EquipManager.GetWeaponIds()
end
XDataCenter.EquipManager.SortEquipIdListByPriorType(equipIds, self.SortType)
if self.IsAscendOrder then
XTool.ReverseList(equipIds)
end
return equipIds
end
--套装
if self.PageRecord == XItemConfigs.PageType.SuitCover then
local suitIds = XDataCenter.EquipManager.GetSuitIdsByStars(self.StarCheckList)
return suitIds
end
--意识
if self.PageRecord == XItemConfigs.PageType.Awareness then
local awarenessIds
if self.Operation == XUiBag.OperationType.Decomposion then
awarenessIds = XDataCenter.EquipManager.GetCanDecomposeAwarenessIdsBySuitId(self.SelectSuitId)
elseif self.Operation == XUiBag.OperationType.Recycle then
awarenessIds = XDataCenter.EquipManager.GetCanRecycleAwarenessIdsBySuitId(self.SelectSuitId)
else
awarenessIds = XDataCenter.EquipManager.GetEquipIdsBySuitId(self.SelectSuitId)
end
XDataCenter.EquipManager.SortEquipIdListByPriorType(awarenessIds, self.SortType)
if self.IsAscendOrder then
XTool.ReverseList(awarenessIds)
end
return awarenessIds
end
--材料
if self.PageRecord == XItemConfigs.PageType.Material then
local types = XUiBag.MaterialTypeToItemTypes[self.MaterailTypeRecord]
local useConsumableSort = self.MaterailTypeRecord ~= XUiBag.MaterialType.All
local originData
if self.Operation == XUiBag.OperationType.Sell then
originData = XDataCenter.ItemManager.GetCanSellItemsByTypes(types, useConsumableSort)
else
originData = XDataCenter.ItemManager.GetItemsByTypes(types, useConsumableSort)
end
return originData
end
--碎片
if self.PageRecord == XItemConfigs.PageType.Fragment then
local types = XUiBag.ItemPageToTypes[self.PageRecord]
local originData
if self.Operation == XUiBag.OperationType.Convert then
originData = XDataCenter.ItemManager.GetCanConvertItemsByTypes(types)
else
originData = XDataCenter.ItemManager.GetItemsByTypes(types)
end
return originData
end
--伙伴
if self.PageRecord == XItemConfigs.PageType.Partner then--zhang
--预设的辅助机数据
self.PartnerDataInPrefab = XDataCenter.PartnerManager.GetPartnerDictInPrefab()
local originData
if self.Operation == XUiBag.OperationType.PartnerDecomposion then
originData = XDataCenter.PartnerManager.GetPartnerDecomposionList()
local firstType = XPartnerConfigs.BagSortType[self.PartnerSortType]
XPartnerSort.BagShowSortFunction(originData, firstType, not self.IsAscendOrder)
else
originData = XDataCenter.PartnerManager.GetPartnerOverviewDataList(nil, nil, false)
local firstType = XPartnerConfigs.BagSortType[self.PartnerSortType]
XPartnerSort.BagShowSortFunction(originData, firstType, not self.IsAscendOrder)
end
return originData
end
end
function XUiBag:OnGridClick(data, grid)
if self.Operation == XUiBag.OperationType.Common then
self:OpenDetailUi(data, grid)
else
self:SelectGrid(data, grid)
end
end
function XUiBag:OpenDetailUi(data, grid)
if self.PageRecord == XItemConfigs.PageType.Equip or self.PageRecord == XItemConfigs.PageType.Awareness then
local equipId = data
local forceShowBindCharacter = true
XMVCA:GetAgency(ModuleId.XEquip):OpenUiEquipDetail(equipId, nil, nil, forceShowBindCharacter)
elseif self.PageRecord == XItemConfigs.PageType.SuitCover then
self.SelectSuitId = data
self:PageTurn(XItemConfigs.PageType.Awareness)
elseif self.PageRecord == XItemConfigs.PageType.Material or self.PageRecord == XItemConfigs.PageType.Fragment then
local itemId = data.Data.Id
if XDataCenter.ItemManager.IsSelectGift(itemId) then
local canSelectRewardCount = XDataCenter.ItemManager.GetItem(itemId).Template.SelectCount
local ownItemCount = grid.GetGridCount and grid:GetGridCount() or 1
if ownItemCount and ownItemCount > 1 and canSelectRewardCount == 1 then
self.SelectReplicatedGiftPanel:Open(itemId, ownItemCount * canSelectRewardCount)
else
self.SelectGiftPanel:Refresh(itemId)
end
else
XLuaUiManager.Open("UiBagItemInfoPanel", data)
end
elseif self.PageRecord == XItemConfigs.PageType.Partner then
XLuaUiManager.Open("UiPartnerMain", XPartnerConfigs.MainUiState.Overview, data, false, true)
end
end
--选中Grid
function XUiBag:SelectGrid(data, grid)
if self.Operation == XUiBag.OperationType.Decomposion then
local equipId = data
local cancelStar
if self.SelectList[equipId] then
self:CheckDecomposeRewardNotOverLimit(equipId, true)
self.SelectList[equipId] = nil
grid:SetSelected(false)
if not XDataCenter.EquipManager.IsEquipResonanced(equipId) then--分解时不选中已共鸣过的装备,反选星级也不需要
local equip = XDataCenter.EquipManager.GetEquip(equipId)
cancelStar = XDataCenter.EquipManager.GetEquipStar(equip.TemplateId)
end
else
if not self:CheckDecomposeRewardNotOverLimit(equipId) then
return
end
self.SelectList[equipId] = equipId
grid:SetSelected(true)
end
self.SidePopUpPanel:RefreshDecomposionPreView(self.SelectList, cancelStar)
elseif self.Operation == XUiBag.OperationType.PartnerDecomposion then--zhang
local Partner = data
if self.SelectList[Partner] then
self.SelectList[Partner] = nil
grid:SetSelected(false)
else
self.SelectList[Partner] = Partner
grid:SetSelected(true)
end
self.SidePopUpPanel:RefreshPartnerDecomposionPreView(self.SelectList)
elseif self.Operation == XUiBag.OperationType.Recycle then
local equipId = data
local cancelStar
if self.SelectList[equipId] then
self.SelectList[equipId] = nil
grid:SetSelected(false)
local equip = XDataCenter.EquipManager.GetEquip(equipId)
cancelStar = XDataCenter.EquipManager.GetEquipStar(equip.TemplateId)
else
self.SelectList[equipId] = equipId
grid:SetSelected(true)
end
self.SidePopUpPanel:RefreshRecyclePreView(self.SelectList, cancelStar)
elseif self.Operation == XUiBag.OperationType.Sell then
if self.SelectList[data.GridIndex] and self.SelectList[data.GridIndex] == data.Data.Id then return end
self.SelectList = {} --单选
self.SelectList[data.GridIndex] = data.Data.Id
if self.LastSelectCommonGrid then
self.LastSelectCommonGrid:SetSelectState(false)
end
self.LastSelectCommonGrid = grid
self.LastSelectCommonGrid:SetSelectState(true)
self.SidePopUpPanel:RefreshSellPreView(self.SelectList[data.GridIndex], 1, grid)
elseif self.Operation == XUiBag.OperationType.Convert then
local fragmentId = data.Data.Id
local count = data.Data.Count
if self.SelectList[fragmentId] then
self.SelectList[fragmentId] = nil
count = count * -1
grid:SetSelectState(false)
else
self.SelectList[fragmentId] = count
grid:SetSelectState(true)
end
self.SidePopUpPanel:RefreshConvertPreView(self.SelectList, count)
end
end
--选中一个品质
---@param:isForDecomposion:操作类型为分解/回收
function XUiBag:SelectByStar(starCheckDic, state, isForDecomposion)
if self.Operation ~= XUiBag.OperationType.Decomposion
and self.Operation ~= XUiBag.OperationType.Recycle
then return end
for index, equipId in ipairs(self.PageDatas) do
local equip = XDataCenter.EquipManager.GetEquip(equipId)
local equipStar = XDataCenter.EquipManager.GetEquipStar(equip.TemplateId)
local tmpState = state
if starCheckDic[equipStar] and
(not isForDecomposion or not XDataCenter.EquipManager.IsEquipResonanced(equipId))--分解时不选中已共鸣过的装备
then
if tmpState then
if not self.SelectList[equipId] then
if not self:CheckDecomposeRewardNotOverLimit(equipId) then
break
end
self.SelectList[equipId] = equipId
end
else
if self.SelectList[equipId] then
self:CheckDecomposeRewardNotOverLimit(equipId, true)
self.SelectList[equipId] = nil
end
end
local grid = self.DynamicTable:GetGridByIndex(index)
if grid then
grid:SetSelectedEquip(tmpState)
end
end
end
if self.Operation == XUiBag.OperationType.Decomposion then
self.SidePopUpPanel:RefreshDecomposionPreView(self.SelectList)
elseif self.Operation == XUiBag.OperationType.Recycle then
self.SidePopUpPanel:RefreshRecyclePreView(self.SelectList)
end
end
function XUiBag:AutoAddListener()
self:RegisterClickEvent(self.BtnSell, self.OnBtnSellClick)
self:RegisterClickEvent(self.BtnOrder, self.OnBtnOrderClick)
self:RegisterClickEvent(self.TogStar6, self.OnTogStar6Click)
self:RegisterClickEvent(self.TogStar5, self.OnTogStar5Click)
self:RegisterClickEvent(self.TogStar4, self.OnTogStar4Click)
self:RegisterClickEvent(self.TogStar3, self.OnTogStar3Click)
self:RegisterClickEvent(self.BtnBack, self.OnBtnBackClick)
self:RegisterClickEvent(self.BtnMainUi, self.OnBtnMainUiClick)
self:RegisterClickEvent(self.BtnDecomposion, self.OnBtnDecomposionClick)
self:RegisterClickEvent(self.BtnRecycleOpen, self.OnBtnRecycleOpenClick)
self:RegisterClickEvent(self.BtnConvert, self.OnBtnConvertClick)
self:BindHelpBtn(self.BtnHelp, "UiBagHelp")
self.PanelPartnerSort:GetObject("BtnPartnerOrder").CallBack = function()
self:OnBtnOrderClick()
end
self.BtnCollection.CallBack = function()
self:OnBtnCollectionClick()
end
end
function XUiBag:OnBtnMainUiClick()
XLuaUiManager.RunMain()
end
function XUiBag:OnBtnBackClick()
if self.Operation ~= XUiBag.OperationType.Common then
self:OperationTurn(XUiBag.OperationType.Common)
elseif self.PageRecord == XItemConfigs.PageType.Awareness then
self:PageTurn(XItemConfigs.PageType.SuitCover)
else
self:Close()
end
end
function XUiBag:OnBtnSellClick()
self:OperationTurn(XUiBag.OperationType.Sell)
end
function XUiBag:OnBtnDecomposionClick()
if self.PageRecord == XItemConfigs.PageType.Partner then
self:OperationTurn(XUiBag.OperationType.PartnerDecomposion)
else
self:OperationTurn(XUiBag.OperationType.Decomposion)
end
end
function XUiBag:OnBtnRecycleOpenClick()
self:OperationTurn(XUiBag.OperationType.Recycle)
end
function XUiBag:OnBtnConvertClick()
local types = XUiBag.ItemPageToTypes[XUiBag.OperationType.Convert]
local originData = XDataCenter.ItemManager.GetCanConvertItemsByTypes(types)
if not originData or #originData == 0 then
XUiManager.TipText("BagNoOverFragment")
return
end
self:OperationTurn(XUiBag.OperationType.Convert)
end
function XUiBag:OnBtnOrderClick()
self:OrderTypeTurn(not self.IsAscendOrder)
end
function XUiBag:OnTogStar6Click()
self:StarToggleStateChange(6, self.TogStar6.isOn)
end
function XUiBag:OnTogStar5Click()
self:StarToggleStateChange(5, self.TogStar5.isOn)
end
function XUiBag:OnTogStar4Click()
self:StarToggleStateChange(4, self.TogStar4.isOn)
end
function XUiBag:OnTogStar3Click()
self:StarToggleStateChange(3, self.TogStar3.isOn)
self:StarToggleStateChange(2, self.TogStar3.isOn)
self:StarToggleStateChange(1, self.TogStar3.isOn)
end
function XUiBag:OnBtnCollectionClick()
XLuaUiManager.Open("UiItemCollectionMain")
end
--切换页签
function XUiBag:PageSelect(index)
self:PageTurn(XUiBag.PageIndexGroup[index])
end
function XUiBag:PageTurn(page)
if self.PageRecord == page then
return
end
if self.CurAnimationTimerId then
XScheduleManager.UnSchedule(self.CurAnimationTimerId)
self.CurAnimationTimerId = nil
end
self.IsFirstAnimation = false
self.PageRecord = page
self:Refresh(true)
if not self.SidePopUpPanel.CurState and not self.IsFirstAnimation then
self:PlayAnimationWithMask("AnimNeiRongEnable")
end
end
--切换操作
function XUiBag:OperationTurn(operation)
self.Operation = operation
self.SelectList = {}
self.CurDecomposeRewardWeaponCount = nil
self.CurDecomposeRewardAwarenessCount = nil
self.SidePopUpPanel:ClearData()
local isAscendOrder = self.Operation ~= XUiBag.OperationType.Common
self:OrderTypeTurn(isAscendOrder)
self:UpdatePanels()
end
--切换排序
function XUiBag:SortTypeTurn(index)
self.SortType = index - 1
self:UpdateDynamicTable(true)
if not self.SidePopUpPanel.CurState and not self.IsFirstAnimation then
self:PlayAnimationWithMask("AnimNeiRongEnable")
end
end
--伙伴切换排序
function XUiBag:PartnerSortTypeTurn(index)
self.PartnerSortType = index - 1
self:UpdateDynamicTable(true)
end
--切换顺序
function XUiBag:OrderTypeTurn(isAscendOrder)
self.IsAscendOrder = isAscendOrder
self.ImgAscend.gameObject:SetActiveEx(self.IsAscendOrder)
self.ImgDescend.gameObject:SetActiveEx(not self.IsAscendOrder)
self.PanelPartnerSort:GetObject("ImgAscend").gameObject:SetActiveEx(self.IsAscendOrder)
self.PanelPartnerSort:GetObject("ImgDescend").gameObject:SetActiveEx(not self.IsAscendOrder)
self:UpdateDynamicTable(true)
if not self.SidePopUpPanel.CurState and not self.IsFirstAnimation then
self:PlayAnimationWithMask("AnimNeiRongEnable")
end
end
--筛选同星级套装
function XUiBag:StarToggleStateChange(star, state)
self.StarCheckList[star] = state
self:UpdateDynamicTable(true)
if not self.SidePopUpPanel.CurState and not self.IsFirstAnimation then
self:PlayAnimationWithMask("AnimNeiRongEnable")
end
end
--筛选材料类型
function XUiBag:SelectMaterialType(index)
self.MaterailTypeRecord = index
self:Refresh(true)
if not self.SidePopUpPanel.CurState and not self.IsFirstAnimation then
self:PlayAnimationWithMask("AnimNeiRongEnable")
end
end
function XUiBag:OnCheckBtnItemRed(count)
self.BtnTog2:ShowReddot(count >= 0)
end
function XUiBag:OnCheckBtnCollectRed(count)
self.BtnCollection:ShowReddot(count >= 0)
end