Files
StellaSora_DataLua/lua/game/ui/disc/discmatlistctrl.lua
T
SL1900 5e0d58cfad Initial version - 1.2.0.60
EN: 1.2.0.60
CN: 1.2.0.61
JP: 1.2.0.63
KR: 1.2.0.67
2025-12-03 01:00:00 +09:00

145 lines
4.2 KiB
Lua

local DiscMatListCtrl = class("DiscMatListCtrl", BaseCtrl)
DiscMatListCtrl._mapNodeConfig = {
sv = {
sComponentName = "LoopScrollView"
},
trSv = {sNodeName = "sv", sComponentName = "Transform"},
Empty = {},
txtEmptyTitle = {sComponentName = "TMP_Text"}
}
DiscMatListCtrl._mapEventConfig = {
DiscChangeGridMat = "OnEvent_ChangeMat",
DiscGridClick = "OnEvent_GridClick"
}
function DiscMatListCtrl:InitData()
if self.tbGridCtrl and next(self.tbGridCtrl) ~= nil then
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.tbGridCtrl[nInstanceId] = nil
end
end
self.tbGridCtrl = {}
self.mapSelect = nil
self.nSelectIndex = nil
self.nPos = nil
end
function DiscMatListCtrl:Open(bOpen)
if self.gameObject.activeSelf and bOpen or not self.gameObject.activeSelf and not bOpen then
return
end
self.gameObject:SetActive(bOpen)
self:InitData()
if not bOpen then
EventManager.Hit("DiscCloseMatList")
return
end
self:RefreshAllData_BreakLimit()
self:RefreshListData_BreakLimit()
self:Refresh()
end
function DiscMatListCtrl:Refresh()
self._mapNode.Empty:SetActive(self.bEmpty)
self._mapNode.sv.gameObject:SetActive(not self.bEmpty)
if self.bEmpty then
NovaAPI.SetTMPText(self._mapNode.txtEmptyTitle, ConfigTable.GetUIText("Outfit_BreakLimit_NoneMat"))
return
end
self:RefreshList()
end
function DiscMatListCtrl:RefreshList()
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.tbGridCtrl[nInstanceId] = nil
end
self._mapNode.sv.gameObject:SetActive(self.nMatCount > 0)
if self.nMatCount > 0 then
self._mapNode.sv:Init(self.nMatCount, self, self.OnGridRefresh, nil, self.nPos ~= nil)
end
end
function DiscMatListCtrl:OnGridRefresh(goGrid, gridIndex)
local nIndex = gridIndex + 1
local mapData = self.tbMatList[nIndex]
local nInstanceID = goGrid:GetInstanceID()
if not self.tbGridCtrl[nInstanceID] then
self.tbGridCtrl[nInstanceID] = self:BindCtrlByNode(goGrid, "Game.UI.Disc.DiscGridMatCtrl")
end
if self._panel.tbMat[nIndex] then
self.tbMatList[nIndex].nCost = self._panel.tbMat[nIndex].nCost
self.tbMatList[nIndex].nAddIndex = self._panel.tbMat[nIndex].nAddIndex
else
self.tbMatList[nIndex].nCost = 0
self.tbMatList[nIndex].nAddIndex = 0
end
self.tbGridCtrl[nInstanceID]:Refresh(mapData)
self.tbGridCtrl[nInstanceID]:SetCount(mapData.nCost)
self.tbGridCtrl[nInstanceID]:SetSelect(self.nSelectIndex == nIndex)
end
function DiscMatListCtrl:RefreshListWithPos()
self.nPos = self._mapNode.sv:GetScrollPos()
self:RefreshList()
end
function DiscMatListCtrl:SetSelectData()
if self.mapSelect then
for i, mapData in pairs(self.tbMatList) do
if mapData.nIndex == self.mapSelect.nIndex then
self.mapSelect = mapData
self.nSelectIndex = i
return
end
end
end
end
function DiscMatListCtrl:RefreshAllData_BreakLimit()
local nMatId, nMatCount = PlayerData.Disc:GetBreakLimitMat(self._panel.nId)
self.nMatCount = nMatCount
self.mapDiscMat = {nId = nMatId, nCount = nMatCount}
self.bEmpty = self.nMatCount == 0
end
function DiscMatListCtrl:RefreshListData_BreakLimit()
if self.nMatCount > 0 then
self.tbMatList = {}
for i = 1, self.mapDiscMat.nCount do
local mapData = {
nId = self.mapDiscMat.nId,
nIndex = i,
nType = GameEnum.itemStype.DiscLimitBreak,
nCost = 0,
nAddIndex = 0
}
table.insert(self.tbMatList, mapData)
end
self:SetSelectData()
end
end
function DiscMatListCtrl:Awake()
end
function DiscMatListCtrl:OnEnable()
end
function DiscMatListCtrl:OnDisable()
if self.tbGridCtrl then
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.tbGridCtrl[nInstanceId] = nil
end
self.tbGridCtrl = {}
end
end
function DiscMatListCtrl:OnDestroy()
end
function DiscMatListCtrl:OnEvent_ChangeMat()
if self.gameObject.activeSelf then
self:RefreshListWithPos()
end
end
function DiscMatListCtrl:OnEvent_GridClick(nIndex)
if self.nSelectIndex then
local goSelect = self._mapNode.trSv:Find("Viewport/Content/" .. self.nSelectIndex - 1)
if goSelect then
self.tbGridCtrl[goSelect.gameObject:GetInstanceID()]:SetSelect(false)
end
end
self.nSelectIndex = nIndex
self.mapSelect = self.tbMatList[nIndex]
end
return DiscMatListCtrl