PGRData/Script/matrix/xui/xuidraw/XUiNewDrawMain.lua
2024-09-01 22:49:41 +02:00

836 lines
32 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 XDrawTabBtnEntity = require("XEntity/XDrawMianButton/XDrawTabBtnEntity")
local XNormalDrawGroupBtnEntity = require("XEntity/XDrawMianButton/XNormalDrawGroupBtnEntity")
local XLottoDrawGroupBtnEntity = require("XEntity/XDrawMianButton/XLottoDrawGroupBtnEntity")
local XUiDrawControl = require("XUi/XUiDraw/XUiDrawControl")
local XUiDrawScene = require("XUi/XUiDraw/XUiDrawScene")
local XUiNewGridDrawBanner = require("XUi/XUiDraw/XUiNewGridDrawBanner")
---@class XUiNewDrawMain:XLuaUi
local XUiNewDrawMain = XLuaUiManager.Register(XLuaUi, "UiNewDrawMain")
local ServerDataReadyMaxCount = 1 --增加不同系统类型抽卡时记得酌情增加
local DEFAULT_UP_IMG = CS.XGame.ClientConfig:GetString("DrawDefaultUpImg")
local GUIDE_SHOW_GROUP = CS.XGame.ClientConfig:GetInt("GuideShowGroup")
function XUiNewDrawMain:OnStart(ruleType, groupId, defaultDrawId)
self.RuleType = ruleType
self.DefaultGroupId = groupId
if XLuaUiManager.IsUiShow("UiGuide") then
self.DefaultGroupId = GUIDE_SHOW_GROUP
end
---@type XUiComponent.XUiButton[]
self.MainBtnList = {} -- 保存一级标签按钮物体重复使用在CreateMainBtn函数中按钮不足时会生成按钮
---@type XUiComponent.XUiButton[]
self.SubBtnList = {} -- 保存二级标签按钮物体重复使用在CreateSubBtn函数中按钮不足时会生成按钮
---@type XUiNewGridDrawBanner
self.CurBanner = nil
self.BtnIndex = 0
self.DefaultDrawId = defaultDrawId
self.IsFirstIn = true
self:InitScene()
self:InitAssetPanel()
self:InitBtn()
self:InitWelfare()
self:AddBtnListener()
self:AddEventListener()
end
function XUiNewDrawMain:OnEnable()
self:InitDrawCardsData()
if self.CurBanner then
self.CurBanner:Refresh()
end
-- 直接返回界面刷新
if self.DrawInfo then
self:RefreshScene()
end
-- 抽卡时等结束再弹窗
if self._IsActivityTargetWaitDraw then
self:_WhenDrawActivityStatusUpdate(self._UpdateTargetActivityType)
end
end
function XUiNewDrawMain:OnDestroy()
self:RemoveEventListener()
self:MarkAllNewTag()
end
function XUiNewDrawMain:Refresh()
if XTool.IsNumberValid(self.DefaultDrawId) then
self:RefreshDefaultDrawId()
else
self:OnSelectUp(self.DrawInfo.Id)
self:RefreshScene()
end
self:RefreshWelfare()
self:_RefreshCharacterDrawTarget()
end
function XUiNewDrawMain:UpdateDrawControl()
if self.DrawControl then
self.DrawControl:Update(self.DrawInfo, self.GroupId)
end
end
--region Data - DrawCardData & BtnGroupObj
function XUiNewDrawMain:InitDrawCardsData()
self.readyCount = 0
self.NormalGroupInfoList = {}
if not self.IsFirstIn then
XDataCenter.DrawManager.GetDrawGroupList(function()
self:_InitDrawCardsData()
end)
else
self:_InitDrawCardsData()
self.IsFirstIn = false
end
end
function XUiNewDrawMain:_InitDrawCardsData()
self.NormalGroupInfoList = XDataCenter.DrawManager.GetDrawGroupInfos()
self:_CheckServerDataReady()
end
function XUiNewDrawMain:RefreshDefaultDrawId()
if not XTool.IsNumberValid(self.DefaultDrawId) then
return
end
local drawId = self.DefaultDrawId
self.DefaultDrawId = nil
local infoList = XDataCenter.DrawManager.GetDrawInfoListByGroupId(self.GroupId)
local exist = false
for _, info in pairs(infoList) do
if info.Id == drawId then
exist = true
break
end
end
-- 不存在研发
if exist then
XDataCenter.DrawManager.SaveDrawAimId(drawId, self.GroupId, function()
self:OnSelectUp(drawId)
self:RefreshScene()
end)
else
XUiManager.TipText("EquipGuideDrawNoWeaponTip")
self:OnSelectUp(self.DrawInfo.Id)
self:RefreshScene()
end
end
function XUiNewDrawMain:_CheckServerDataReady()
--增加不同系统类型抽卡时记得检查“ServerDataReadyMaxCount”是否相应的增加
self.readyCount = self.readyCount + 1
if self.readyCount == ServerDataReadyMaxCount then
self:_InitDrawTabs()
end
end
function XUiNewDrawMain:_InitDrawTabs()
self.BtnIndex = 1
self.MainBtnCount = 1
self.SubBtnCount = 1
-- 保存一级标签XDrawTabBtnEntity类的字典与数组
---@type XDrawTabBtnEntity[]
self.DrawTabDic = {}
---@type XDrawTabBtnEntity[]
self.DrawTabList = {}
---@type table<number, XDrawTabBtnEntity|XDrawGroupBtnBaseEntity>
self.AllTabEntityList = {} -- 保存所有标签类,包括一级、二级标签类
---@type XUiComponent.XUiButton[]
self.AllBtnList = {} -- 保存所有标签按钮物体,包括一级、二级标签按钮物体
self.SkipIndexDic = {} -- DrawGroupId对应ButtonGroup的索引
self:_CreateDrawTabData(self.NormalGroupInfoList, XNormalDrawGroupBtnEntity) --普通抽卡
self:_SortDrawTabData()
self:_InitButtonGroup()
end
--- 初始化一级标签类,并保存其子标签类
---@param class XDrawGroupBtnBaseEntity
function XUiNewDrawMain:_CreateDrawTabData(groupInfoList, class)
----增加不同系统类型抽卡时页签生成需要添加对应的实体与初始化逻辑
for _, drawGroupInfo in pairs(groupInfoList or {}) do
local groupEntity = class.New() -- 生成组(二级标签)按钮用实体
groupEntity:UpdateData(drawGroupInfo)
if not self.DrawTabDic[groupEntity:GetTag()] then
self.DrawTabDic[groupEntity:GetTag()] = XDrawTabBtnEntity.New(groupEntity:GetTag()) -- 生成类(一级标签)按钮用实体
table.insert(self.DrawTabList, self.DrawTabDic[groupEntity:GetTag()])
end
self.DrawTabDic[groupEntity:GetTag()]:InsertDrawGroupList(groupEntity)
end
end
function XUiNewDrawMain:_SortDrawTabData()
table.sort(self.DrawTabList, function(a, b)
return a:GetPriority() < b:GetPriority()
end)
end
--- 初始化按钮组,选择默认标签
function XUiNewDrawMain:_InitButtonGroup()
self:_BtnInit(self.MainBtnList)
self:_BtnInit(self.SubBtnList)
for _, drawTab in pairs(self.DrawTabList or {}) do
local subgroupIndex = self:CreateMainBtn(drawTab)
for _, drawGroupInfo in pairs(drawTab:GetDrawGroupList() or {}) do
self:CreateSubBtn(subgroupIndex, drawGroupInfo)
end
end
local curBtnIndex = 0
local tmpGroupId = 0
if self.DefaultGroupId then
tmpGroupId = self.DefaultGroupId
curBtnIndex = self:GetBtnIndexByGroupId(self.RuleType, tmpGroupId)
self.DefaultGroupId = nil
else
if self.IsFirstIn then
tmpGroupId = XDataCenter.DrawManager.GetGroupIdWithFreeTicket()
if tmpGroupId == nil then
tmpGroupId = XDataCenter.DrawManager.GetLostSelectDrawGroupId()
end
self.IsFirstIn = false
curBtnIndex = self:GetBtnIndexByGroupId(XDrawConfigs.RuleType.Normal, tmpGroupId)
else
tmpGroupId = XDataCenter.DrawManager.GetLostSelectDrawGroupId()
local tmptype = XDataCenter.DrawManager.GetLostSelectDrawType()
curBtnIndex = self:GetBtnIndexByGroupId(tmptype, tmpGroupId)
end
if not curBtnIndex then
local groupId = XDataCenter.DrawManager.GetGroupIdWithMaxOrder()
curBtnIndex = self:GetBtnIndexByGroupId(self.RuleType, groupId)
end
end
if curBtnIndex then
local tagEntity = self.AllTabEntityList[curBtnIndex]
if tagEntity and not tagEntity:IsMainButton() then
-- 如果tagEntity为二级标签,则获取它所属的一级标签,然后判断是否可以打开
local mainTagEntity = self.DrawTabDic[tagEntity:GetTag()]
local isOpen = mainTagEntity:JudgeCanOpen(true)
if not isOpen then
curBtnIndex = 1
end
end
else
XUiManager.TipText("NewDrawSkipNotInTime")
curBtnIndex = 1
end
self.PanelNoticeTitleBtnGroup:Init(self.AllBtnList, function(index)
self:OnSelectedTog(index)
end)
self.PanelNoticeTitleBtnGroup:SelectIndex(self.AllBtnList[curBtnIndex] and curBtnIndex or 1)
end
---@param BtnList XUiComponent.XUiButton[]
function XUiNewDrawMain:_BtnInit(BtnList)
for _, btn in pairs(BtnList or {}) do
btn.gameObject:SetActiveEx(false)
btn:SetButtonState(CS.UiButtonState.Normal)
btn.TempState = CS.UiButtonState.Normal
btn.IsFold = false --初始化时需要把按钮的状态已打开设置为false
end
end
function XUiNewDrawMain:GetBtnIndexByGroupId(ruleType, groupId)
local curBtnIndex = self.SkipIndexDic and
self.SkipIndexDic[ruleType] and
self.SkipIndexDic[ruleType][groupId]
return curBtnIndex
end
--endregion
--region Ui - AssetPanel
function XUiNewDrawMain:InitAssetPanel()
self.AssetActivityPanel = XUiPanelActivityAsset.New(self.PanelSpecialTool)
end
function XUiNewDrawMain:RefreshAssetPanel(index)
local data = self.AllTabEntityList[index]
self.AssetActivityPanel:Refresh(data:GetUseItemIdList())
XDataCenter.ItemManager.AddCountUpdateListener(self.AllTabEntityList[self.CurSelectId]:GetUseItemIdList(),
function()
self.AssetActivityPanel:Refresh(self.AllTabEntityList[self.CurSelectId]:GetUseItemIdList())
end, self.AssetActivityPanel)
end
--endregion
--region Ui - ShowBanner
---加载描述面板
function XUiNewDrawMain:CreateBanner(data)
local groupActivityTargetData = XDataCenter.DrawManager.GetDrawGroupActivityTargetInfo(self.GroupId)
local activeTargetId = groupActivityTargetData and groupActivityTargetData:GetActivityId()
local drawInfo = XDataCenter.DrawManager.GetUseDrawInfoByGroupId(data:GetId())
if XTool.IsNumberValid(activeTargetId) and not string.IsNilOrEmpty(XDrawConfigs.GetDrawActivityTargetShowBannerPrefab(activeTargetId)) then
local prefab = self.PanelBanner:LoadPrefab(XDrawConfigs.GetDrawActivityTargetShowBannerPrefab(activeTargetId))
self.CurBanner = XUiNewGridDrawBanner.New(prefab, data, self)
self.CurBanner.GameObject.name = data:GetId()
elseif drawInfo.Banner then
local prefab = self.PanelBanner:LoadPrefab(drawInfo.Banner)
self.CurBanner = XUiNewGridDrawBanner.New(prefab, data, self)
self.CurBanner.GameObject.name = data:GetId()
else
local prefab = self.PanelBanner:LoadPrefab(data:GetBanner())
self.CurBanner = XUiNewGridDrawBanner.New(prefab, data, self)
self.CurBanner.GameObject.name = data:GetId()
end
if drawInfo.Resources then
self.CurBanner:SetImage(drawInfo.Resources)
end
end
function XUiNewDrawMain:GetRelationGroupData(id)
local groupRelationDic = XDrawConfigs.GetDrawGroupRelationDic()
local relationGroupId = groupRelationDic[id]
if relationGroupId then
for _, data in pairs(self.AllTabEntityList or {}) do
if data:GetId() == relationGroupId then
return data
end
end
end
return
end
--endregion
--region Ui - Mask 抽奖遮罩
function XUiNewDrawMain:MarkCurNewTag()
if self.CurSelectId then
self:_DoMark(self.CurSelectId)
else
XLog.Error("XUiNewDrawMain:MarkCurNewTag函数错误self.CurSelectId为nil")
end
end
function XUiNewDrawMain:MarkAllNewTag()
for index = 1, self.BtnIndex do
self:_DoMark(index)
end
end
function XUiNewDrawMain:_DoMark(index)
if self.AllTabEntityList[index] and self.AllBtnList[index] then
if self.AllBtnList[index].SubGroupIndex > 0 and self.AllTabEntityList[index]:GetBannerBeginTime() > 0 then
XDataCenter.DrawManager.MarkNewTag(self.AllTabEntityList[index]:GetBannerBeginTime(),
self.AllTabEntityList[index]:GetRuleType(),
self.AllTabEntityList[index]:GetId())
self.AllBtnList[index]:ShowTag(false)
end
end
end
--endregion
--region Ui - Welfare
function XUiNewDrawMain:InitWelfare()
self.TextWelfare = self.LabelWelfare:FindTransform("TextWelfare"):GetComponent("Text")
end
function XUiNewDrawMain:RefreshWelfare()
if not self.LabelWelfare then
return
end
local isBottomHintShow = self.DrawInfo.IsTriggerSpecified and self.DrawInfo.IsTriggerSpecified or false
local isNewHandShow = self.DrawInfo.MaxBottomTimes == self.AllTabEntityList[self.CurSelectId]:GetNewHandBottomCount()
if isBottomHintShow then
self.TextWelfare.text = CS.XTextManager.GetText("NewDrawCalibration")
end
if isNewHandShow then
self.TextWelfare.text = CS.XTextManager.GetText("NewDrawNewHand")
end
self.LabelWelfare.gameObject:SetActiveEx(isNewHandShow or isBottomHintShow)
end
--endregion
--region Ui - DrawActivityTarget
function XUiNewDrawMain:InitDrawActivityTarget()
self._TargetBtnOptionalDrawObjDir = {}
self._TargetBtnTargetDrawObjDir = {}
XTool.InitUiObjectByUi(self._TargetBtnOptionalDrawObjDir, self.CurBanner.TargetPanelSwitchA)
XTool.InitUiObjectByUi(self._TargetBtnTargetDrawObjDir, self.CurBanner.TargetPanelSwitchS)
-- 方法注册
if self._TargetBtnOptionalDrawObjDir.BtnSwitch then
self._TargetBtnOptionalDrawObjDir.BtnSwitch.CallBack = function()
self:OnBtnOptionDrawClick()
end
end
if self._TargetBtnTargetDrawObjDir.BtnSwitch then
self._TargetBtnTargetDrawObjDir.BtnSwitch.CallBack = function()
self:OnBtnActivityTargetClick()
end
self._TargetBtnTargetDrawObjDir.BtnAdd.CallBack = function()
self:OnBtnActivityTargetClick()
end
end
end
function XUiNewDrawMain:PlayDrawActivityTimeLineAnim()
if self.CurBanner.PanelSwitchAEnable and not self._IsActivityTargetChange then
self.CurBanner.PanelSwitchAEnable:PlayTimelineAnimation()
end
if self.CurBanner.PanelSwitchSEnable and not self._IsNormalTargetChange then
self.CurBanner.PanelSwitchSEnable:PlayTimelineAnimation()
end
self._IsNormalTargetChange = false
self._IsActivityTargetChange = false
end
function XUiNewDrawMain:_GetActivityTarget(groupId)
local groupActivityTargetData = XDataCenter.DrawManager.GetDrawGroupActivityTargetInfo(groupId)
if not groupActivityTargetData then
return false
end
return groupActivityTargetData:GetTargetId()
end
function XUiNewDrawMain:_RefreshCharacterDrawTarget()
local groupActivityTargetData = XDataCenter.DrawManager.GetDrawGroupActivityTargetInfo(self.GroupId)
if not self.CurBanner or not self.CurBanner.TargetBtnDetails or not groupActivityTargetData then
self:_RefreshBtnTag()
return
end
self:InitDrawActivityTarget()
self:PlayDrawActivityTimeLineAnim()
local isHaveTarget = XTool.IsNumberValid(groupActivityTargetData:GetTargetId())
-- rule按钮文本
self.BtnOptionalDraw.gameObject:SetActiveEx(not self.CurBanner.TargetBtnDetails)
if self.CurBanner.TargetBtnDetails then
local targetCount = groupActivityTargetData:GetTargetCount()
local txt = isHaveTarget and XDrawConfigs.GetDrawActivityTargetShowActiveTipTxt(groupActivityTargetData:GetActivityId())
or XDrawConfigs.GetDrawActivityTargetShowRuleTipTxt(groupActivityTargetData:GetActivityId())
self.CurBanner.TargetBtnDetails:SetNameByGroup(0, XUiHelper.FormatText(txt, targetCount))
end
-- 原卡池按钮
local combination = XDataCenter.DrawManager.GetDrawCombination(self.DrawInfo.Id)
local characterIcon
local levelIcon
if not XTool.IsTableEmpty(combination.GoodsId) then
local arrangeType = XArrangeConfigs.GetType(combination.GoodsId[1])
if arrangeType == XArrangeConfigs.Types.Character then
---@type XCharacterAgency
local characterAgency = XMVCA:GetAgency(ModuleId.XCharacter)
characterIcon = characterAgency:GetCharHalfBodyImage(combination.GoodsId[1])
end
levelIcon = XDrawConfigs.GetDrawClientConfig("DrawTargetAUpIcon", 2)
else
characterIcon = XDrawConfigs.GetDrawClientConfig("DrawTargetDefaultRoleImg")
levelIcon = XDrawConfigs.GetDrawClientConfig("DrawTargetAUpIcon")
end
if not string.IsNilOrEmpty(characterIcon) and self._TargetBtnOptionalDrawObjDir.ImgRole then
self._TargetBtnOptionalDrawObjDir.ImgRole:SetRawImage(characterIcon)
end
if not string.IsNilOrEmpty(levelIcon) and self._TargetBtnOptionalDrawObjDir.ImgLevel then
self._TargetBtnOptionalDrawObjDir.ImgLevel:SetSprite(levelIcon)
end
self:OnSelectTargetActivity(groupActivityTargetData)
self:_RefreshBtnTag()
end
-- 刷新页签标签
function XUiNewDrawMain:_RefreshBtnTag()
local groupTargetData
for _, uiButton in ipairs(self.AllBtnList) do
local btnObjDir = {}
local data = self.AllTabEntityList[table.indexof(self.AllBtnList, uiButton)]
XTool.InitUiObjectByUi(btnObjDir, uiButton.gameObject)
local isShowTag = data:IsShowTag() and (not data:IsShowFreeTip())
if data.DrawGroupList then -- 一级页签
for _, drawData in ipairs(data.DrawGroupList) do
groupTargetData = XDataCenter.DrawManager.GetDrawGroupActivityTargetInfo(drawData.Id)
if groupTargetData then
isShowTag = true
end
end
uiButton:ShowTag(data:IsShowTag() and (not data:IsShowFreeTip()) or isShowTag)
else -- 二级页签
groupTargetData = XDataCenter.DrawManager.GetDrawGroupActivityTargetInfo(self.GroupId)
if btnObjDir.PanelActivity and data:GetId() == self.GroupId then
btnObjDir.PanelActivity.gameObject:SetActiveEx(not isShowTag and groupTargetData)
end
end
end
end
---校准活动按钮刷新
---@param groupActivityTargetData XDrawActivityTargetInfo
function XUiNewDrawMain:OnSelectTargetActivity(groupActivityTargetData)
if not groupActivityTargetData or not self.CurBanner.TargetBtnDetails then
return
end
--这是一个物品id,集合N种物品,包括道具、人物、装备、辅助机等
--因为是通过id规则分配类型的,所以要用XGoodsCommonManager.GetGoodsShowParamsByTemplateId处理一下
local templateId = groupActivityTargetData:GetTargetId()
local isHaveTemplateId = XTool.IsNumberValid(templateId)
if self.CurBanner.RImgName then
self.CurBanner.RImgName.gameObject:SetActiveEx(false)
end
if self._TargetBtnTargetDrawObjDir.PanelAdd then
self._TargetBtnTargetDrawObjDir.PanelAdd.gameObject:SetActiveEx(not isHaveTemplateId)
end
if self._TargetBtnTargetDrawObjDir.PanelSwitch then
self._TargetBtnTargetDrawObjDir.PanelSwitch.gameObject:SetActiveEx(isHaveTemplateId)
end
if not XTool.IsNumberValid(templateId) then
return
end
local arrangeType = XArrangeConfigs.GetType(templateId)
if arrangeType == XArrangeConfigs.Types.Character and self._TargetBtnTargetDrawObjDir.ImgRole then
---@type XCharacterAgency
local characterAgency = XMVCA:GetAgency(ModuleId.XCharacter)
local characterIcon = characterAgency:GetCharHalfBodyImage(templateId)
self._TargetBtnTargetDrawObjDir.ImgRole:SetRawImage(characterIcon)
end
self:RefreshScene()
end
function XUiNewDrawMain:WhenDrawActivityStatusUpdate(tipType)
self._UpdateTargetActivityType = tipType
if XLuaUiManager.IsUiShow(self.Name) then
self:Refresh()
self:RefreshScene()
self:_WhenDrawActivityStatusUpdate(self._UpdateTargetActivityType)
else
self._IsActivityTargetWaitDraw = true
end
end
function XUiNewDrawMain:_WhenDrawActivityStatusUpdate(tipType)
if tipType == XDrawConfigs.DrawTargetTipType.Open then
XUiManager.TipErrorWithKey("DrawTargetActivityOpen")
elseif tipType == XDrawConfigs.DrawTargetTipType.Close then
XUiManager.TipErrorWithKey("DrawTargetActivityClose")
elseif tipType == XDrawConfigs.DrawTargetTipType.Update then
XUiManager.TipErrorWithKey("DrawTargetActivityUpdate")
end
self._IsActivityTargetWaitDraw = false
end
--endregion
--region Ui - MainTagGroup
--- 初始化一级标签按钮物体
---@param data XDrawTabBtnEntity
function XUiNewDrawMain:CreateMainBtn(data)
local uiButton = self.MainBtnList[self.MainBtnCount]
if not uiButton then
local obj = CS.UnityEngine.Object.Instantiate(self.BtnFirst)
obj.name = "TabBtn"..data:GetId()
uiButton = obj:GetComponent("XUiButton")
self.MainBtnList[self.MainBtnCount] = uiButton
end
-- 校准一级页签
local groupTargetData
local isShowTag = false
for _, drawData in ipairs(data.DrawGroupList) do
groupTargetData = XDataCenter.DrawManager.GetDrawGroupActivityTargetInfo(drawData.Id)
if groupTargetData then
isShowTag = true
end
end
if uiButton then
uiButton.gameObject:SetActiveEx(true)
uiButton.transform:SetParent(self.transform, false)
uiButton.transform:SetParent(self.PanelNoticeTitleBtnGroup.transform, false)
local IsUnLock = data:JudgeCanOpen(false)
uiButton:SetDisable(not IsUnLock)
uiButton:SetNameByGroup(0, IsUnLock and (string.format("0%d", data:GetTxtName1())) or "")
uiButton:SetNameByGroup(1, data:GetTxtName2())
uiButton:SetNameByGroup(2, data:GetTxtName3())
uiButton:SetRawImage(data:GetTabBg())
uiButton:ShowTag(data:IsShowTag() and (not data:IsShowFreeTip()) or isShowTag)
uiButton:ShowReddot(data:IsShowFreeTip())
table.insert(self.AllBtnList, uiButton)
table.insert(self.AllTabEntityList, data)
end
local subGroupIndex = self.BtnIndex
self.BtnIndex = self.BtnIndex + 1
self.MainBtnCount = self.MainBtnCount + 1
return subGroupIndex
end
--- 一级标签的按钮状态为Disable时传入的index为它自己的index否则为它的第一个子标签的index
--- 只有一级标签类才会判断是否能打开卡池
function XUiNewDrawMain:OnSelectedTog(index)
if self.AllTabEntityList[index] then
local IsTypeTab = self.AllTabEntityList[index]:GetRuleType() == XDrawConfigs.RuleType.Tab
self.RuleType = not IsTypeTab and
self.AllTabEntityList[index]:GetRuleType() or self.RuleType
if not IsTypeTab then
XDataCenter.DrawManager.SetLostSelectDrawGroupId(self.AllTabEntityList[index]:GetId())
XDataCenter.DrawManager.SetLostSelectDrawType(self.RuleType)
end
if self.AllTabEntityList[index]:IsMainButton() then
if not self.AllTabEntityList[index]:JudgeCanOpen(true) then
return
end
self.GroupId = self.AllTabEntityList[index].DrawGroupList[1].Id
else
self.GroupId = self.AllTabEntityList[index]:GetId()
end
self.CurSelectId = index
XDataCenter.DrawManager.GetDrawInfoList(self.GroupId, function()
local drawInfo = XDataCenter.DrawManager.GetUseDrawInfoByGroupId(self.GroupId)
self.DrawInfo = drawInfo
self.AllTabEntityList[index].MaxBottomTimes = self.DrawInfo.MaxBottomTimes
self.AllTabEntityList[index].BottomTimes = self.DrawInfo.BottomTimes
self.AllTabEntityList[index]:DoSelect(self)
self:UpdatePurchase()
if not self.DrawControl then
---@type XUiDrawControl
self.DrawControl = XUiDrawControl.New(self, drawInfo, function()
end, self)
end
self.DrawControl:Update(drawInfo, self.GroupId)
self:Refresh()
self:CheckAutoOpen()
self:RefreshAssetPanel(index)
end)
end
end
--- 选择第一个页签
function XUiNewDrawMain:SelectFirstTab()
local groupId = XDataCenter.DrawManager.GetGroupIdWithMaxOrder()
local curBtnIndex = self:GetBtnIndexByGroupId(self.RuleType, groupId)
if curBtnIndex then
self.PanelNoticeTitleBtnGroup:SelectIndex(curBtnIndex)
end
end
--endregion
--region Ui - SecondTagGroup
--- 初始化二级标签按钮物体
function XUiNewDrawMain:CreateSubBtn(subGroupIndex, data)
local uiButton = self.SubBtnList[self.SubBtnCount]
local btnObjDir = {}
if not uiButton then
local obj = CS.UnityEngine.Object.Instantiate(self.BtnChild)
XTool.InitUiObjectByUi(btnObjDir, obj)
obj.name = data:GetId()
uiButton = obj:GetComponent("XUiButton")
self.SubBtnList[self.SubBtnCount] = uiButton
end
-- 校准二级页签
local groupTargetData = XDataCenter.DrawManager.GetDrawGroupActivityTargetInfo(data:GetId())
if uiButton then
uiButton.gameObject:SetActiveEx(true)
uiButton.transform:SetParent(self.transform, false)
uiButton.transform:SetParent(self.PanelNoticeTitleBtnGroup.transform, false)
local uiObject = uiButton.transform:GetComponent("UiObject")
uiButton:SetName(data:GetName())
uiButton:SetRawImage(data:GetGroupBtnBg())
uiButton.SubGroupIndex = subGroupIndex
uiObject:GetObject("A").gameObject:SetActiveEx(data:GetRareRank() == XDrawConfigs.RareRank.A)
uiObject:GetObject("S").gameObject:SetActiveEx(data:GetRareRank() == XDrawConfigs.RareRank.S)
self.SkipIndexDic[data:GetRuleType()] = self.SkipIndexDic[data:GetRuleType()] or {}
self.SkipIndexDic[data:GetRuleType()][data:GetId()] = self.BtnIndex
uiButton:ShowReddot(data:IsShowFreeTip())
local isShowTag = data:IsShowTag() and (not data:IsShowFreeTip())
-- 有tag优先显示tag
uiButton:ShowTag(isShowTag)
-- 无tag显示校准
if btnObjDir.PanelActivity then
btnObjDir.PanelActivity.gameObject:SetActiveEx(not isShowTag and groupTargetData)
end
table.insert(self.AllBtnList, uiButton)
table.insert(self.AllTabEntityList, data)
end
self.BtnIndex = self.BtnIndex + 1
self.SubBtnCount = self.SubBtnCount + 1
end
--endregion
--region Ui - DrawUpSelect
---检查自动弹窗概率up选择
function XUiNewDrawMain:CheckAutoOpen()
if self.CurDrawType ~= XDrawConfigs.CombinationsTypes.Aim then
return
end
local IsHaveActivty = false
local activtyTime = 0
local groupInfo = XDataCenter.DrawManager.GetDrawGroupInfoByGroupId(self.GroupId)
local drawInfoList = XDataCenter.DrawManager.GetDrawInfoListByGroupId(self.GroupId)
for _, drawInfo in pairs(drawInfoList) do
if drawInfo.StartTime > 0 then
IsHaveActivty = true
if drawInfo.StartTime > activtyTime then
activtyTime = drawInfo.StartTime
end
end
end
local IsCanActivtyOpen = IsHaveActivty and XDataCenter.DrawManager.IsCanAutoOpenAimGroupSelect(activtyTime, self.GroupId)
if IsCanActivtyOpen or (groupInfo.MaxSwitchDrawIdCount > 0 and groupInfo.UseDrawId == 0) and (not XLuaUiManager.IsUiLoad("UiDrawOptional")) then
self:OnBtnOptionDrawClick()
end
end
function XUiNewDrawMain:OnSelectUp(drawId)
local drawInfo = XDataCenter.DrawManager.GetDrawInfo(drawId)
self.DrawInfo = drawInfo
self:UpdatePurchase()
self.DrawControl:Update(drawInfo, self.GroupId)
local combination = XDataCenter.DrawManager.GetDrawCombination(drawInfo.Id)
if not combination then
self.BtnOptionalDraw.gameObject:SetActiveEx(false)
return
end
self.CurDrawType = combination.Type
self.BtnOptionalDraw.gameObject:SetActiveEx(true)
local drawAimProbability = XDrawConfigs.GetDrawAimProbability()
if drawAimProbability[drawId] then
self.TxtProbability.text = drawAimProbability[drawId].UpProbability or ""
end
if not combination.GoodsId[1] then
self.ImgQuality.gameObject:SetActiveEx(false)
self.RImgRole:SetRawImage(DEFAULT_UP_IMG)
self.AllTabEntityList[self.CurSelectId]:DoSelect(self)
return
end
self.GoodsShowParams = XGoodsCommonManager.GetGoodsShowParamsByTemplateId(combination.GoodsId[1])
self.RImgRole:SetRawImage(self.GoodsShowParams.Icon)
if self.GoodsShowParams.QualityIcon then
self:SetUiSprite(self.ImgQuality, self.GoodsShowParams.QualityIcon)
end
self.ImgQuality.gameObject:SetActiveEx(not string.IsNilOrEmpty(self.GoodsShowParams.QualityIcon))
self.AllTabEntityList[self.CurSelectId]:DoSelect(self)
-- 播放切换特效
self.Effect2.gameObject:SetActive(false)
self.Effect2.gameObject:SetActive(true)
end
--endregion
--region Ui - Purchase
function XUiNewDrawMain:UpdatePurchase()
if self.DrawInfo then
if self.DrawInfo.PurchaseId and next(self.DrawInfo.PurchaseId) then
self.BtnDrawPurchaseLB.gameObject:SetActiveEx(true)
if self.DrawInfo.PurchaseUiType and self.DrawInfo.PurchaseUiType ~= 0 then
local uiType = self.DrawInfo.PurchaseUiType
XDataCenter.PurchaseManager.GetPurchaseListRequest(uiType)
end
else
self.BtnDrawPurchaseLB.gameObject:SetActiveEx(false)
end
end
end
--endregion
--region Ui - BtnListener
function XUiNewDrawMain:InitBtn()
self.BtnFirst.gameObject:SetActiveEx(false)
self.BtnChild.gameObject:SetActiveEx(false)
end
function XUiNewDrawMain:AddBtnListener()
self.BtnMainUi.CallBack = function()
self:OnBtnMainUiClick()
end
self.BtnBack.CallBack = function()
self:OnBtnBackClick()
end
self.BtnOptionalDraw.CallBack = function()
self:OnBtnOptionDrawClick()
end
self.BtnDrawPurchaseLB.CallBack = function()
self:OnBtnLBClick()
end
end
function XUiNewDrawMain:OnBtnBackClick()
self:Close()
end
function XUiNewDrawMain:OnBtnMainUiClick()
XLuaUiManager.RunMain()
end
function XUiNewDrawMain:OnBtnOptionDrawClick()
self.LastSceneId = nil
self._IsNormalTargetChange = true
XLuaUiManager.Open("UiDrawOptional", self,
function(drawId)
self:OnSelectUp(drawId)
self:RefreshScene()
end,
function()
self:Close()
end,
function()
self:SelectFirstTab()
end)
end
function XUiNewDrawMain:OnBtnLBClick()
self:OpenChildUi("UiDrawPurchaseLB", self)
end
function XUiNewDrawMain:OnBtnActivityTargetClick()
self._IsActivityTargetChange = true
XLuaUiManager.Open("UiDrawOptional", self,
function(groupActivityTargetData)
self:OnSelectTargetActivity(groupActivityTargetData)
end,
function()
self:Close()
end,
nil, true)
end
--endregion
--region Event
function XUiNewDrawMain:AddEventListener()
XEventManager.AddEventListener(XEventId.EVENT_DRAW_FREE_TICKET_UPDATE, self.UpdateDrawControl, self)
XEventManager.AddEventListener(XEventId.EVENT_DRAW_TARGET_ACTIVITY_CHANGE, self.WhenDrawActivityStatusUpdate, self)
end
function XUiNewDrawMain:RemoveEventListener()
XEventManager.RemoveEventListener(XEventId.EVENT_DRAW_FREE_TICKET_UPDATE, self.UpdateDrawControl, self)
XEventManager.RemoveEventListener(XEventId.EVENT_DRAW_TARGET_ACTIVITY_CHANGE, self.WhenDrawActivityStatusUpdate, self)
end
--endregion
--region Scene
function XUiNewDrawMain:InitScene()
---@type XUiDrawScene
self.DrawScene = XUiDrawScene.New(self)
end
function XUiNewDrawMain:RefreshScene()
local targetId = self:_GetActivityTarget(self.GroupId)
if self.LastSceneId == self.DrawInfo.Id and self._LastActivityTargetId == targetId then
return
end
self.LastSceneId = self.DrawInfo.Id
local drawSceneCfg = XDrawConfigs.GetDrawSceneCfg(self.DrawInfo.Id)
if not drawSceneCfg then
return
end
self._LastActivityTargetId = targetId
self.DrawScene:RefreshScene(drawSceneCfg, XTool.IsNumberValid(targetId) and targetId)
end
--endregion