PGRData/Script/matrix/xui/xuiarchive/XUiArchiveWeapon.lua

390 lines
14 KiB
Lua
Raw Normal View History

--
-- Author: wujie
-- Note: 图鉴武器一级界面
local XUiArchiveWeapon = XLuaUiManager.Register(XLuaUi, "UiArchiveWeapon")
local XUiGridArchiveWeapon = require("XUi/XUiArchive/XUiGridArchiveWeapon")
local Object = CS.UnityEngine.Object
local OwnStatusType = {
All = 1,
Owned = 2,
NotOwned = 3,
}
local DrdSortIndexToType = {
OwnStatusType.All,
OwnStatusType.Owned,
OwnStatusType.NotOwned,
}
local MinIndex = 1
function XUiArchiveWeapon:OnAwake()
XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.ActionPoint, XDataCenter.ItemManager.ItemId.Coin)
self.IsHaveCallOnEnable = false
self.EventIdWeaponRedPoint = XRedPointManager.AddRedPointEvent(
self.TabBtnGroup,
self.OnCheckWeaponRedPoint,
self,
{ XRedPointConditions.Types.CONDITION_ARCHIVE_WEAPON_NEW_TAG, XRedPointConditions.Types.CONDITION_ARCHIVE_WEAPON_SETTING_RED },
nil,
false
)
end
function XUiArchiveWeapon:OnStart()
self.IsStarAscendOrder = false
self.SecondHierarchyFilterSelectIndex = self.DrdSort.value + 1
self.WeaponDataDic = XArchiveConfigs.GetWeaponTypeToIdsDic()
self:InitDynamicTable()
self:InitTabBtnGroup()
self:AutoAddListener()
XRedPointManager.Check(self.EventIdWeaponRedPoint)
self:UpdateOrderStatus(self.IsStarAscendOrder)
end
function XUiArchiveWeapon:OnEnable()
if self.IsHaveCallOnEnable then
self.DynamicTable:ReloadDataASync()
return
end
self.IsHaveCallOnEnable = true
end
function XUiArchiveWeapon:OnDestroy()
XDataCenter.ArchiveManager.HandleCanUnlockWeapon()
XDataCenter.ArchiveManager.HandleCanUnlockWeaponSetting()
end
function XUiArchiveWeapon:InitTabBtnGroup()
self.TabBtnList = {}
self.BtnGroupTypeList = XArchiveConfigs.GetShowedWeaponTypeList()
for _, v in pairs(self.BtnGroupTypeList) do
local btn = Object.Instantiate(self.BtnTog)
btn.gameObject:SetActive(true)
btn.transform:SetParent(self.TabBtnGroup.transform, false)
local btncs = btn:GetComponent("XUiButton")
local name = XArchiveConfigs.GetWeaponGroupName(v)
btncs:SetName(name or "")
table.insert(self.TabBtnList, btncs)
end
self.TabBtnGroup:Init(self.TabBtnList, handler(self, self.OnTabBtnGroupClick))
self.TabBtnTypeDic = {}
local weaponType
for i, btn in ipairs(self.TabBtnList) do
weaponType = self.BtnGroupTypeList[i]
self.TabBtnTypeDic[weaponType] = btn
end
self.TabBtnGroup:SelectIndex(1)
self:SaveCollectionDefaultData()
end
function XUiArchiveWeapon:InitDynamicTable()
self.DynamicTable = XDynamicTableNormal.New(self.PanelDynamicTable)
self.DynamicTable:SetProxy(XUiGridArchiveWeapon)
self.DynamicTable:SetDelegate(self)
end
function XUiArchiveWeapon:AutoAddListener()
self.BtnBack.CallBack = function() self:Close() end
self.BtnMainUi.CallBack = function() XLuaUiManager.RunMain() end
self.DrdSort.onValueChanged:AddListener(function()
local CSArrayIndexToLuaTableIndex = function(index) return index + 1 end
self:OnDrdSortClick(CSArrayIndexToLuaTableIndex(self.DrdSort.value))
end)
self.BtnOrder.CallBack = function() self:OnBtnOrderClick() end
end
-- function XUiArchiveWeapon:OnPlayAnimation()
-- -- self:PlayAnimation("AnimStartEnable")
-- end
-- 第一层判断
function XUiArchiveWeapon:FirstHierarchyFilter(originDataList, filterType)
return originDataList[filterType] or {}
end
-- 第二层判断
function XUiArchiveWeapon:SecondHierarchyFilter(firstHierarchyFilterDataList, filterType)
local dataList = {}
if filterType == OwnStatusType.All then
return firstHierarchyFilterDataList
elseif filterType == OwnStatusType.Owned then
for _, templateId in ipairs(firstHierarchyFilterDataList) do
if XDataCenter.ArchiveManager.IsWeaponGet(templateId) then
table.insert(dataList, templateId)
end
end
elseif filterType == OwnStatusType.NotOwned then
for _, templateId in ipairs(firstHierarchyFilterDataList) do
if not XDataCenter.ArchiveManager.IsWeaponGet(templateId) then
table.insert(dataList, templateId)
end
end
end
return dataList
end
-- 按星级高低顺序来排序默认降序可变为升序在此之下默认TemplateId排序
function XUiArchiveWeapon:SortEquipDataList(dataList, isAscendOrder)
if not dataList then return end
if isAscendOrder then
table.sort(dataList, function(aId, bId)
local aTemplateData = XEquipConfig.GetEquipCfg(aId)
local bTemplateData = XEquipConfig.GetEquipCfg(bId)
local aPriority = aTemplateData.Priority
local bPriority = bTemplateData.Priority
local aStar = aTemplateData.Star
local bStar = bTemplateData.Star
if aStar == bStar then
return aPriority < bPriority
else
return aStar < bStar
end
end)
else
table.sort(dataList, function(aId, bId)
local aTemplateData = XEquipConfig.GetEquipCfg(aId)
local bTemplateData = XEquipConfig.GetEquipCfg(bId)
local aPriority = aTemplateData.Priority
local bPriority = bTemplateData.Priority
local aStar = aTemplateData.Star
local bStar = bTemplateData.Star
if aStar == bStar then
return aPriority > bPriority
else
return aStar > bStar
end
end)
end
end
function XUiArchiveWeapon:ResetDrdSort()
local selectIndex = 1
for index, filterType in ipairs(DrdSortIndexToType) do
if filterType == OwnStatusType.All then
selectIndex = index
break
end
end
self.DrdSort.value = selectIndex - 1
end
--排序按钮状态
function XUiArchiveWeapon:UpdateOrderStatus(isAscendOrder)
self.ImgAscend.gameObject:SetActiveEx(isAscendOrder)
self.ImgDescend.gameObject:SetActiveEx(not isAscendOrder)
end
--设置动态列表
function XUiArchiveWeapon:UpdateDynamicTable()
self:PlayAnimation("QieHuan")
self.DynamicTableDataList = self.DynamicTableDataList or {}
local isEmpty = #self.DynamicTableDataList == 0
self.DynamicTable:SetDataSource(self.DynamicTableDataList)
self.DynamicTable:ReloadDataASync(isEmpty and -1 or 1)
self.PanelEmpty.gameObject:SetActiveEx(isEmpty)
end
function XUiArchiveWeapon:UpdateCollection()
local selectEquipType = self.BtnGroupTypeList[self.FirstHierarchyFilterSelectIndex]
self.TxtCollectionDesc.text = XArchiveConfigs.GetWeaponGroupName(selectEquipType)
local sumNum = #self.FirstHierarchyFilterDataList
if sumNum == 0 then
self.TxtCollectionRate.text = 0
return
end
local collectionNum = 0
for _, templateId in ipairs(self.FirstHierarchyFilterDataList) do
if XDataCenter.ArchiveManager.IsWeaponGet(templateId) then
collectionNum = collectionNum + 1
end
end
local percentNum = XDataCenter.ArchiveManager.GetPercent(collectionNum * 100 / sumNum)
self.TxtCollectionRate.text = percentNum
end
function XUiArchiveWeapon:UpdateAchievement()
local selectEquipType = self.BtnGroupTypeList[self.FirstHierarchyFilterSelectIndex]
local groupData = XArchiveConfigs.GetWeaponGroupByType(selectEquipType)
local needCollectNumList = groupData.CollectNum
local achievementNum = needCollectNumList and #needCollectNumList or 0
local haveCollectNum = 0
for _, templateId in ipairs(self.FirstHierarchyFilterDataList) do
if XDataCenter.ArchiveManager.IsWeaponGet(templateId) then
haveCollectNum = haveCollectNum + 1
end
end
local nextAchievementIndex = 0
local needCollectNum = 0
for i = 1, achievementNum do
needCollectNum = needCollectNumList[i]
if haveCollectNum < needCollectNum then
break
end
nextAchievementIndex = i
end
self:CheckLevelUp(selectEquipType,nextAchievementIndex,groupData)
self.LockedAchievement.gameObject:SetActiveEx(achievementNum ~= 0 and nextAchievementIndex == 0)
nextAchievementIndex = math.max(MinIndex, nextAchievementIndex)
local content = groupData.CollectionContent[nextAchievementIndex]
self.TxtAchievementName.text = content or self.TxtAchievementName.text
local iconPath = groupData.IconPath[nextAchievementIndex]
if iconPath then
self.RImgAchievementIcon:SetRawImage(iconPath)
self.RImgAchievementIcon.gameObject:SetActiveEx(true)
else
self.RImgAchievementIcon.gameObject:SetActiveEx(false)
end
haveCollectNum = math.min(haveCollectNum, needCollectNum)
self.TxtHaveCollectNum.text = haveCollectNum
self.TxtNeedCollectNum.text = needCollectNum
local IsCountShow = haveCollectNum ~= needCollectNum
self.TxtHaveCollectNum.gameObject:SetActiveEx(IsCountShow)
end
function XUiArchiveWeapon:SaveCollectionDefaultData()
for _,type in pairs(self.BtnGroupTypeList) do
local groupData = XArchiveConfigs.GetWeaponGroupByType(type)
local needCollectNumList = groupData.CollectNum
local achievementNum = needCollectNumList and #needCollectNumList or 0
local haveCollectNum = 0
local dataList = self:FirstHierarchyFilter(self.WeaponDataDic, type)
for _, templateId in ipairs(dataList) do
if XDataCenter.ArchiveManager.IsWeaponGet(templateId) then
haveCollectNum = haveCollectNum + 1
end
end
local nextAchievementIndex = 0
local needCollectNum
for i = 1, achievementNum do
needCollectNum = needCollectNumList[i]
if haveCollectNum < needCollectNum then
break
end
nextAchievementIndex = i
end
XDataCenter.ArchiveManager.SaveWeaponsCollectionDefaultData(type,nextAchievementIndex)
end
end
function XUiArchiveWeapon:CheckLevelUp(selectEquipType,level,groupData)
local IsLevel,OldLevel = XDataCenter.ArchiveManager.CheckWeaponsCollectionLevelUp(selectEquipType,level)
if IsLevel then
local firstIndex = 1
local levelData = {}
levelData.Level = OldLevel
levelData.OldIcon = groupData.IconPath[OldLevel] or groupData.IconPath[firstIndex]
levelData.CurIcon = groupData.IconPath[level]
levelData.OldText = groupData.CollectionTitle[OldLevel] or groupData.IconPath[firstIndex]
levelData.CurText = groupData.CollectionTitle[level]
XLuaUiManager.Open("UiArchiveWeaponsCollectionTips", levelData)
end
end
-----------------------------------事件相关----------------------------------------->>>
function XUiArchiveWeapon:OnDynamicTableEvent(event, index, grid)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
grid:InitRootUi(self)
grid:SetClickCallback(handler(self, self.OnGridClick))
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
grid:Refresh(self.DynamicTableDataList,index)
end
end
function XUiArchiveWeapon:OnGridClick(templateIdList,index)
XLuaUiManager.Open("UiArchiveWeaponDetail", templateIdList,index)
end
function XUiArchiveWeapon:OnTabBtnGroupClick(index)
if self.FirstHierarchyFilterSelectIndex == index then return end
if self.FirstHierarchyFilterSelectIndex then
local oldFilterType = self.BtnGroupTypeList[self.FirstHierarchyFilterSelectIndex]
XDataCenter.ArchiveManager.HandleCanUnlockWeaponByWeaponType(oldFilterType)
XDataCenter.ArchiveManager.HandleCanUnlockWeaponSettingByWeaponType(oldFilterType)
end
local filterType = self.BtnGroupTypeList[index]
self.DynamicTableDataList = self:FirstHierarchyFilter(self.WeaponDataDic, filterType)
self.FirstHierarchyFilterDataList = self.DynamicTableDataList
self.FirstHierarchyFilterSelectIndex = index
self:UpdateCollection()
self:UpdateAchievement()
if DrdSortIndexToType[self.SecondHierarchyFilterSelectIndex] == OwnStatusType.All then
self:SortEquipDataList(self.DynamicTableDataList, self.IsStarAscendOrder)
self:UpdateDynamicTable()
else
self:ResetDrdSort()
end
end
function XUiArchiveWeapon:OnDrdSortClick(index)
if self.SecondHierarchyFilterSelectIndex == index then return end
if self.FirstHierarchyFilterDataList then
self.DynamicTableDataList = self:SecondHierarchyFilter(self.FirstHierarchyFilterDataList, DrdSortIndexToType[index])
end
self.SecondHierarchyFilterSelectIndex = index
self:SortEquipDataList(self.DynamicTableDataList, self.IsStarAscendOrder)
self:UpdateDynamicTable()
end
function XUiArchiveWeapon:OnBtnOrderClick()
self.IsStarAscendOrder = not self.IsStarAscendOrder
self:UpdateOrderStatus(self.IsStarAscendOrder)
self:SortEquipDataList(self.DynamicTableDataList, self.IsStarAscendOrder)
self:UpdateDynamicTable()
end
-- 有new标签时显示new标签如果只有红点显示红点红点和new标签同时存在则只显示new标签
function XUiArchiveWeapon:OnCheckWeaponRedPoint()
local btn
local isShowTag
for type, _ in pairs(self.WeaponDataDic) do
btn = self.TabBtnTypeDic[type]
if btn then
isShowTag = XDataCenter.ArchiveManager.IsHaveNewWeaponByWeaponType(type)
if isShowTag then
btn:ShowTag(true)
btn:ShowReddot(false)
else
btn:ShowTag(false)
btn:ShowReddot(XDataCenter.ArchiveManager.IsHaveNewWeaponSettingByWeaponType(type))
end
end
end
end
-----------------------------------事件相关-----------------------------------------<<<