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

390 lines
No EOL
14 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--
-- 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
-----------------------------------事件相关-----------------------------------------<<<