Files
StellaSora_DataLua/lua/game/ui/settings/optionmultiselect.lua
T
SL1900 08b515afd9 Major Update - 2.0.0.143
EN: 2.0.0.143
CN: 2.0.0.142
JP: 2.0.0.145
KR: 2.0.0.150
2026-10-20 13:00:00 +09:00

113 lines
2.8 KiB
Lua

local OptionMultiSelect = class("OptionMultiSelect", BaseCtrl)
OptionMultiSelect._mapNodeConfig = {
txtOptionTitle = {sComponentName = "TMP_Text"},
svList = {
sComponentName = "RectTransform"
},
btnReset = {
sComponentName = "UIButton",
callback = "OnBtnClick_Reset"
},
ListItem = {}
}
OptionMultiSelect._mapEventConfig = {}
function OptionMultiSelect:Init(tbTextList, sTitle, callback)
NovaAPI.SetTMPText(self._mapNode.txtOptionTitle, sTitle)
self.callback = callback
self.tbCurSelect = {}
self.nItemCount = #tbTextList
self:ClearGrids()
for k, v in pairs(self.tbGo) do
if k > self.nItemCount then
v:SetActive(false)
end
end
for i = 1, self.nItemCount do
do
local item = self.tbGo[i]
if item == nil then
item = instantiate(self._mapNode.ListItem, self._mapNode.svList)
end
self.tbGo[i] = item
item:SetActive(true)
local ctrl = self:BindCtrlByNode(item, "Game.UI.Settings.OptionMultiSelectGrid")
if ctrl ~= nil then
ctrl:Init(tbTextList[i])
local btn = item:GetComponent("UIButton")
btn.onClick:RemoveAllListeners()
btn.onClick:AddListener(function()
self:OnGridClick(i)
end)
table.insert(self.tbItem, ctrl)
end
end
end
end
function OptionMultiSelect:OnGridClick(nBtnIndex)
local nIndexOfThis = table.indexof(self.tbCurSelect, nBtnIndex)
if 0 < nIndexOfThis then
table.remove(self.tbCurSelect, nIndexOfThis)
self.tbItem[nBtnIndex]:SetSelect(false, 0)
for k, v in pairs(self.tbCurSelect) do
self.tbItem[v]:SetSelect(true, k)
end
else
table.insert(self.tbCurSelect, nBtnIndex)
self.tbItem[nBtnIndex]:SetSelect(true, #self.tbCurSelect)
end
if self.callback ~= nil then
self.callback(self.tbCurSelect)
end
end
function OptionMultiSelect:SetSelect(tbSelect)
self:Reset()
self.tbCurSelect = tbSelect
if self.tbItem ~= nil then
for k, v in pairs(self.tbCurSelect) do
self.tbItem[v]:SetSelect(true, k)
end
else
self:Reset()
end
end
function OptionMultiSelect:Reset()
for i = 1, self.nItemCount do
self.tbItem[i]:SetSelect(false, 0)
end
self.tbCurSelect = {}
end
function OptionMultiSelect:ClearGrids()
if self.tbItem ~= nil then
for i = #self.tbItem, 1, -1 do
local item = self.tbItem[i].gameObject
local btn = item:GetComponent("UIButton")
btn.onClick:RemoveAllListeners()
self:UnbindCtrlByNode(self.tbItem[i])
table.remove(self.tbItem, i)
end
end
self.tbItem = {}
end
function OptionMultiSelect:Awake()
self.tbGo = {}
end
function OptionMultiSelect:OnEnable()
self._mapNode.ListItem:SetActive(false)
end
function OptionMultiSelect:OnDisable()
self:ClearGrids()
end
function OptionMultiSelect:OnDestroy()
for k, v in pairs(self.tbGo) do
destroy(v)
end
self.tbGo = {}
end
function OptionMultiSelect:OnBtnClick_Reset()
self:Reset()
if self.callback ~= nil then
self.callback(self.tbCurSelect)
end
end
return OptionMultiSelect