PGRData/Script/matrix/xui/xuidraw/XUiNewDrawMain.lua

472 lines
18 KiB
Lua
Raw Normal View History

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 XUiNewDrawMain = XLuaUiManager.Register(XLuaUi, "UiNewDrawMain")
local XUiNewGridDrawBanner = require("XUi/XUiDraw/XUiNewGridDrawBanner")
local ServerDataReadyMaxCount = 2 --增加不同系统类型抽卡时记得酌情增加
local DEFAULT_UP_IMG = CS.XGame.ClientConfig:GetString("DrawDefaultUpImg")
local GUIDE_SHOW_GROUP = CS.XGame.ClientConfig:GetInt("GuideShowGroup")
function XUiNewDrawMain:OnStart(ruleType, groupId)
self.RuleType = ruleType
self.DefaultGroupId = groupId
if XLuaUiManager.IsUiShow("UiGuide") then
self.DefaultGroupId = GUIDE_SHOW_GROUP
end
self.AssetActivityPanel = XUiPanelActivityAsset.New(self.PanelSpecialTool)
self.BtnFirst.gameObject:SetActiveEx(false)
self.BtnChild.gameObject:SetActiveEx(false)
self.MainBtnList = {} -- 保存一级标签按钮物体重复使用在CreateMainBtn函数中按钮不足时会生成按钮
self.SubBtnList = {} -- 保存二级标签按钮物体重复使用在CreateSubBtn函数中按钮不足时会生成按钮
self.DrawScene = XUiDrawScene.New(self)
self.CurBanner = nil
self.TextWelfare = self.LabelWelfare:FindTransform("TextWelfare"):GetComponent("Text")
self:SetButtonCallBack()
self.BtnIndex = 0
end
function XUiNewDrawMain:OnDestroy()
self:MarkAllNewTag()
end
function XUiNewDrawMain:OnEnable()
self:InitDrawCardsData()
if self.CurBanner then
self.CurBanner:Refresh()
end
end
function XUiNewDrawMain:SetButtonCallBack()
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()
local groupInfo = XDataCenter.DrawManager.GetDrawGroupInfoByGroupId(self.GroupId)
XLuaUiManager.Open("UiDrawOptional", self,
function(drawId)
self:OnSelectUp(drawId)
self:RefreshScene()
end,
function()
self:Close()
end, groupInfo.UseDrawId)
end
function XUiNewDrawMain:OnBtnLBClick()
self:OpenChildUi("UiDrawPurchaseLB", self)
end
function XUiNewDrawMain:OnSelectUp(drawId)
local drawInfo = XDataCenter.DrawManager.GetDrawInfo(drawId)
self.DrawInfo = drawInfo
self:UpdatePurchase()
self.DrawControl:Update(drawInfo)
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.AllDataList[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.AllDataList[self.CurSelectId]:DoSelect(self)
end
function XUiNewDrawMain:Refresh()
self:OnSelectUp(self.DrawInfo.Id)
self:RefreshScene()
if self.LabelWelfare then
local isBottomHintShow = self.DrawInfo.IsTriggerSpecified and self.DrawInfo.IsTriggerSpecified or false
local isNewHandShow = self.DrawInfo.MaxBottomTimes == self.AllDataList[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
end
function XUiNewDrawMain:InitDrawCardsData()
self.readyCount = 0
self.NormalGroupInfoList = {}
XDataCenter.DrawManager.GetDrawGroupList(function() --普通抽卡
self.NormalGroupInfoList = XDataCenter.DrawManager.GetDrawGroupInfos()
self:CheckServerDataReady()
end)
XDataCenter.LottoManager.GetLottoRewardInfoRequest(function() --皮肤抽卡
self.LottoGroupInfoList = XDataCenter.LottoManager.GetLottoGroupDataList()
self:CheckServerDataReady()
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类的字典与数组
self.DrawTabDic = {}
self.DrawTabList = {}
self.AllDataList = {} -- 保存所有标签类,包括一级、二级标签类
self.AllBtnList = {} -- 保存所有标签按钮物体,包括一级、二级标签按钮物体
self.SkipIndexDic = {} -- DrawGroupId对应ButtonGroup的索引
self:CreateDrawTabData(self.NormalGroupInfoList, XNormalDrawGroupBtnEntity) --普通抽卡
self:CreateDrawTabData(self.LottoGroupInfoList, XLottoDrawGroupBtnEntity) --皮肤抽卡
self:SortDrawTabData()
self:InitButtonGroup()
end
---
--- 初始化一级标签类,并保存其子标签类
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: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
---
--- 初始化按钮组,选择默认标签
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
tmpGroupId = XDataCenter.DrawManager.GetLostSelectDrawGroupId()
local tmptype = XDataCenter.DrawManager.GetLostSelectDrawType()
curBtnIndex = self:GetBtnIndexByGroupId(tmptype, tmpGroupId)
if not curBtnIndex then
local groupId = XDataCenter.DrawManager.GetGroupIdWithMaxOrder()
curBtnIndex = self:GetBtnIndexByGroupId(self.RuleType, groupId)
end
end
if curBtnIndex then
local tagEntity = self.AllDataList[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
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
---
--- 一级标签的按钮状态为Disable时传入的index为它自己的index否则为它的第一个子标签的index
---
--- 只有一级标签类才会判断是否能打开卡池
function XUiNewDrawMain:OnSelectedTog(index)
if self.AllDataList[index] then
local IsTypeTab = self.AllDataList[index]:GetRuleType() == XDrawConfigs.RuleType.Tab
self.RuleType = not IsTypeTab and
self.AllDataList[index]:GetRuleType() or self.RuleType
if not IsTypeTab then
XDataCenter.DrawManager.SetLostSelectDrawGroupId(self.AllDataList[index]:GetId())
XDataCenter.DrawManager.SetLostSelectDrawType(self.RuleType)
end
if self.AllDataList[index]:IsMainButton() then
if not self.AllDataList[index]:JudgeCanOpen(true) then
return
end
self.GroupId = self.AllDataList[index].DrawGroupList[1].Id
else
self.GroupId = self.AllDataList[index]:GetId()
end
self.CurSelectId = index
XDataCenter.DrawManager.GetDrawInfoList(self.GroupId, function()
local drawInfo = XDataCenter.DrawManager.GetUseDrawInfoByGroupId(self.GroupId)
self.DrawInfo = drawInfo
self.AllDataList[index].MaxBottomTimes = self.DrawInfo.MaxBottomTimes
self.AllDataList[index].BottomTimes = self.DrawInfo.BottomTimes
self.AllDataList[index]:DoSelect(self)
self:UpdatePurchase()
if not self.DrawControl then
self.DrawControl = XUiDrawControl.New(self, drawInfo, function()
end, self)
else
self.DrawControl:Update(drawInfo)
end
self:Refresh()
self:CheckAutoOpen()
local data = self.AllDataList[index]
self.AssetActivityPanel:Refresh(data:GetUseItemIdList())
XDataCenter.ItemManager.AddCountUpdateListener(self.AllDataList[index]:GetUseItemIdList(),
function()
self.AssetActivityPanel:Refresh(self.AllDataList[index]:GetUseItemIdList())
end, self.AssetActivityPanel)
end)
end
end
---
--- 初始化一级标签按钮物体
function XUiNewDrawMain:CreateMainBtn(data)
local uiButton = self.MainBtnList[self.MainBtnCount]
if not uiButton then
local obj = CS.UnityEngine.Object.Instantiate(self.BtnFirst)
uiButton = obj:GetComponent("XUiButton")
self.MainBtnList[self.MainBtnCount] = uiButton
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())
table.insert(self.AllBtnList, uiButton)
table.insert(self.AllDataList, data)
end
local subGroupIndex = self.BtnIndex
self.BtnIndex = self.BtnIndex + 1
self.MainBtnCount = self.MainBtnCount + 1
return subGroupIndex
end
---
--- 初始化二级标签按钮物体
function XUiNewDrawMain:CreateSubBtn(subGroupIndex, data)
local uiButton = self.SubBtnList[self.SubBtnCount]
if not uiButton then
local obj = CS.UnityEngine.Object.Instantiate(self.BtnChild)
uiButton = obj:GetComponent("XUiButton")
self.SubBtnList[self.SubBtnCount] = uiButton
end
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:ShowTag(data:IsShowTag())
table.insert(self.AllBtnList, uiButton)
table.insert(self.AllDataList, data)
end
self.BtnIndex = self.BtnIndex + 1
self.SubBtnCount = self.SubBtnCount + 1
end
function XUiNewDrawMain:CreateBanner(data)
local drawInfo = XDataCenter.DrawManager.GetUseDrawInfoByGroupId(data:GetId())
if 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.AllDataList or {}) do
if data:GetId() == relationGroupId then
return data
end
end
end
return
end
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.AllDataList[index] and self.AllBtnList[index] then
if self.AllBtnList[index].SubGroupIndex > 0 and self.AllDataList[index]:GetBannerBeginTime() > 0 then
XDataCenter.DrawManager.MarkNewTag(self.AllDataList[index]:GetBannerBeginTime(),
self.AllDataList[index]:GetRuleType(),
self.AllDataList[index]:GetId())
self.AllBtnList[index]:ShowTag(false)
end
end
end
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:RefreshScene()
if self.LastSceneId == self.DrawInfo.Id then
return
end
self.LastSceneId = self.DrawInfo.Id
local drawSceneCfg = XDrawConfigs.GetDrawSceneCfg(self.DrawInfo.Id)
if not drawSceneCfg then
return
end
self.DrawScene:RefreshScene(drawSceneCfg)
end