Files
Endfield-Data/LuaScripts/UI/Widgets/CommonToggleGroup.lua
2025-12-02 20:37:18 +07:00

116 lines
3.0 KiB
Lua

local UIWidgetBase = require_ex('Common/Core/UIWidgetBase')
CommonToggleGroup = HL.Class('CommonToggleGroup', UIWidgetBase)
CommonToggleGroup.m_toggleCache = HL.Field(HL.Forward("UIListCache"))
CommonToggleGroup.m_tweenSelectBg = HL.Field(HL.Userdata)
CommonToggleGroup.m_toggleIsOnAction = HL.Field(HL.Function)
CommonToggleGroup.m_selectBgSiblingIndex = HL.Field(HL.Number) << -1
CommonToggleGroup._OnFirstTimeInit = HL.Override() << function(self)
self.m_toggleCache = UIUtils.genCellCache(self.view.toggle)
end
CommonToggleGroup.InitCommonToggleGroup = HL.Method(HL.Table) << function(self, arg)
self:_FirstTimeInit()
self.m_toggleIsOnAction = arg.onToggleIsOn
self.m_selectBgSiblingIndex = -1
local defaultIndex = arg.defaultIndex or 1
self.m_toggleCache:Refresh(#arg.toggleDataList, function(toggleCell, index)
toggleCell.toggle.onValueChanged:RemoveAllListeners()
local toggleData = arg.toggleDataList[index]
local isDefault = index == defaultIndex
toggleCell.toggle.isOn = isDefault
toggleCell.txtName.text = toggleData.name
toggleCell.toggle.onValueChanged:AddListener(function(isOn)
if isOn then
self:_OnToggleIsOn(index, toggleCell, true)
end
end)
if isDefault then
if arg.defaultNotCall ~= true then
self:_OnToggleIsOn(index, toggleCell, false)
end
self.m_selectBgSiblingIndex = self.view.selectedBG.transform:GetSiblingIndex()
self.view.selectedBG.transform:SetParent(toggleCell.transform, false)
self.view.selectedBG.transform:SetSiblingIndex(0)
self.view.selectedBG.transform.localPosition = Vector3.zero
end
end)
LayoutRebuilder.ForceRebuildLayoutImmediate(self.view.transform)
end
CommonToggleGroup._OnDestroy = HL.Override() << function (self)
if self.m_tweenSelectBg then
self.m_tweenSelectBg:Kill()
self.m_tweenSelectBg = nil
end
end
CommonToggleGroup._OnToggleIsOn = HL.Method(HL.Number, HL.Table, HL.Boolean) << function(self, index, toggleCell, playAnim)
if self.m_selectBgSiblingIndex > 0 then
self.view.selectedBG.transform:SetParent(self.view.transform, false)
self.view.selectedBG.transform:SetSiblingIndex(self.m_selectBgSiblingIndex)
self.m_selectBgSiblingIndex = -1
end
if self.m_tweenSelectBg then
self.m_tweenSelectBg:Kill()
end
if playAnim then
self.m_tweenSelectBg = DOTween.To(function()
return self.view.selectedBG.transform.position
end, function(value)
self.view.selectedBG.transform.position = value
end, toggleCell.transform.position, self.config.TWEEN_BG_DURATION)
else
self.view.selectedBG.transform.position = toggleCell.transform.position
end
if self.m_toggleIsOnAction then
self.m_toggleIsOnAction(index)
end
end
HL.Commit(CommonToggleGroup)
return CommonToggleGroup