forked from endernon/PGRData
390 lines
14 KiB
Lua
390 lines
14 KiB
Lua
|
--
|
|||
|
-- 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
|
|||
|
-----------------------------------事件相关-----------------------------------------<<<
|