PGRData/Script/matrix/xui/xuishop/XUiShop.lua

398 lines
No EOL
13 KiB
Lua

local XUiShop = XLuaUiManager.Register(XLuaUi, "UiShop")
local Dropdown = CS.UnityEngine.UI.Dropdown
local type = type
local ShopFunctionOpenIdDic = {
[XShopManager.ShopType.Common] = XFunctionManager.FunctionName.ShopCommon,
[XShopManager.ShopType.Activity] = XFunctionManager.FunctionName.ShopActive,
[XShopManager.ShopType.Points] = XFunctionManager.FunctionName.ShopPoints,
}
local ShopTypeDic = {
[1] = XShopManager.ShopType.Common,
[2] = XShopManager.ShopType.Points,
[3] = XShopManager.ShopType.Activity,
}
local ShopIndexDic = {
[XShopManager.ShopType.Common] = 1,
[XShopManager.ShopType.Activity] = 3,
[XShopManager.ShopType.Points] = 2,
}
function XUiShop:OnAwake()
self.TabBtnGroupSelectIndex = nil
self:InitAutoScript()
end
function XUiShop:OnStart(typeId, cb, configShopId)
if type(typeId) == "function" then
cb = typeId
typeId = nil
end
if typeId then
self.Type = typeId
else
self.Type = XShopManager.ShopType.Common
end
self.cb = cb
self.ConfigShopId = configShopId
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.ActionPoint, XDataCenter.ItemManager.ItemId.Coin)
self.AssetActivityPanel = XUiPanelActivityAsset.New(self.PanelActivityAsset,nil,self,true)
self.ItemList = XUiPanelItemList.New(self.PanelItemList, self)
self.FashionList = XUiPanelFashionList.New(self.PanelFashionList, self)
self.ShopPeriod = XUiPanelShopPeriod.New(self.PanelShopPeriod, self)
self.AssetActivityPanel:HidePanel()
self.ItemList:HidePanel()
self.FashionList:HidePanel()
self.ShopPeriod:HidePanel()
self.CallSerber = false
self.BtnGoList = {}
self.ShopTables = {}
self.tagCount = 1
self.shopGroup = {}
self.BtnFirst.gameObject:SetActiveEx(false)
self.BtnSecond.gameObject:SetActiveEx(false)
self.ScreenGroupIDList = {}
self.ScreenNum = 1
self.IsHasScreen = false
XShopManager.ClearBaseInfoData()
-- XShopManager.GetBaseInfo(function()
-- self:SetShopBtn(self.Type)
-- self:UpdateTog()
-- end)
self:SetTitleName(typeId)
end
function XUiShop:OnEnable()
XUiShop.Super.OnEnable(self)
XShopManager.GetBaseInfo(function()
self:SetShopBtn(self.Type)
self:UpdateTog()
end)
end
-- auto
-- Automatic generation of code, forbid to edit
function XUiShop:InitAutoScript()
self:AutoAddListener()
end
function XUiShop:GetAutoKey(uiNode, eventName)
if not uiNode then return end
return eventName .. uiNode:GetHashCode()
end
function XUiShop:AutoAddListener()
self.BtnBack.CallBack = function()
self:OnBtnBackClick()
end
self.BtnMainUi.CallBack = function()
self:OnBtnMainUiClick()
end
self.BtnScreenGroup.CallBack = function()
self:OnBtnScreenGroupClick()
end
self.BtnScreenWords.onValueChanged:AddListener(function()
self.SelectTag = self.BtnScreenWords.captionText.text
self:UpdateList(self.CurShopId, false)
end)
end
function XUiShop:OnBtnBackClick()
self:Close()
if self.cb then
self.cb()
end
self.AssetActivityPanel:HidePanel()
self.ItemList:HidePanel()
self.FashionList:HidePanel()
self.ShopPeriod:HidePanel()
end
function XUiShop:OnBtnMainUiClick()
XLuaUiManager.RunMain()
self.AssetActivityPanel:HidePanel()
self.ItemList:HidePanel()
self.FashionList:HidePanel()
self.ShopPeriod:HidePanel()
end
function XUiShop:OnBtnScreenGroupClick()
if self.ScreenGroupIDList and #self.ScreenGroupIDList > 0 then
self.ScreenNum = self.ScreenNum + 1
if self.ScreenNum > #self.ScreenGroupIDList then
self.ScreenNum = 1
end
end
self:UpdateDropdown()
end
function XUiShop:OnDestroy()
self.AssetActivityPanel:HidePanel()
self.ItemList:HidePanel()
self.FashionList:HidePanel()
self.ShopPeriod:HidePanel()
end
function XUiShop:SetShopBtn(shopType)
local btnList = {
self.BtnEcerdayShop,
self.BtnPointsShop,
self.BtnActivityShop
}
self.ShopBtnGroup:Init(btnList, function(index) self:OnSelectedShopBtn(index) end)
for index,bth in ipairs(btnList) do
self:CheckBtnState(ShopTypeDic[index],bth)
end
if shopType == XShopManager.ShopType.Common then
self.ShopBtnGroup.gameObject:SetActiveEx(true)
self.ShopBtnGroup:SelectIndex(ShopIndexDic[shopType])
elseif shopType == XShopManager.ShopType.Activity then
self.ShopBtnGroup.gameObject:SetActiveEx(true)
self.ShopBtnGroup:SelectIndex(ShopIndexDic[shopType])
elseif shopType == XShopManager.ShopType.Points then
self.ShopBtnGroup.gameObject:SetActiveEx(true)
self.ShopBtnGroup:SelectIndex(ShopIndexDic[shopType])
else
self.ShopBtnGroup.gameObject:SetActiveEx(false)
end
end
function XUiShop:CheckBtnState(shopType, btn)
local togActlist = self:GetShopBaseInfoByTypeAndTag(shopType)
if #togActlist <= 0 then
btn:SetButtonState(CS.UiButtonState.Disable)
end
end
function XUiShop:OnSelectedShopBtn(index)
local shopType = ShopTypeDic[index]
local functionOpenId = ShopFunctionOpenIdDic[shopType]
if not XFunctionManager.DetectionFunction(functionOpenId) then
return
end
if self.Type == shopType then
return
end
local togActlist = self:GetShopBaseInfoByTypeAndTag(shopType)
if #togActlist <= 0 then
XUiManager.TipText("ShopIsNotOpen")
self.ShopBtnGroup:SelectIndex(ShopIndexDic[self.Type])
return
end
self.Type = shopType
self:UpdateTog()
end
function XUiShop:UpdateTog()
local shopId = self.ConfigShopId
self.ConfigShopId = nil
local infoList = self:GetShopBaseInfoByTypeAndTag(self.Type)
local selectIndex = self.TabBtnGroupSelectIndex and self.TabBtnGroupSelectIndex[self.Type]
local SubGroupIndexMemo = 0
if #infoList == 0 then
self.Type = XShopManager.ShopType.Common
infoList = self:GetShopBaseInfoByTypeAndTag(self.Type)
end
for i = 1, #self.BtnGoList do
self.BtnGoList[i].gameObject:SetActiveEx(false)
end
for index, info in pairs(infoList) do
local btn = self.BtnGoList[self.tagCount]
if self.shopGroup[info.Type] then
if self.shopGroup[info.Type] [index] then
btn = self.BtnGoList[self.shopGroup[info.Type] [index]]
end
end
if not btn then
local name
local SubGroupIndex
if info.SecondType == 0 then
if info.IsHasSnd then
btn = CS.UnityEngine.Object.Instantiate(self.BtnFirstHasSnd)
else
btn = CS.UnityEngine.Object.Instantiate(self.BtnFirst)
end
SubGroupIndexMemo = self.tagCount
SubGroupIndex = 0
else
if info.SecondTagType == XShopManager.SecondTagType.Top then
btn = CS.UnityEngine.Object.Instantiate(self.BtnSecondTop)
elseif info.SecondTagType == XShopManager.SecondTagType.Mid then
btn = CS.UnityEngine.Object.Instantiate(self.BtnSecond)
elseif info.SecondTagType == XShopManager.SecondTagType.Btm then
btn = CS.UnityEngine.Object.Instantiate(self.BtnSecondBottom)
else
btn = CS.UnityEngine.Object.Instantiate(self.BtnSecondAll)
end
SubGroupIndex = SubGroupIndexMemo
end
name = info.Name
if btn then
if not self.shopGroup[info.Type] then
self.shopGroup[info.Type] = {}
end
table.insert(self.shopGroup[info.Type], self.tagCount)
self.tagCount = self.tagCount + 1
table.insert(self.ShopTables, info)
btn.transform:SetParent(self.TabBtnContent, false)
local uiButton = btn:GetComponent("XUiButton")
uiButton.SubGroupIndex = SubGroupIndex
uiButton:SetName(name)
table.insert(self.BtnGoList, uiButton)
btn.gameObject.name = info.Id
end
end
btn.gameObject:SetActiveEx(true)
if shopId and info.Id == shopId then
selectIndex = self.shopGroup[info.Type][index]
end
-- if not shopId then
-- selectIndex = self.shopGroup[info.Type][1]
-- end
end
if #infoList <= 0 then
return
end
selectIndex = selectIndex or self.shopGroup[self.Type][1]
self.TabBtnGroup:Init(self.BtnGoList, function(index) self:OnSelectedTog(index) end)
self.TabBtnGroup:SelectIndex(selectIndex)
end
function XUiShop:SetTitleName(typeId)
if typeId ~= XShopManager.ShopType.Common and typeId ~= XShopManager.ShopType.Activity and typeId ~= XShopManager.ShopType.Points then
self.BtnTitle.gameObject:SetActiveEx(true)
else
self.BtnTitle.gameObject:SetActiveEx(false)
end
self.BtnEcerdayShop:SetNameByGroup(0,XShopManager.GetShopTypeDataById(XShopManager.ShopType.Common).TypeName)
self.BtnActivityShop:SetNameByGroup(0,XShopManager.GetShopTypeDataById(XShopManager.ShopType.Activity).TypeName)
self.BtnPointsShop:SetNameByGroup(0,XShopManager.GetShopTypeDataById(XShopManager.ShopType.Points).TypeName)
self.BtnTitle:SetNameByGroup(0,XShopManager.GetShopTypeDataById(typeId).TypeName)
self.BtnEcerdayShop:SetNameByGroup(1,XShopManager.GetShopTypeDataById(XShopManager.ShopType.Common).Desc)
self.BtnActivityShop:SetNameByGroup(1,XShopManager.GetShopTypeDataById(XShopManager.ShopType.Activity).Desc)
self.BtnPointsShop:SetNameByGroup(1,XShopManager.GetShopTypeDataById(XShopManager.ShopType.Points).Desc)
self.BtnTitle:SetNameByGroup(1,XShopManager.GetShopTypeDataById(typeId).Desc)
end
function XUiShop:ShowShop(shopId)
XShopManager.GetShopInfo(shopId, function()
self:UpdateInfo(shopId)
end)
end
--显示商品信息
function XUiShop:OnSelectedTog(index)
self.TabBtnGroupSelectIndex = self.TabBtnGroupSelectIndex or {}
self.TabBtnGroupSelectIndex[self.Type] = index
local shopId = self.ShopTables[index].Id
self.CurShopId = shopId
self:ShowShop(shopId)
self:PlayAnimation("AnimQieHuan")
end
function XUiShop:GetCurShopId()
return self.CurShopId
end
--初始化列表
function XUiShop:UpdateInfo(shopId)
self.ShopPeriod:HidePanel()
self.ShopPeriod:ShowPanel(shopId)
self:InitScreen(shopId)
self:UpdateDropdown()
self:UpdateList(shopId,false)
end
function XUiShop:InitScreen(shopId)
self.ScreenGroupIDList = XShopManager.GetShopScreenGroupIDList(shopId)
if self.ScreenGroupIDList and #self.ScreenGroupIDList > 0 then
self.IsHasScreen = true
self.ScreenNum = 1
self.BtnScreenGroup.gameObject:SetActiveEx(#self.ScreenGroupIDList > 1)
else
self.IsHasScreen = false
end
self.PanelShaixuan.gameObject:SetActiveEx(self.IsHasScreen)
end
function XUiShop:UpdateDropdown()
if not self.IsHasScreen then
return
end
local icon = XShopManager.GetShopScreenGroupIconById(self.ScreenGroupIDList[self.ScreenNum])
if icon then
self.BtnScreenGroup:SetSprite(icon)
end
self.BtnScreenGroup:SetName(XShopManager.GetShopScreenGroupNameById(self.ScreenGroupIDList[self.ScreenNum]))
self.ScreenTagList = XShopManager.GetScreenTagListById(self.CurShopId,self.ScreenGroupIDList[self.ScreenNum])
self.BtnScreenWords:ClearOptions()
self.BtnScreenWords.captionText.text = CS.XTextManager.GetText("ScreenAll")
for _,v in pairs(self.ScreenTagList or {}) do
local op = Dropdown.OptionData()
op.text = v.Text
self.BtnScreenWords.options:Add(op)
end
self.BtnScreenWords.value = 0
self.SelectTag = self.BtnScreenWords.captionText.text
end
function XUiShop:UpdateList(shopId)
self.AssetActivityPanel:Refresh(XShopManager.GetShopShowIdList(shopId))
self.ItemList:ShowScreenPanel(shopId,self.ScreenGroupIDList[self.ScreenNum],self.SelectTag)
self.FashionList:ShowScreenPanel(shopId,self.ScreenGroupIDList[self.ScreenNum],self.SelectTag)
end
function XUiShop:UpdateBuy(data, cb)
XLuaUiManager.Open("UiShopItem",self,data, cb)
self:PlayAnimation("AnimTanChuang")
end
function XUiShop:RefreshBuy()
self.AssetActivityPanel:Refresh(XShopManager.GetShopShowIdList(self.CurShopId))
self.ShopPeriod:UpdateShopBuyInfo()
self:UpdateList(self.CurShopId)
end
function XUiShop:GetShopBaseInfoByTypeAndTag(shopType)
if shopType == XShopManager.ShopType.Common then
local shopList1 = XShopManager.GetShopBaseInfoByTypeAndTag(XShopManager.ShopType.Common)
local shopList2 = XShopManager.GetShopBaseInfoByTypeAndTag(XShopManager.ShopType.Boss)
local shopList3 = XShopManager.GetShopBaseInfoByTypeAndTag(XShopManager.ShopType.Arena)
return XTool.MergeArray(shopList1, shopList2, shopList3)
end
return XShopManager.GetShopBaseInfoByTypeAndTag(shopType)
end