b5f384616a
EN: 1.4.0.77 CN: 1.4.0.79 JP: 1.4.0.81 KR: 1.4.0.84
217 lines
6.4 KiB
Lua
217 lines
6.4 KiB
Lua
local DiscListCtrl = class("DiscListCtrl", BaseCtrl)
|
|
DiscListCtrl._mapNodeConfig = {
|
|
TopBar = {
|
|
sNodeName = "TopBarPanel",
|
|
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
|
},
|
|
imgEmpty = {},
|
|
labEmpty = {
|
|
sNodeName = "txt_EmptyTitle",
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Filter_NoAim"
|
|
},
|
|
sv = {
|
|
sComponentName = "LoopScrollView"
|
|
},
|
|
btnFilter = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Filter"
|
|
},
|
|
imgFilterChoose = {},
|
|
aniPanel = {
|
|
sNodeName = "----SafeAreaRoot----",
|
|
sComponentName = "Animator"
|
|
},
|
|
goSortDropdown = {
|
|
sCtrlName = "Game.UI.TemplateEx.TemplateDropdownCtrl"
|
|
},
|
|
btnOrder = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Order"
|
|
},
|
|
imgArrowUpEnable = {},
|
|
imgArrowUpDisable = {},
|
|
imgArrowDownEnable = {},
|
|
imgArrowDownDisable = {},
|
|
btnBreakLimitAll = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_BreakLimitAll"
|
|
},
|
|
txtBtnBreakLimitAll = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Disc_Btn_BreakLimitAll"
|
|
}
|
|
}
|
|
DiscListCtrl._mapEventConfig = {
|
|
[EventId.FilterConfirm] = "RefreshByFilter",
|
|
SelectTemplateDD = "OnEvent_SortRuleChange"
|
|
}
|
|
function DiscListCtrl:Refresh()
|
|
local isDirty = PlayerData.Filter:IsDirty(AllEnum.OptionType.Disc)
|
|
self._mapNode.imgFilterChoose:SetActive(isDirty)
|
|
self:FilterDisc()
|
|
self:SortDisc()
|
|
self:RefreshOrderState()
|
|
self:RefreshAllBreakLimit()
|
|
local nCurCount = #self.tbSortedDisc
|
|
if 0 < nCurCount then
|
|
self._mapNode.imgEmpty:SetActive(false)
|
|
self._mapNode.sv.gameObject:SetActive(true)
|
|
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
|
|
self:UnbindCtrlByNode(objCtrl)
|
|
self.tbGridCtrl[nInstanceId] = nil
|
|
end
|
|
self._mapNode.sv:Init(nCurCount, self, self.OnGridRefresh, self.OnGridBtnClick, self.bFirstIn == false)
|
|
else
|
|
self._mapNode.imgEmpty:SetActive(true)
|
|
self._mapNode.sv.gameObject:SetActive(false)
|
|
end
|
|
end
|
|
function DiscListCtrl:FilterDisc()
|
|
self.tbSortedDisc = {}
|
|
for _, data in pairs(self.tbAllDisc) do
|
|
local mapCfg = ConfigTable.GetData("Disc", data.nId)
|
|
if mapCfg.Visible then
|
|
local isFilter = PlayerData.Filter:CheckFilterByDisc(data.nId)
|
|
if isFilter then
|
|
table.insert(self.tbSortedDisc, data)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
function DiscListCtrl:SortDisc()
|
|
self.tbDiscId = {}
|
|
UTILS.SortByPriority(self.tbSortedDisc, {
|
|
AllEnum.DiscSortField[self.tbSortCfg.nSortType]
|
|
}, PlayerData.Disc:GetDiscSortField(), self.tbSortCfg.bOrder)
|
|
for i = 1, #self.tbSortedDisc do
|
|
table.insert(self.tbDiscId, self.tbSortedDisc[i].nId)
|
|
end
|
|
end
|
|
function DiscListCtrl:OnGridRefresh(goGrid, gridIndex)
|
|
local nIndex = gridIndex + 1
|
|
local nInstanceId = goGrid:GetInstanceID()
|
|
if not self.tbGridCtrl[nInstanceId] then
|
|
self.tbGridCtrl[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.TemplateEx.TemplateDiscCtrl")
|
|
end
|
|
self.tbGridCtrl[nInstanceId]:Refresh(self.tbSortedDisc[nIndex].nId)
|
|
end
|
|
function DiscListCtrl:OnGridBtnClick(goGrid, gridIndex)
|
|
local nIndex = gridIndex + 1
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.Disc, self.tbSortedDisc[nIndex].nId, self.tbDiscId)
|
|
self._panel._nFadeInType = 2
|
|
end
|
|
function DiscListCtrl:RefreshOrderState()
|
|
self._mapNode.imgArrowUpEnable:SetActive(self.tbSortCfg.bOrder)
|
|
self._mapNode.imgArrowUpDisable:SetActive(not self.tbSortCfg.bOrder)
|
|
self._mapNode.imgArrowDownEnable:SetActive(not self.tbSortCfg.bOrder)
|
|
self._mapNode.imgArrowDownDisable:SetActive(self.tbSortCfg.bOrder)
|
|
end
|
|
function DiscListCtrl:RefreshAllBreakLimit()
|
|
self.tbMat = PlayerData.Disc:GetAllBreakLimitMat()
|
|
self._mapNode.btnBreakLimitAll.gameObject:SetActive(next(self.tbMat) ~= nil)
|
|
end
|
|
function DiscListCtrl:FadeIn(bPlayFadeIn)
|
|
if self._panel._nFadeInType == 1 then
|
|
EventManager.Hit(EventId.SetTransition)
|
|
self._mapNode.aniPanel:SetTrigger("tIn")
|
|
EventManager.Hit(EventId.TemporaryBlockInput, 0.4)
|
|
end
|
|
end
|
|
function DiscListCtrl:Awake()
|
|
self.tbFilterCfg = {}
|
|
self.bFirstIn = true
|
|
self.bOpen = false
|
|
end
|
|
function DiscListCtrl:OnEnable()
|
|
self.tbSortCfg = {
|
|
nSortType = PlayerData.Filter.nFormationDiscSrotType,
|
|
bOrder = PlayerData.Filter.bFormationDiscOrder
|
|
}
|
|
local curSortIdx = 1
|
|
local tbSortType = PlayerData.Char:GetCharSortType()
|
|
for nIdx, nSortType in ipairs(tbSortType) do
|
|
if self.tbSortCfg.nSortType == nSortType then
|
|
curSortIdx = nIdx
|
|
end
|
|
end
|
|
self._mapNode.goSortDropdown:SetList(PlayerData.Disc:GetDiscSortNameTextCfg(), curSortIdx - 1)
|
|
self.tbAllDisc = PlayerData.Disc:GetAllDisc()
|
|
self.tbSortedDisc = {}
|
|
self.tbDiscId = {}
|
|
self.tbGridCtrl = {}
|
|
self:Refresh()
|
|
self.bOpen = true
|
|
end
|
|
function DiscListCtrl:OnDisable()
|
|
self.bOpen = false
|
|
self.tbSortedDisc = nil
|
|
self.tbDiscId = nil
|
|
self.tbAllDisc = nil
|
|
self.bFirstIn = false
|
|
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
|
|
self:UnbindCtrlByNode(objCtrl)
|
|
self.tbGridCtrl[nInstanceId] = nil
|
|
end
|
|
self.tbGridCtrl = {}
|
|
end
|
|
function DiscListCtrl:OnDestroy()
|
|
self.tbFilterCfg = nil
|
|
self.tbSortCfg = nil
|
|
end
|
|
function DiscListCtrl:RefreshByFilter()
|
|
self:Refresh()
|
|
end
|
|
function DiscListCtrl:OnEvent_SortRuleChange(nValue)
|
|
if not self.bOpen then
|
|
return
|
|
end
|
|
local nV = nValue + 1
|
|
self.tbSortCfg.nSortType = PlayerData.Disc:GetDiscSortType()[nV]
|
|
self.tbSortCfg.bOrder = false
|
|
PlayerData.Filter:CacheDiscSort(self.tbSortCfg.nSortType, self.tbSortCfg.bOrder)
|
|
self:Refresh()
|
|
end
|
|
function DiscListCtrl:OnBtnClick_Order(btn)
|
|
self.tbSortCfg.bOrder = not self.tbSortCfg.bOrder
|
|
PlayerData.Filter:CacheDiscSort(self.tbSortCfg.nSortType, self.tbSortCfg.bOrder)
|
|
self:Refresh()
|
|
end
|
|
function DiscListCtrl:OnBtnClick_Filter()
|
|
local tbOption = {
|
|
AllEnum.ChooseOption.Star_Rarity,
|
|
AllEnum.ChooseOption.Star_Element,
|
|
AllEnum.ChooseOption.Star_Tag,
|
|
AllEnum.ChooseOption.Star_Note
|
|
}
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.FilterPopupPanel, tbOption)
|
|
end
|
|
function DiscListCtrl:OnCharacterScreenConfirm(tbFilterCfg)
|
|
end
|
|
function DiscListCtrl:OnBtnClick_BreakLimitAll()
|
|
local callback = function()
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.DiscSucBar, {
|
|
tbMat = self.tbMat
|
|
}, AllEnum.DiscSucBar.BreakLimitAll)
|
|
self.tbAllDisc = PlayerData.Disc:GetAllDisc()
|
|
if not self.bOpen then
|
|
return
|
|
end
|
|
self:Refresh()
|
|
end
|
|
local allBreak = function()
|
|
PlayerData.Disc:SendAllDiscLimitBreakReq(callback)
|
|
end
|
|
local msg = {
|
|
nType = AllEnum.MessageBox.Item,
|
|
sTitle = ConfigTable.GetUIText("Disc_BreakLimitAll_Title"),
|
|
sContent = ConfigTable.GetUIText("Disc_BreakLimitAll_Tip"),
|
|
tbItem = self.tbMat,
|
|
callbackConfirm = function()
|
|
allBreak()
|
|
end
|
|
}
|
|
EventManager.Hit(EventId.OpenMessageBox, msg)
|
|
end
|
|
return DiscListCtrl
|