miduo_client/Assets/ManagedResources/~Lua/View/ShopViewNew.lua

729 lines
29 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

local _ShopTypeConfig = ConfigManager.GetConfig(ConfigName.StoreTypeConfig)
local GlobalActConfig = ConfigManager.GetConfig(ConfigName.GlobalActivity)
-- 通用得商店逻辑
local ShopViewNew = {}
local sortingOrder = 0
---===============================生命周期函数================================
function ShopViewNew:New(gameObject)
local b = {}
b.gameObject = gameObject
b.transform = gameObject.transform
setmetatable(b, { __index = ShopViewNew })
return b
end
--初始化组件(用于子类重写)
function ShopViewNew:InitComponent()
self.spLoader = SpriteLoader.New()
self.live = Util.GetGameObject(self.gameObject, "live")
self.liveRoot = Util.GetGameObject(self.gameObject, "live/root")
self.liveImg = Util.GetGameObject(self.gameObject, "live/img")
self.basePanel = Util.GetGameObject(self.gameObject, "base")
self.closeTimePanel = Util.GetGameObject(self.gameObject, "base/closeTime")
self.closeTimeLab = Util.GetGameObject(self.closeTimePanel, "timelab")
self.closeTime = Util.GetGameObject(self.closeTimePanel, "time")
self.refreshTimePanel = Util.GetGameObject(self.gameObject, "base/refreshTime")
self.refreshTimeLab = Util.GetGameObject(self.refreshTimePanel, "timelab")
self.refreshTime = Util.GetGameObject(self.refreshTimePanel, "time")
self.countTimePanel = Util.GetGameObject(self.gameObject, "base/countTime")
self.countTimeLab = Util.GetGameObject(self.countTimePanel, "timelab")
self.countTime = Util.GetGameObject(self.countTimePanel, "time")
self.refreshCountPanel = Util.GetGameObject(self.gameObject, "base/refreshCount")
self.countLabTip = Util.GetGameObject(self.refreshCountPanel, "GameObject/tip")
self.countLab = Util.GetGameObject(self.refreshCountPanel, "GameObject/count")
self.refreshBtnPanel = Util.GetGameObject(self.gameObject, "base/refreshBtn")
self.refreshBtn = Util.GetGameObject(self.refreshBtnPanel, "btn")
self.refreshRedpot = Util.GetGameObject(self.refreshBtnPanel, "redpot")
self.costIcon = Util.GetGameObject(self.refreshBtnPanel, "costIcon")
self.costLab = Util.GetGameObject(self.refreshBtnPanel, "costLab")
self.contentBg = Util.GetGameObject(self.gameObject, "duihua")
self.content = Util.GetGameObject(self.gameObject, "duihua/Text")
self.scrollBg = Util.GetGameObject(self.gameObject, "scrollbg")
self.scrollRoot = Util.GetGameObject(self.gameObject, "scrollbg/scrollroot")
self.scrollBg1 = Util.GetGameObject(self.gameObject, "scrollbg/bg1")
self.scrollBg2 = Util.GetGameObject(self.gameObject, "scrollbg/bg2")
self.scrollBg3 = Util.GetGameObject(self.gameObject, "scrollbg/bg3")
self.bottom = Util.GetGameObject(self.gameObject, "scrollbg/bottom")
self.tip = Util.GetGameObject(self.gameObject, "scrollbg/tip")
self.shopItem = Util.GetGameObject(self.gameObject, "scrollbg/scrollroot/shopItem")
self.rechargeShopItem = Util.GetGameObject(self.gameObject, "scrollbg/scrollroot/item")
self.titleBg = Util.GetGameObject(self.gameObject, "scrollbg/titlebg")
self.titleImg = Util.GetGameObject(self.gameObject, "scrollbg/titlebg/title")
self.helpBtn = Util.GetGameObject(self.gameObject, "scrollbg/titlebg/helpBtn")--scrollbg/titlebg/
self.helpPosition = self.helpBtn:GetComponent("RectTransform").localPosition
-- 创建循环列表
if not self.ScrollView then
self.ScrollView = SubUIManager.Open(SubUIConfig.ScrollCycleView, self.scrollRoot.transform,
self.shopItem, nil, Vector2.New(1000, 1024), 1, 3, Vector2.New(80, 0))
self.ScrollView.moveTween.MomentumAmount = 1
self.ScrollView.moveTween.Strength = 2
end
-- 创建循环列表
if not self.RechargeScrollView then
self.RechargeScrollView = SubUIManager.Open(SubUIConfig.ScrollCycleView, self.scrollRoot.transform,
self.rechargeShopItem, nil, Vector2.New(1000, 1024), 1, 3, Vector2.New(80, 0))
self.RechargeScrollView.moveTween.MomentumAmount = 1
self.RechargeScrollView.moveTween.Strength = 2
self.RechargeScrollView.gameObject.transform.localPosition = Vector3.New(0, -20, 0)
self.RechargeScrollView.elastic = false
end
end
--绑定事件(用于子类重写)
function ShopViewNew:BindEvent()
Util.AddOnceClick(self.refreshBtn, function()
PlaySoundWithoutClick("UI_refresh")
local isPopUp = RedPointManager.PlayerPrefsGetStr(PlayerManager.uid .. self.ShopType)
local currentTime = os.date("%Y%m%d", PlayerManager.serverTime)
local shopType = self.ShopType
local isAutoRecover = ShopManager.IsAutoRecoverCount(shopType)
if (isPopUp ~= currentTime) and not isAutoRecover then
local shopInfo = ShopManager.GetShopInfoByType(shopType)
local costId, abcd = shopInfo.RefreshItem[1][1], shopInfo.RefreshItem[2]
local refreshNum = PrivilegeManager.GetPrivilegeUsedTimes(shopInfo.RefreshPrivilege)
local costNum = CalculateCostCount(refreshNum, abcd)
local itemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig)
local costName = itemConfig[costId].Name
local str = string.format("是否花费%d%s刷新商店", costNum, costName)
MsgPanel.ShowTwo(str, function()
end, function(isShow)
if (isShow) then
local currentTime = os.date("%Y%m%d", PlayerManager.serverTime)
RedPointManager.PlayerPrefsSetStr(PlayerManager.uid .. self.ShopType, currentTime)
end
ShopManager.RequestRefreshShop(shopType, false)
end, "取消", "确定",nil,true)
else
ShopManager.RequestRefreshShop(self.ShopType, false)
end
-- 重置商店刷新按钮点击状态
ShopManager.SetShopRefreshBtnClickStatus(self.ShopType, true)
end)
--帮助按钮
Util.AddOnceClick(ShopViewNew.helpBtn, function()
if self.ShopConfig.HelpId==0 then
return
end
UIManager.OpenPanel(UIName.HelpPopup, self.ShopConfig.HelpId , ShopViewNew.helpPosition.x,ShopViewNew.helpPosition.y+372)--因层级锚点原因,需手动调整高度
end)
end
local RefreshData = function(self)
self:OnShow(sortingOrder)
end
--添加事件监听(用于子类重写)
function ShopViewNew:AddListener()
Game.GlobalEvent:AddEvent(GameEvent.Shop.OnShopInfoChange,RefreshData,self)
end
--移除事件监听(用于子类重写)
function ShopViewNew:RemoveListener()
Game.GlobalEvent:RemoveEvent(GameEvent.Shop.OnShopInfoChange,RefreshData,self)
end
function ShopViewNew:OnSortingOrderChange()
end
--界面打开时调用(用于子类重写)
function ShopViewNew:OnOpen(_activityConfig,_index,parent)
self.actConfig = _activityConfig
self.pageIndex = _index
self.parent = parent
end
function ShopViewNew:OnShow(_sortingOrder)
self.gameObject:SetActive(true)
sortingOrder = _sortingOrder
self.actId = self.actConfig.ActId
self.actType = self.actConfig.ActiveType > 0 and self.actConfig.ActiveType or self.actConfig.FunType
if self.actConfig.IfBack == 1 then
if self.actConfig.ActiveType > 0 then
local id = ActivityGiftManager.IsActivityTypeOpen(self.actConfig.ActiveType)
LogGreen("id:"..id)
if id and id > 0 then
self.actId = id
local actConfig
local actConfig = ConfigManager.TryGetConfigDataByThreeKey(ConfigName.ActivityGroups,"ActId",GlobalActConfig[id].ShowArt,"PageType",self.actConfig.PageType,"ActiveType",self.actConfig.ActiveType)
if not actConfig then
actConfig = ConfigManager.TryGetConfigDataByThreeKey(ConfigName.ActivityGroups,"ActId",id,"PageType",self.actConfig.PageType,"ActiveType",self.actConfig.ActiveType)
end
if actConfig then
self.actConfig = actConfig
end
end
end
end
self.ShopType = self.actConfig.ShopData[1][1]
LogYellow("self.ShopType:"..tostring(self.ShopType))
if self.ShopType == SHOP_TYPE.QIANKUNBOX_SHOP or self.ShopType == SHOP_TYPE.honglushangdian or self.ShopType == SHOP_TYPE.fangcunxunbao then
self.parent.tabbox.gameObject:SetActive(false)
else
self.parent.tabbox.gameObject:SetActive(true)
end
self:ShowShop()
end
-- 设置要显示的商店类型
function ShopViewNew:ShowShop()
self.ScrollView:ForeachItemGO(function (index, go)
go.gameObject:SetActive(false)
end)
-- 红点销毁
self.refreshRedpot:SetActive(false)
LogYellow("self.ShopType:"..tostring(self.ShopType))
self.ShopId = ShopManager.GetShopDataByType(self.ShopType).id
self.ShopConfig = _ShopTypeConfig[self.ShopId]
-- 显示帮助按钮
self.helpBtn:SetActive(self.ShopConfig.HelpId ~= 0)
self:RefreshShopInfo(false, true)
-- 设置tip显隐
local isSSSHop = self.ShopType == SHOP_TYPE.SOUL_STONE_SHOP
self.scrollBg1:SetActive(not isSSSHop)
self.scrollBg2:SetActive(not isSSSHop)
self.titleBg:SetActive(not isSSSHop)
self.bottom:SetActive(not isSSSHop)
self.scrollBg3:SetActive(isSSSHop)
self.tip:SetActive(isSSSHop)
end
-- 刷新商店内容显示
function ShopViewNew:RefreshShopInfo(isRefresh, isTop)
if self.ShopType == SHOP_TYPE.SOUL_STONE_SHOP then
self.RechargeShopData = OperatingManager.GetGiftGoodsInfoList(GoodsTypeDef.DemonCrystal)
else
self.ShopData = ShopManager.GetShopDataByType(self.ShopType)
end
self:RefreshLive()
self:RefreshBase()
self:RefreshItemList(isTop)
-- 刷新商店的查看时间
ShopManager.RefreshShopCheckTime(self.ShopType)
if isRefresh then
-- 物品节点播放特效
if self._GoodsItemList then
for _, item in pairs(self._GoodsItemList) do
item:OnShowUIeffectItemViewSaoguang()
end
end
end
end
-- 刷新立绘显示
function ShopViewNew:RefreshLive()
if not self.ShopConfig.LiveName or self.ShopConfig.LiveName == "" then
self.live:SetActive(false)
return
end
self.live:SetActive(true)
self.liveImg:SetActive(false)
self.liveRoot:SetActive(false)
-- 立绘
--TODO:动态加载立绘
self.liveRoot:SetActive(true)
if self.liveNode then
poolManager:UnLoadLive(self.LiveName, self.liveNode)
end
local scale = self.ShopConfig.LiveScale
scale = Vector3.New(scale[1], scale[2], scale[3])
local livePos = Vector3.zero
if self.ShopConfig.LivePos then
livePos.x = self.ShopConfig.LivePos[1]
livePos.y = self.ShopConfig.LivePos[2]
end
self.LiveName = self.ShopConfig.LiveName
self.liveNode = poolManager:LoadLive(self.ShopConfig.LiveName, self.liveRoot.transform, scale, livePos)
local SkeletonGraphic = self.liveNode:GetComponent("SkeletonGraphic")
local idle = function()
SkeletonGraphic.AnimationState:SetAnimation(0, "idle", true)
end
SkeletonGraphic.AnimationState:SetAnimation(0, "idle", true)
SkeletonGraphic.AnimationState.Complete = SkeletonGraphic.AnimationState.Complete + idle
poolManager:SetLiveClearCall(self.ShopConfig.LiveName, self.liveNode, function()
SkeletonGraphic.AnimationState.Complete = SkeletonGraphic.AnimationState.Complete - idle
end)
end
-- 刷新时间及刷新按钮
function ShopViewNew:RefreshBase()
-- 自动刷新时间倒计时
local leftTime = ShopManager.GetShopRefreshLeftTime(self.ShopType)
self.isShowRefreshTime = leftTime >= 0
self.refreshTimePanel:SetActive(self.isShowRefreshTime)
-- 商店关闭时间倒计时
local closeTime = ShopManager.GetShopCloseTime(self.ShopType)
self.isShowCloseTime = closeTime >= 0 and not self.isShowRefreshTime
self.closeTimePanel:SetActive(self.isShowCloseTime)
if self.isShowCloseTime then
if self.ShopType == SHOP_TYPE.ARENA_SHOP or self.ShopType == SHOP_TYPE.TOP_MATCH_SHOP then
self.closeTimeLab:GetComponent("Text").text = "距离刷新:"
else
self.closeTimeLab:GetComponent("Text").text = "距离商人离开:"
end
end
-- 次数恢复时间
local countTime = ShopManager.GetShopRefreshCountRecoverTime(self.ShopType)
self.isShowCountTime = countTime >= 0
self.countTimePanel:SetActive(self.isShowCountTime)
--开始倒计时
self:StartTimeCount()
-- 主动刷新按钮
local leftCount = ShopManager.GetShopLeftRefreshCount(self.ShopType)
if leftCount == -2 then
-- 不支持刷新
self.refreshCountPanel:SetActive(false)
self.refreshBtnPanel:SetActive(false)
else
self.refreshBtnPanel:SetActive(true)
if leftCount == -1 then
-- 无限制次数刷新
self.refreshCountPanel:SetActive(false)
elseif leftCount >= 0 then
-- 限制次数刷新
self.refreshCountPanel:SetActive(true)
self.countLab:GetComponent("Text").text = leftCount
end
local isAutoRecover = ShopManager.IsAutoRecoverCount(self.ShopType)
if isAutoRecover then
self.costIcon:SetActive(false)
self.costLab:SetActive(false)
self.countLabTip:GetComponent("Text").text = "(剩余免费刷新 次)"
self.isMaxTime = false
else
self.costIcon:SetActive(true)
self.costLab:SetActive(true)
self.countLabTip:GetComponent("Text").text = "(剩余可用刷新 次)"
-- 刷新物品计算
local shopInfo = ShopManager.GetShopInfoByType(self.ShopType)
local costId, abcd = shopInfo.RefreshItem[1][1], shopInfo.RefreshItem[2]
self.costIcon:GetComponent("Image").sprite = SetIcon(self.spLoader, costId)
-- 商店特权正确性检测
if not shopInfo.RefreshPrivilege or shopInfo.RefreshPrivilege == 0 then
Log("错误:商店类型 == " .. self.ShopType .. "商店支持手动刷新但是未配置刷新次数对应的特权id无限制次数也需要配置特权id请检查")
end
local refreshNum = PrivilegeManager.GetPrivilegeUsedTimes(shopInfo.RefreshPrivilege)
self.costLab:GetComponent("Text").text = "×" .. CalculateCostCount(refreshNum, abcd)
end
end
-- 商店标题
if self.ShopConfig.Title and self.ShopConfig.Title ~= "" then
self.titleImg:GetComponent("Image").sprite = self.spLoader:LoadSprite(self.ShopConfig.Title)
end
self.contentBg:SetActive(false)
end
-- 开始倒计时
function ShopViewNew:StartTimeCount()
local self = self
local function _TimeUpdate()
-- 检测计时器是否已销毁,避免计时器销毁后仍然会执行一次,导致报错的问题
if not self._TimeCounter then
return
end
-- 刷新时间
if self.isShowRefreshTime then
local refreshTime = ShopManager.GetShopRefreshLeftTime(self.ShopType)
if refreshTime >= 0 then
self.refreshTime:GetComponent("Text").text = TimeToHMS(refreshTime)
end
end
-- 关闭时间
if self.isShowCloseTime then
local closeTime = ShopManager.GetShopCloseTime(self.ShopType)
if closeTime >= 0 then
local timeStr = ""
-- if self.ShopType == SHOP_TYPE.ACTIVITY_SHOP then
-- timeStr = TimeToDHMS(closeTime)
-- else
timeStr = TimeToHMS(closeTime)
-- end
self.closeTime:GetComponent("Text").text = timeStr
end
end
-- 次数恢复时间
if self.isShowCountTime then
local refreshTime = ShopManager.GetShopRefreshCountRecoverTime(self.ShopType)
local maxTime = ShopManager.GetMaxRefreshCount(self.ShopType)
local isAutoRecover, leftTime = ShopManager.IsAutoRecoverCount(self.ShopType)
if refreshTime > 0 then
self.countTime:GetComponent("Text").text = TimeToHMS(refreshTime)
elseif isAutoRecover and maxTime == leftTime and not self.isMaxTime then
-- self:RefreshBase()
self.countTime:GetComponent("Text").text = "次数已满"
self.countLabTip:GetComponent("Text").text = "(剩余免费刷新 次)"
self.countLab:GetComponent("Text").text = leftTime
self.isMaxTime = true
elseif isAutoRecover and maxTime ~= leftTime and refreshTime == 0 then
self:RefreshBase()
self.isMaxTime = false
end
end
end
-- 开始吧
if not self._TimeCounter then
self._TimeCounter = Timer.New(_TimeUpdate, 1, -1, true)
self._TimeCounter:Start()
end
-- 刷新一次
_TimeUpdate()
end
-- 刷新物品列表
function ShopViewNew:RefreshItemList(isTop)
if self.ShopType == SHOP_TYPE.SOUL_STONE_SHOP then
self.ScrollView.gameObject:SetActive(false)
self.RechargeScrollView.gameObject:SetActive(true)
local itemlist = self.RechargeShopData
self.RechargeScrollView:SetData(itemlist, function(index, shopItem)
local itemData = itemlist[index]
self:RechargeShopItemAdapter(shopItem, itemData)
end, not isTop)
else
-- 重置列表
self.RechargeScrollView.gameObject:SetActive(false)
self.ScrollView.gameObject:SetActive(true)
local itemlist = ShopManager.CheckShopItemList(self.ShopData.storeItem)
self.ScrollView:SetData(itemlist, function(index, shopItem)
local itemData = itemlist[index]
self:ShopItemAdapter(shopItem, itemData)
end, not isTop)
local curindex = 0
for i = 1 ,#itemlist do
if self.ShopType == ShopManager.selectIndex.shopType then
for j = 1 , #ShopManager.selectIndex.storeId do
if itemlist[i].id == ShopManager.selectIndex.storeId[j] then
ShopManager.SetSelectIndex(0,{},1)
curindex = i
break
end
end
end
if curindex ~= 0 then
break
end
end
if curindex ~= 0 then
self.ScrollView:SetIndex(curindex)
end
end
end
-- 妖晶商店物品数据匹配
function ShopViewNew:RechargeShopItemAdapter(shopItem, itemData)
-- 获取对象
local first = Util.GetGameObject(shopItem, "first")
local firstNum = Util.GetGameObject(shopItem, "first/Text"):GetComponent("Text")
local icon = Util.GetGameObject(shopItem, "icon"):GetComponent("Image")
local num = Util.GetGameObject(shopItem, "itemName"):GetComponent("Text")
local price = Util.GetGameObject(shopItem, "price/Text"):GetComponent("Text")
-- 计算数据
local itemInfo = ShopManager.GetRechargeItemInfo(itemData.goodsId)
icon.sprite = self.spLoader:LoadSprite(GetResourcePath(itemInfo.Resources))
num.text = itemInfo.Name
price.text = MoneyUtil.GetMoneyMark() .. MoneyUtil.GetMoney(itemInfo.Price)
-- 判断首充赠送
local curBuyCount = itemData.buyTimes
first:SetActive(curBuyCount < 1)
firstNum.text = itemInfo.FirstMultiple[1][2]
-- 购买事件
Util.AddOnceClick(shopItem, function()
PayManager.Pay(itemData.goodsId, function(id)
self:RechargeSuccessFunc(itemData.goodsId)
end)
end)
end
-- 商店物品数据匹配
function ShopViewNew:ShopItemAdapter(shopItem, itemData)
-- 获取对象
local effect = Util.GetGameObject(shopItem, "Fx_SquareFlow")
effect.gameObject:SetActive(false)
Util.SetParticleSortLayer(effect, sortingOrder + 1)
-- 获取对象
local bg = Util.GetGameObject(shopItem, "bg")
local item = Util.GetGameObject(bg, "item")
local itemName = Util.GetGameObject(bg, "itemName"):GetComponent("Text")
local itemDes = Util.GetGameObject(bg, "itemDes"):GetComponent("Text")
local limitBg = Util.GetGameObject(bg, "buyLimitbg")
local limitTip = Util.GetGameObject(bg, "buyLimitbg/tip"):GetComponent("Text")
local limitTimes = Util.GetGameObject(bg, "buyLimitbg/buyLimit"):GetComponent("Text")
local priceBg = Util.GetGameObject(bg, "pricebg")
local itemPrice = Util.GetGameObject(bg, "pricebg/price"):GetComponent("Text")
local costIcon = Util.GetGameObject(bg, "pricebg/costIcon"):GetComponent("Image")
local discountbg = Util.GetGameObject(bg, "discountbg")
local empty = Util.GetGameObject(shopItem, "empty")
local yihuode = Util.GetGameObject(shopItem, "yihuode")
local lock = Util.GetGameObject(shopItem, "lock")
local lockTip = Util.GetGameObject(shopItem, "lock/tip"):GetComponent("Text")
local new = Util.GetGameObject(shopItem, "GameObject/new")
-- 计算数据
local itemInfo = ShopManager.GetShopItemInfo(itemData.id)
local curBuyCount = itemData.buyNum
local maxLimitCount = ShopManager.GetShopItemLimitBuyCount(itemData.id)
local costId, price = ShopManager.calculateBuyCost(self.ShopType, itemData.id, 1)
local goods = ShopManager.GetShopItemGoodsInfo(itemData.id)
local con = ConfigManager.GetConfigData(ConfigName.ItemConfig,goods[1][1])
itemName.text = SubString2(GetLanguageStrById(con.Name),8)
if con.ItemType == ItemType.LingShouChip then
local haveCount = BagManager.GetTotalItemNum(con.Id)
itemName.text = itemName.text.."\n"..string.format("<color=%s><size=%s>%s(%s/%s)</size></color>",UIColorStr.BLACK, "25", "拥有:", haveCount, con.UsePerCount)
end
-- 折扣
if price == 0 then
discountbg:SetActive(true)
discountbg:GetComponent("Image").sprite = self.spLoader:LoadSprite("s_shop_zhekou_00")
else
local isDiscount = itemInfo.IsDiscount == 1
discountbg:SetActive(isDiscount)
if isDiscount then
discountbg:GetComponent("Image").sprite = self.spLoader:LoadSprite("s_shop_zhekou_0" .. itemInfo.DiscountDegree.."_zh")
end
end
-- 消耗物品的信息
itemPrice.text = PrintWanNum2(tonumber(price))--tostring(price)
costIcon.sprite = SetIcon(self.spLoader, costId)
-- 判断商品栏位是否解锁
local _IsUnLock = true
if self.ShopType == SHOP_TYPE.GUILD_SHOP then
local isUnLock, unLockLevel = MyGuildManager.GetGuildShopSortIsUnLock(itemInfo.Sort)
if not isUnLock then
_IsUnLock = false
lockTip.text = string.format("公会%d级解锁", unLockLevel)
end
end
if con.ItemType == ItemType.Talisman then
itemDes.gameObject:SetActive(true)
if con.ItemDescribe then
local str=string.split(con.ItemDescribe,'')
if str[1] then
itemDes.text=str[1]
end
else
itemDes.gameObject:SetActive(false)
end
else
itemDes.gameObject:SetActive(false)
end
lock:SetActive(not _IsUnLock)
priceBg.gameObject:SetActive(_IsUnLock)
itemName.gameObject:SetActive(_IsUnLock)
-- 限购
limitBg:SetActive(maxLimitCount ~= -1)
limitTimes.text = maxLimitCount
limitTimes.gameObject:SetActive(maxLimitCount ~= -1)
-- 售空 限购次数为-1 表示不限购
local isEmpty = maxLimitCount ~= -1 and curBuyCount >= maxLimitCount
if curBuyCount >= maxLimitCount then
empty:SetActive(true)
else
empty:SetActive(false)
end
empty:SetActive(isEmpty)
-- 数据匹配
if not self._GoodsItemList then
self._GoodsItemList = {}
end
if not self._GoodsItemList[shopItem] then
self._GoodsItemList[shopItem] = SubUIManager.Open(SubUIConfig.ItemView, item.transform)
end
Util.SetGray(self._GoodsItemList[shopItem].gameObject, not _IsUnLock)
if isEmpty or not _IsUnLock then -- 物品空或者未解锁不现实物品特效
self._GoodsItemList[shopItem]:OnOpen(false, goods[1],1,false,false,false)
else
self._GoodsItemList[shopItem]:OnOpen(false, goods[1],1,false,false,false,sortingOrder)
end
-- 商品颜色显示
local imgColor = isEmpty and Color.New(0.5, 0.5, 0.5, 1) or Color.New(1, 1, 1, 1)
local textA = isEmpty and 0.7 or 1
Util.SetColor(bg, imgColor)
self:SetAlpha(itemName, textA)
self:SetAlpha(limitTip, textA)
self:SetAlpha(limitTimes, textA)
self:SetAlpha(itemPrice, textA)
local isshow = false
if self.ShopType == ShopManager.selectIndex2.shopType then
for j = 1 , #ShopManager.selectIndex2.storeId do
if itemData.id == ShopManager.selectIndex2.storeId[j] then
isshow = true
break
end
end
end
if isshow then
effect.gameObject:SetActive(true)
end
if self.ShopType == SHOP_TYPE.QIANKUNBOX_SHOP then
if SoulPrintManager.CheckSoulExist(con.Id) then
new.gameObject:SetActive(false)
else
new.gameObject:SetActive(true)
end
else
new.gameObject:SetActive(false)
end
yihuode.gameObject:SetActive(false)
if con.ItemType == ItemType.Incarnation and not isEmpty then
local num = BagManager.GetItemCountById(con.Id)
if num > 0 or IncarnationManager.GetStatusByItemId(con.Id) >= 0 then
yihuode.gameObject:SetActive(true)
Util.SetColor(bg, Color.New(0.5, 0.5, 0.5, 1))
end
end
-- 购买事件
Util.AddOnceClick(lock, function()
PopupTipPanel.ShowTip("商品未解锁")
end)
Util.AddOnceClick(empty, function()
PopupTipPanel.ShowTip("商品已售空")
end)
Util.AddOnceClick(bg, function()
-- if con.ItemType == ItemType.Incarnation then
-- local num = BagManager.GetItemCountById(con.Id)
-- if num > 0 or IncarnationManager.GetStatusByItemId(con.Id) >= 0 then
-- PopupTipPanel.ShowTip("无法选择已获取过的变身卡!")
-- return
-- end
-- end
-- 售空
if isEmpty then
PopupTipPanel.ShowTip("商品已售空")
return
end
if not _IsUnLock then
PopupTipPanel.ShowTip("商品未解锁")
return
end
UIManager.OpenPanel(UIName.ShopBuyPopup, self.ShopType, itemData.id)
end)
end
-- 充值成功回调
function ShopViewNew:RechargeSuccessFunc(id)
FirstRechargeManager.RefreshAccumRechargeValue(id)
OperatingManager.RefreshGiftGoodsBuyTimes(GoodsTypeDef.DemonCrystal, id)
self:RefreshShopInfo(false, false)
--PopupTipPanel.ShowTip("购买成功,请到邮箱中领取!")
PlayerPrefs.SetInt(PlayerManager.uid.."czlb", 0)
CheckRedPointStatus(RedPointType.GrowthPackage)--成长礼包红点检测
end
--界面关闭时调用(用于子类重写)
function ShopViewNew:OnClose()
if self._TimeCounter then
self._TimeCounter:Stop()
self._TimeCounter = nil
end
self.parent.tabbox.gameObject:SetActive(true)
self.gameObject:SetActive(false)
end
--界面销毁时调用(用于子类重写)
function ShopViewNew:OnDestroy()
self.spLoader:Destroy()
-- 物品节点回收
if self._GoodsItemList then
for _, item in pairs(self._GoodsItemList) do
Util.SetColor(item.gameObject, Color.New(1,1,1,1))
Util.SetGray(item.gameObject, false)
SubUIManager.Close(item)
end
self._GoodsItemList = {}
end
if self.ScrollView then
SubUIManager.Close(self.ScrollView)
self.ScrollView = nil
end
if self.RechargeScrollView then
SubUIManager.Close(self.RechargeScrollView)
self.RechargeScrollView = nil
end
if self.liveNode then
poolManager:UnLoadLive(self.LiveName, self.liveNode)
self.liveNode = nil
end
end
---=================================工具函数==========================================
-- 设置文本透明度
function ShopViewNew:SetAlpha(text, a)
local color = text.color
color.a = a
text.color = color
end
---=====================================对外接口=============================----
-- 设置立绘位置
function ShopViewNew:SetLivePosition(pos)
-- 计算位置
if not pos then
return
end
if not self.liveNode then
return
end
self.liveNode.transform.localPosition = pos
end
-- 设置商店物品栏位置
function ShopViewNew:SetItemContentPosition(pos)
-- 计算位置
if not pos then
return
end
self.scrollBg.gameObject:GetComponent("RectTransform").anchoredPosition = Vector2.New(pos.x, pos.y)
--self.scrollBg.transform.localPosition = pos
end
-- 设置基础信息位置
function ShopViewNew:SetBasePanelPostion(pos)
self.basePanel:GetComponent("RectTransform").anchoredPosition = pos
end
-- 设置层级
function ShopViewNew:SetSortLayer(sortLayer)
if not self._GoodsItemList then
self._GoodsItemList = {}
end
--
-- Log("sortLayer _GoodsItemList "..sortLayer.." "..LengthOfTable(self._GoodsItemList))
for _, item in pairs(self._GoodsItemList) do
item:SetEffectLayer(sortLayer)--ShopViewNew.sortingOrder)
end
-- self.titleBg:GetComponent("Canvas").sortingOrder = sortLayer + 1
-- 保存层级
sortingOrder = sortLayer
end
return ShopViewNew