PGRData/Script/matrix/xui/xuipurchase/XUiPurchase.lua

566 lines
No EOL
19 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 Object = CS.UnityEngine.Object
local Next = _G.next
local XUiPurchase = XLuaUiManager.Register(XLuaUi, "UiPurchase")
-- local TabsConfig
local PanelNameConfig
local PanelExNameConfig
local LBUiTypes
local YKUiTypes
-- local TabExConfig
local UiTypeCfg = {}
local XUiPurchasePay = require("XUi/XUiPurchase/XUiPurchasePay")
local XUiPurchasePayAdd = require("XUi/XUiPurchase/XUiPurchasePayAdd")
local XUiPurchaseLB = require("XUi/XUiPurchase/XUiPurchaseLB")
local XUiPurchaseYK = require("XUi/XUiPurchase/XUiPurchaseYK")
local XUiPurchaseYKList = require("XUi/XUiPurchase/XUiPurchaseYKList")
-- local XUiPurchaseHK = require("XUi/XUiPurchase/XUiPurchaseHK")
local XUiPurchaseHKShop = require("XUi/XUiPurchase/XUiPurchaseHKShop")
local XUiPurchaseHKExchange = require("XUi/XUiPurchase/XUiPurchaseHKExchange")
local XUiPurchaseHKExchangeTop = require("XUi/XUiPurchase/XUiPurchaseHKExchangeTop")
local XUiPurchaseCoatingLB = require("XUi/XUiPurchase/XUiPurchaseCoatingLB")
local XUiPurchaseRecommend = require("XUi/XUiPurchase/XUiPurchaseRecommend")
-- BtnLzcj = 累计充值、LB = 礼包、YK = 月卡、HK = 虹卡
function XUiPurchase:OnAwake()
-- TabsConfig = XPurchaseConfigs.TabsConfig
PanelNameConfig = XPurchaseConfigs.PanelNameConfig -- 顶头界面配置
PanelExNameConfig = XPurchaseConfigs.PanelExNameConfig -- 补给包左侧页签配置
-- TabExConfig = XPurchaseConfigs.TabExConfig
self:GetLBUiTypesList() -- 创建LBUiTypes礼包类型
self:GetYKUiTypesList() -- 创建YKUiTypes月卡类型
UiTypeCfg = XPurchaseConfigs.GetTabControlUiTypeConfig() -- 创建顶部页签数据
self:InitUi() -- 创建顶部按钮、注册子页面信息
XRedPointManager.AddRedPointEvent(self.GameObject, self.LBRedPoint, self, {XRedPointConditions.Types.CONDITION_PURCHASE_LB_RED})
XRedPointManager.AddRedPointEvent(self.GameObject, self.AccumulateRedPoint, self, {XRedPointConditions.Types.CONDITION_ACCUMULATE_PAY_RED})
XRedPointManager.AddRedPointEvent(self.GameObject, self.UpdateRecommendRed, self, {XRedPointConditions.Types.CONDITION_PURCHASE_RECOMMEND_RED}, nil, false)
self.TimeId = nil
end
function XUiPurchase:OnEnable()
if self.CurUiView then
self.CurUiView:ShowPanel()
end
XEventManager.AddEventListener(XEventId.EVENT_ACCUMULATED_UPDATE,self.OnAccumulatedUpdate,self)
XEventManager.AddEventListener(XEventId.EVENT_ACCUMULATED_REWARD,self.OnAccumulatedGeted,self)
if not self.TimeId then
self.TimeId = XScheduleManager.ScheduleForever(function()
self:RefreshTimeData()
end, XScheduleManager.SECOND, 0)
end
end
function XUiPurchase:OnStart(tab, isClearData, childTabIndex)
self.IsClearData = isClearData
if isClearData == nil then
self.IsClearData = true
end
self.ChildTabIndex = childTabIndex or 1
XDataCenter.PurchaseManager.GetPurchaseListRequest(XPurchaseConfigs.GetLBUiTypesList())
local t = tab or 1
self:OnStartSelTab(t)
-- 刷新累计充值状态
local flag = XDataCenter.PurchaseManager.IsAccumulateEnterOpen()
self.BtnLjcz.gameObject:SetActive(flag)
if flag then
local f = XDataCenter.PurchaseManager.AccumulatePayRedPoint()
self.BtnLjcz:ShowReddot(f)
end
XDataCenter.PurchaseManager.GetRecommendManager():RequestServerData(function()
local recommendManager = XDataCenter.PurchaseManager.GetRecommendManager()
local index = self:GetTabIndexByTabType(XPurchaseConfigs.TabsConfig.Recommend)
local button = self.TabGroup:GetButtonByIndex(index)
local isActive = recommendManager:CheckHasRecommend()
button.gameObject:SetActiveEx(isActive)
if isActive then
button:ShowReddot(recommendManager:GetIsShowRedPoint())
else
if self.CurGroupTab == index then
self:OnStartSelTab(XPurchaseConfigs.TabsConfig.LB)
end
end
end)
end
function XUiPurchase:AddListener()
self:RegisterClickEvent(self.BtnMainUi, self.OnBtnMainUiClick)
self:RegisterClickEvent(self.BtnBack, self.OnBtnReturnClick)
self:RegisterClickEvent(self.BtnLjcz, self.OnBtnPayAddClick)
end
function XUiPurchase:OnGetEvents()
end
function XUiPurchase:OnNotify()
end
function XUiPurchase:OnBtnReturnClick()
self:Close()
end
function XUiPurchase:OnBtnMainUiClick()
XLuaUiManager.RunMain()
end
function XUiPurchase:OnBtnPayAddClick()
self.PanelLjcz.gameObject:SetActive(true)
self:PlayAnimationWithMask("PanelLjczEnable")
self.UiPurchasePayAdd:OnRefresh()
end
function XUiPurchase:GetLBUiTypesList()
local t = XPurchaseConfigs.GetLBUiTypesList()
LBUiTypes = {}
for _,v in pairs(t)do
LBUiTypes[v] = v
end
end
function XUiPurchase:GetYKUiTypesList()
local t = XPurchaseConfigs.GetYKUiTypes()
YKUiTypes = {}
for _,v in pairs(t)do
YKUiTypes[v] = v
end
end
function XUiPurchase:InitUi()
self.TabBtns = {}
self.LBtnIndex = {}
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAssetPay, XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.HongKa)
local groupTabBtns = {}
self.TabsCfg = XPurchaseConfigs.GetGroupConfigType() -- 获取顶部每个标签数据
-- 创建顶部每个标签按钮
self.TabGroup = self.PanelTopTabGroup:GetComponent("XUiButtonGroup")
for _, v in ipairs(self.TabsCfg) do
local btn = Object.Instantiate(self.BtnPayTab)
btn.gameObject:SetActive(true)
btn.transform:SetParent(self.PanelTopTabGroup.transform, false)
local btncs = btn:GetComponent("XUiButton")
btncs:SetName(v.GroupName)
local iconPath = XPurchaseConfigs.GetIconPathByIconName(v.GroupIcon)
if iconPath and iconPath.AssetPath then
btn:SetRawImage(iconPath.AssetPath)
end
if self:IsLBUiType(v.Childs) then
btn:ShowReddot(XDataCenter.PurchaseManager.LBRedPoint())
self.LBBtn = btn
elseif self:IsYKUiType(v.Childs) then
btn:ShowReddot(XDataCenter.PurchaseManager.CheckYKContinueBuy())
else
btn:ShowReddot(false)
end
table.insert(groupTabBtns, btncs)
end
self.TabGroup:Init(groupTabBtns, function(tab) self:TabSkip(tab) end)
local purchaseLBCb = function(skipIndex, leftTabIndex)
if leftTabIndex == nil then leftTabIndex = 1 end
self:OnStartSelTab(skipIndex)
if skipIndex == XPurchaseConfigs.TabsConfig.LB
and leftTabIndex > 0 then
self.GroupTab:SelectIndex(leftTabIndex)
end
end
self.UiPanel = {}
self.UiPanel[PanelNameConfig.PanelRecharge] = XUiPurchasePay.New(self.PanelRecharge,self,XPurchaseConfigs.TabExConfig.Sample)
self.UiPanel[PanelNameConfig.PanelLb] = XUiPurchaseLB.New(self.PanelLb,self, purchaseLBCb)
self.UiPanel[PanelNameConfig.PanelYk] = XUiPurchaseYKList.New(self.PanelYk, self, purchaseLBCb)
self.UiPanel[PanelNameConfig.PanelDh] = XUiPurchaseHKExchangeTop.New(self.PanelDh, self, purchaseLBCb)
self.UiPanel[PanelNameConfig.PanelHksd] = XUiPurchaseHKShop.New(self.PanelHksd,self)
self.UiPanel[PanelNameConfig.PanelTj] = XUiPurchaseRecommend.New(self.PanelTj, self, purchaseLBCb)
self.UiPanel[PanelExNameConfig.PanelRecharge] = XUiPurchasePay.New(self.PanelRechargeEx,self,XPurchaseConfigs.TabExConfig.EXTable)
self.UiPanel[PanelExNameConfig.PanelLb] = XUiPurchaseLB.New(self.PanelLbEx,self, purchaseLBCb)
self.UiPanel[PanelExNameConfig.PanelDh] = XUiPurchaseHKExchange.New(self.PanelDhEx, self, purchaseLBCb)
self.UiPanel[PanelExNameConfig.PanelYk] = XUiPurchaseYK.New(self.PanelYkEx, self, purchaseLBCb)
self.UiPanel[PanelExNameConfig.PanelHksd] = XUiPurchaseHKShop.New(self.PanelHksdEx,self)
self.UiPanel[PanelExNameConfig.PanelCoatingLb] = XUiPurchaseCoatingLB.New(self.PanelCoatingLbEx, self, purchaseLBCb)
self.UiPurchasePayAdd = XUiPurchasePayAdd.New(self.PanelLjcz,self)
self:AddListener()
end
function XUiPurchase:SetData()
local cfg = self.TabsCfg[self.CurGroupTab]
if not cfg then
return
end
local names = XPurchaseConfigs.PanelNameConfig
local childs = cfg.Childs or {}
self:CheckChildCount(childs, names)
end
function XUiPurchase:CheckChildCount(childs, names)
if #childs > 1 then
-- names = XPurchaseConfigs.PanelExNameConfig
self.Panels.gameObject:SetActive(false)
self.PanelsEx.gameObject:SetActive(true)
self.ImgBgEx.gameObject:SetActive(true)
self.PanelTabGroup.gameObject:SetActive(true)
self:InitGroupTab(self.CurUiTypes)
if self.IsStartAnimation then
self.IsStartAnimation = false
self:PlayAnimationWithMask("AnimEnableSmall")
else
self:PlayAnimationWithMask("QieHuanSmall")
end
else
self.PanelTabGroup.gameObject:SetActive(false)
self.ImgBgEx.gameObject:SetActive(false)
self.Panels.gameObject:SetActive(true)
self.PanelsEx.gameObject:SetActive(false)
for k,v in pairs(names)do
if self.UiPanel[k] then
if k ~= self.CurUiNames[k] then
self.UiPanel[k]:HidePanel()
else
self.CurUiView = self.UiPanel[v]
self.CurUiView:OnRefresh(self.CurUiTypes[1])
end
end
end
if self.IsStartAnimation then
self.IsStartAnimation = false
self:PlayAnimationWithMask("AnimEnableBig")
else
self:PlayAnimationWithMask("QieHuanBig")
end
end
end
function XUiPurchase:TabSkip(tab)
if self.CurGroupTab == tab then
return
end
local cfg = self.TabsCfg[tab]
if not cfg then
return
end
local childs = cfg.Childs or {}
if Next(childs) == nil then
return
end
if self.TxtTagBgText then
self.TxtTagBgText.text = XUiHelper.GetText("PurchaseBgText" .. cfg.GroupId)
end
local dict = {}
dict["ui_first_button"] = XGlobalVar.BtnBuriedSpotTypeLevelOne.BtnUiMainBtnRecharge
dict["role_level"] = XPlayer.GetLevel()
dict["ui_second_button"] = XGlobalVar.BtnBuriedSpotTypeLevelTwo["BtnUiPurchaseBtnTabSkip"..tab]
CS.XRecord.Record(dict, "200004", "UiOpen")
self.CurGroupTab = tab
self.SingleTab = nil
local names = XPurchaseConfigs.PanelNameConfig
local sendUiTypes = {}
self.CurUiTypes = {}
self.CurUiNames = {}
-- 充值的读表不需后端数据
-- 获取充值的UiType, 充值的UiType是不配置在礼包里默认是不知道哪里写死的1
local payUiTypes = XPurchaseConfigs.GetPayUiTypes()
for _, v in pairs(childs) do
-- 过滤掉充值的UiType
if not payUiTypes[v.UiType] then
table.insert(sendUiTypes, v.UiType)
end
table.insert(self.CurUiTypes, v.UiType)
local tmpCfg = XPurchaseConfigs.GetUiTypeConfigByType(v.UiType)
if tmpCfg and tmpCfg.UiPrefabStyle then
self.CurUiNames[tmpCfg.UiPrefabStyle] = tmpCfg.UiPrefabStyle
end
end
if self.CurUiView then
self.CurUiView:HidePanel()
end
sendUiTypes = appendArray(sendUiTypes, cfg.ReqUiTypes)
sendUiTypes = table.unique(sendUiTypes, true)
if Next(sendUiTypes) ~= nil then
if XDataCenter.PurchaseManager.IsHaveDataByUiTypes(sendUiTypes) then
self:SetData()
else
XDataCenter.PurchaseManager.GetPurchaseListRequest(sendUiTypes,function()
self:SetData()
end)
end
else
-- self:CheckChildCount(childs, names) -- 此处产生过冲突, 待后续验证后决定使用哪个, 如果这段没用记得删除
if #childs > 1 then
-- names = XPurchaseConfigs.PanelExNameConfig
self.Panels.gameObject:SetActive(false)
self.PanelsEx.gameObject:SetActive(true)
self.ImgBgEx.gameObject:SetActive(true)
self.PanelTabGroup.gameObject:SetActive(true)
self:InitGroupTab(self.CurUiTypes)
if self.IsStartAnimation then
self.IsStartAnimation = false
self:PlayAnimation("AnimEnableSmall")
else
self:PlayAnimation("QieHuanSmall")
end
else
self.PanelTabGroup.gameObject:SetActive(false)
self.ImgBgEx.gameObject:SetActive(false)
self.Panels.gameObject:SetActive(true)
self.PanelsEx.gameObject:SetActive(false)
for k,v in pairs(names)do
if self.UiPanel[k] then
if k ~= self.CurUiNames[k] then
self.UiPanel[k]:HidePanel()
else
self.CurUiView = self.UiPanel[v]
self.CurUiView:OnRefresh(self.CurUiTypes[1])
end
end
end
if self.IsStartAnimation then
self.IsStartAnimation = false
self:PlayAnimation("AnimEnableBig")
else
self:PlayAnimation("QieHuanBig")
end
end
end
end
function XUiPurchase:AccumulateRedPoint(result)
if self.BtnLjcz then
self.BtnLjcz:ShowReddot(result >= 0)
end
local index = self:GetTabIndexByTabType(XPurchaseConfigs.TabsConfig.Pay)
local button = self.TabGroup:GetButtonByIndex(index)
button:ShowReddot(result >= 0)
end
function XUiPurchase:LBRedPoint(result)
if self.LBBtn then
self.LBBtn:ShowReddot(result >= 0)
end
local LbRedUiTypes = XDataCenter.PurchaseManager.LBRedPointUiTypes()
if self.Btns and Next(self.LBtnIndex) and Next(LbRedUiTypes) then
for index,uiType in pairs(self.LBtnIndex)do
if uiType and self.Btns[index] then
self.Btns[index]:ShowReddot(LbRedUiTypes[uiType] ~= nil)
end
end
else
if self.Btns and Next(self.Btns) then
for _,btn in pairs(self.Btns)do
if btn then
btn:ShowReddot(false)
end
end
end
end
end
-- [监听动态列表事件]
function XUiPurchase:OnDynamicTableEvent(event, index, grid)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
grid:Init(self)
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
local data = self.ListData[index]
grid:OnRefresh(data)
-- elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
end
end
function XUiPurchase:OnStartSelTab(t)
local index = self:GetTabIndexByTabType(t)
self.IsStartAnimation = true
self:TabSkip(index)
self.TabGroup:SelectIndex(index)
end
function XUiPurchase:GetTabIndexByTabType(tabType)
local uiTypes = XPurchaseConfigs.GetUiTypesByTab(tabType)
local cfg = self.TabsCfg
local index = 1
for k, v in pairs(cfg)do
local childs = v.Childs
for _,c in pairs(childs)do
for _,a in pairs(uiTypes)do
if a.UiType == c.UiType then
index = k
break
end
end
end
end
return index
end
function XUiPurchase.UiTypeTabSort(a,b)
if UiTypeCfg[a] and UiTypeCfg[b] then
return UiTypeCfg[a].GroupOrder < UiTypeCfg[b].GroupOrder
end
return false
end
function XUiPurchase:InitGroupTab(uiTypes)
if not self.Btns then
self.Btns = {}
end
self.LBtnIndex = {}
local LbRedUiTypes = XDataCenter.PurchaseManager.LBRedPointUiTypes()
local i = 0
for k, v in pairs(uiTypes) do
if not self.TabBtns[k] then
local btn = Object.Instantiate(self.BtnTab)
btn.transform:SetParent(self.PanelTabGroup.transform, false)
self.Btns[k] = btn
local btncs = btn:GetComponent("XUiButton")
self.TabBtns[k] = btncs
end
if LbRedUiTypes and LbRedUiTypes[v] then
self.Btns[k]:ShowReddot(true)
self.LBtnIndex[k] = v
else
self.Btns[k]:ShowReddot(false)
end
self.Btns[k].gameObject:SetActive(true)
self.TabBtns[k]:SetName(UiTypeCfg[v].Name)
i = i + 1
end
local len = #self.Btns
if i < len then
for index = i+1, len do
self.Btns[index].gameObject:SetActive(false)
end
end
self.GroupTab:Init(self.TabBtns, function(tab) self:GroupTabSkip(tab) end)
self.GroupTab:SelectIndex(self.ChildTabIndex)
end
function XUiPurchase:GroupTabSkip(tab)
if self.SingleTab == tab then
return
end
local cfgs = self.TabsCfg[self.CurGroupTab]
if not cfgs or not cfgs.Childs[tab] then
return
end
local cfg = XPurchaseConfigs.GetUiTypeConfigByType(cfgs.Childs[tab].UiType)
if not cfg or not cfg.UiPrefabStyle then
return
end
local dict = {}
dict["ui_first_button"] = XGlobalVar.BtnBuriedSpotTypeLevelOne.BtnUiMainBtnRecharge
dict["role_level"] = XPlayer.GetLevel()
dict["ui_second_button"] = XGlobalVar.BtnBuriedSpotTypeLevelTwo["BtnUiPurchaseGroupTabSkip"..tab]
CS.XRecord.Record(dict, "200004", "UiOpen")
self.SingleTab = tab
if self.CurUiView then
self.CurUiView:HidePanel()
end
local n = PanelExNameConfig[cfg.UiPrefabStyle]
self.CurUiView = self.UiPanel[n]
-- 切换到非礼包页签,默认多隐藏礼包页签一次,防止数据未到达时快速切换到皮肤礼包导致隐藏错误
if n ~= PanelExNameConfig.PanelLb then
self.UiPanel[PanelExNameConfig.PanelLb]:HidePanel()
end
self.CurUiView:OnRefresh(cfg.UiType)
self:PlayAnimationWithMask("QieHuanSmall")
end
function XUiPurchase:OnAccumulatedUpdate()
end
function XUiPurchase:OnAccumulatedGeted()
self.UiPurchasePayAdd:SetListData()
end
function XUiPurchase:OnDisable()
if self.CurUiView then
self.CurUiView:HidePanel()
end
XEventManager.RemoveEventListener(XEventId.EVENT_ACCUMULATED_UPDATE,self.OnAccumulatedUpdate,self)
XEventManager.RemoveEventListener(XEventId.EVENT_ACCUMULATED_REWARD, self.OnAccumulatedGeted,self)
if self.TimeId then
XScheduleManager.UnSchedule(self.TimeId)
self.TimeId = nil
end
end
function XUiPurchase:OnDestroy()
self.Btns = nil
if self.IsClearData then
XDataCenter.PurchaseManager.ClearData()
end
for _,panel in pairs(self.UiPanel) do
if panel.BuyUiTips then
panel.BuyUiTips:OnDestroy()
end
end
end
function XUiPurchase:IsLBUiType(cfg)
if Next(cfg) then
for _, v in pairs(cfg)do
if LBUiTypes[v.UiType] then
return true
end
end
end
return false
end
function XUiPurchase:IsYKUiType(cfg)
if Next(cfg) then
for _, v in pairs(cfg)do
if YKUiTypes[v.UiType] then
return true
end
end
end
return false
end
function XUiPurchase:UpdateRecommendRed()
local index = self:GetTabIndexByTabType(XPurchaseConfigs.TabsConfig.Recommend)
local button = self.TabGroup:GetButtonByIndex(index)
button:ShowReddot(XDataCenter.PurchaseManager.GetRecommendManager():GetIsShowRedPoint())
end
function XUiPurchase:RefreshTimeData()
local tjPanel = self.UiPanel[PanelNameConfig.PanelTj]
if tjPanel.RefreshTimeData then
tjPanel:RefreshTimeData()
end
end