PGRData/Script/matrix/xui/xuifuben/uidynamiclist/XUiGridFubenSideTab.lua
2024-09-01 22:49:41 +02:00

186 lines
No EOL
7.1 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local XUiGridFubenSideTab = XClass(nil, "XUiGridFubenSideTab")
local BtnState =
{
Disable = "Disable",
Normal = "Normal"
}
function XUiGridFubenSideTab:Ctor(ui)
XUiHelper.InitUiClass(self, ui)
self.IsDestroy = nil
self.GridIndex = nil
self.CenterPosition = self.BtnTab.transform.localPosition
local downPositionY = self.CenterPosition.y - self.Transform.sizeDelta.y / 4 - self.BtnTab.transform.sizeDelta.y / 2
self.DownPosition = CS.UnityEngine.Vector3(self.CenterPosition.x, downPositionY, self.CenterPosition.z)
local upPositionY = self.CenterPosition.y + self.Transform.sizeDelta.y / 4 + self.BtnTab.transform.sizeDelta.y / 2
self.UpPosition = CS.UnityEngine.Vector3(self.CenterPosition.x, upPositionY, self.CenterPosition.z)
self.MoveTimerId = nil
self.Duration = 0.3
self.IsBtnDisable = nil
XUiHelper.RegisterClickEvent(self, self.BtnPressNm, self.OnBtnTabClicked)
XUiHelper.RegisterClickEvent(self, self.BtnPressDisable, self.OnBtnTabClicked)
end
function XUiGridFubenSideTab:SetData(index)
self.GridIndex = index
end
function XUiGridFubenSideTab:Click(...)
-- 侧边栏兼容新手指引
if XDataCenter.GuideManager.CheckIsInGuide() and XDataCenter.GuideManager.GetGridNextCb() then
XDataCenter.GuideManager:DoNextGridCb(self.Index)
XDataCenter.GuideManager.SetGridNextCb(nil) -- 执行后将回调置空
self:SetIsSelected(true)
self:PlayCenterAnim(false)
end
end
function XUiGridFubenSideTab:PlayCenterAnim(isAnim, isUp)
if isAnim == nil then isAnim = true end
-- XLog.Warning(string.format("================ PlayCenterAnim %s %s ", self.GridIndex, isAnim))
if not isAnim then
self.BtnTab.transform.localPosition = self.CenterPosition
self.BtnPressNm.transform.localPosition = self.CenterPosition
self.BtnPressDisable.transform.localPosition = self.CenterPosition
return
end
local beginY = self.BtnTab.transform.localPosition.y
local diffValue = math.abs(self.CenterPosition.y - beginY)
if isUp then
diffValue = diffValue * -1
end
self:StopMoveTimer()
self.MoveTimerId = XUiHelper.Tween(self.Duration, function(weight)
if self.IsDestroy then
return
end
self.BtnTab.transform:UpdateLocalPositionY(beginY + diffValue * weight)
self.BtnPressNm.transform:UpdateLocalPositionY(beginY + diffValue * weight)
self.BtnPressDisable.transform:UpdateLocalPositionY(beginY + diffValue * weight)
end, function()
self.BtnTab.transform.localPosition = self.CenterPosition
self.BtnPressNm.transform.localPosition = self.CenterPosition
self.BtnPressDisable.transform.localPosition = self.CenterPosition
end)
end
function XUiGridFubenSideTab:PlayMoveUpAnim(isAnim)
if isAnim == nil then isAnim = true end
-- XLog.Warning(string.format("================ PlayMoveUpAnim %s %s ", self.GridIndex, isAnim))
if not isAnim then
self.BtnTab.transform.localPosition = self.UpPosition
self.BtnPressNm.transform.localPosition = self.UpPosition
self.BtnPressDisable.transform.localPosition = self.UpPosition
return
end
local beginY = self.BtnTab.transform.localPosition.y
local diffValue = math.abs(self.UpPosition.y - beginY)
self:StopMoveTimer()
self.MoveTimerId = XUiHelper.Tween(self.Duration, function(weight)
if self.IsDestroy then
return
end
self.BtnTab.transform:UpdateLocalPositionY(beginY + diffValue * weight)
self.BtnPressNm.transform:UpdateLocalPositionY(beginY + diffValue * weight)
self.BtnPressDisable.transform:UpdateLocalPositionY(beginY + diffValue * weight)
end, function()
self.BtnTab.transform.localPosition = self.UpPosition
self.BtnPressNm.transform.localPosition = self.UpPosition
self.BtnPressDisable.transform.localPosition = self.UpPosition
end)
end
function XUiGridFubenSideTab:PlayMoveDownAnim(isAnim)
if isAnim == nil then isAnim = true end
-- XLog.Warning(string.format("================ PlayMoveDownAnim %s %s ", self.GridIndex, isAnim))
if not isAnim then
self.BtnTab.transform.localPosition = self.DownPosition
self.BtnPressNm.transform.localPosition = self.DownPosition
self.BtnPressDisable.transform.localPosition = self.DownPosition
return
end
local beginY = self.BtnTab.transform.localPosition.y
local diffValue = math.abs(self.DownPosition.y - beginY)
self:StopMoveTimer()
self.MoveTimerId = XUiHelper.Tween(self.Duration, function(weight)
if self.IsDestroy then
return
end
self.BtnTab.transform:UpdateLocalPositionY(beginY - diffValue * weight)
self.BtnPressNm.transform:UpdateLocalPositionY(beginY - diffValue * weight)
self.BtnPressDisable.transform:UpdateLocalPositionY(beginY - diffValue * weight)
end)
end
function XUiGridFubenSideTab:SetBtnState(stateName)
self.BtnTab.transform:Find(stateName).gameObject:SetActiveEx(true)
for i = 0, self.BtnTab.transform.childCount - 1 do
local trans = self.BtnTab.transform:GetChild(i)
if trans.gameObject.name ~= stateName then
trans.gameObject:SetActiveEx(false)
end
end
end
function XUiGridFubenSideTab:SetBtnSelect(flag)
local stateName = "Select"
if flag then
stateName = self.IsBtnDisable and stateName..BtnState.Disable or stateName..BtnState.Normal
else
stateName = self.IsBtnDisable and BtnState.Disable or BtnState.Normal
end
self:SetBtnState(stateName)
end
function XUiGridFubenSideTab:SetBtnStateDisable(flag)
local stateName = flag and "Disable" or "Normal" -- Btn是normal状态的点击按钮Btn2是Disable的按钮
self.IsBtnDisable = flag
self.BtnPressNm.transform.gameObject:SetActiveEx(not flag)
self.BtnPressDisable.transform.gameObject:SetActiveEx(flag)
self:SetBtnState(stateName)
end
function XUiGridFubenSideTab:SetIsSelected(value, isDraging, isBeginDrag)
if self.ImgSelect then
if not value and isDraging and isBeginDrag then -- 只有拖拽的时候才有聚焦效果
self.ImgSelect.gameObject:SetActiveEx(true)
else
self.ImgSelect.gameObject:SetActiveEx(false)
end
end
if self.ExCheckOwnLock then -- 如果有子判单方法就用该方法判断该标签是否开放
self:SetBtnStateDisable(self:ExCheckOwnLock())
elseif self.GroupConfig then -- 判断该标签是否开放
local isDisable = not XDataCenter.FubenManagerEx.CheckHasOpenBySecondTagId(self.GroupConfig.Id)
self:SetBtnStateDisable(isDisable)
end
if value then
self:SetBtnSelect(true)
else
self:SetBtnSelect(false)
end
end
function XUiGridFubenSideTab:ResetPosition()
self.BtnTab.transform.localPosition = self.CenterPosition
end
function XUiGridFubenSideTab:StopMoveTimer()
if self.MoveTimerId then
XScheduleManager.UnSchedule(self.MoveTimerId)
end
self.MoveTimerId = nil
end
function XUiGridFubenSideTab:OnDestroy()
self.IsDestroy = true
self:StopMoveTimer()
end
return XUiGridFubenSideTab