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

782 lines
31 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 ShopView = {}
local this = ShopView
this.sortingOrder = 0
local isPlayShow = true
---===============================生命周期函数================================
function this:New(gameObject)
local o = {}
this.__index = this
setmetatable(o, this)
o.gameObject = gameObject
o.transform = gameObject.transform
return o
end
--初始化组件(用于子类重写)
function this: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.titleText = Util.GetGameObject(self.gameObject, "scrollbg/titlebg/title/titleText")
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(792, 922), 1, 3, Vector2.New(25, 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(40, 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
local RefreshShop = function(isPopUp,currentTime,isAutoRecover,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 = GetLanguageStrById(itemConfig[costId].Name)
local str = string.format(Language[12030], 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 .. shopType, currentTime)
end
ShopManager.RequestRefreshShop(shopType, false)
end, Language[10731], Language[10732],nil,true)
else
ShopManager.RequestRefreshShop(shopType, false)
end
end
--绑定事件(用于子类重写)
function this:BindEvent()
local localSelf = self
Util.AddOnceClick(self.refreshBtn, function()
isPlayShow = true
local isPopUp = RedPointManager.PlayerPrefsGetStr(PlayerManager.uid .. localSelf.ShopType)
local currentTime = os.date("%Y%m%d", PlayerManager.serverTime)
local shopType = localSelf.ShopType
local isAutoRecover = ShopManager.IsAutoRecoverCount(shopType)
local leftCount = ShopManager.GetShopLeftRefreshCount(shopType)
if leftCount == -2 then
PopupTipPanel.ShowTip(Language[11896])
elseif leftCount == 0 then
PopupTipPanel.ShowTip(Language[11897])
else
if shopType == SHOP_TYPE.SOUL_PRINT_SHOP then
local itemlist = ShopManager.CheckShopItemList(self.ShopData.storeItem)
local isShow = false
for k,v in pairs(itemlist) do
local goods = ShopManager.GetShopItemGoodsInfo(v.id)
local maxLimitCount = ShopManager.GetShopItemLimitBuyCount(v.id)
local con = ConfigManager.GetConfigData(ConfigName.ItemConfig,goods[1][1])
if con.Quantity >= 6 and v.buyNum < maxLimitCount then
isShow = true
end
end
if isShow then
MsgPanel.ShowTwo("当前商店存在红色魂印,刷新后将会消失,是否确认刷新?", function()
end, function()
RefreshShop(isPopUp,currentTime,isAutoRecover,shopType)
end, Language[10731], Language[10732],nil,false)
else
RefreshShop(isPopUp,currentTime,isAutoRecover,shopType)
end
else
RefreshShop(isPopUp,currentTime,isAutoRecover,shopType)
end
end
-- 重置商店刷新按钮点击状态
ShopManager.SetShopRefreshBtnClickStatus(localSelf.ShopType, true)
end)
--帮助按钮
Util.AddOnceClick(self.helpBtn, function()
if self.ShopConfig.HelpId==0 then
return
end
UIManager.OpenPanel(UIName.HelpPopup, self.ShopConfig.HelpId , self.helpPosition.x,self.helpPosition.y+372)--因层级锚点原因,需手动调整高度
end)
end
--添加事件监听(用于子类重写)
function this:AddListener()
Game.GlobalEvent:AddEvent(GameEvent.Shop.OnShopInfoChange, self.RefreshShopInfo, self)
end
--移除事件监听(用于子类重写)
function this:RemoveListener()
Game.GlobalEvent:RemoveEvent(GameEvent.Shop.OnShopInfoChange, self.RefreshShopInfo, self)
end
--界面打开时调用(用于子类重写)
function this:OnOpen(...)
end
--界面关闭时调用(用于子类重写)
function this:OnClose()
self.spLoader:Destroy()
if self._TimeCounter then
self._TimeCounter:Stop()
self._TimeCounter = nil
end
-- 物品节点回收
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.ShopType == SHOP_TYPE.GENERAL_SHOP then
ClearRedPointObject(RedPointType.Shop_General_Refresh)
elseif self.ShopType == SHOP_TYPE.SOUL_PRINT_SHOP then
ClearRedPointObject(RedPointType.Shop_Soul_Refresh)
elseif self.ShopType == SHOP_TYPE.GodPrint then
ClearRedPointObject(RedPointType.Shop_God_Refresh)
end
if self.ScrollView then
GameObject.DestroyImmediate(self.ScrollView.gameObject)
self.ScrollView = nil
end
if self.RechargeScrollView then
GameObject.DestroyImmediate(self.RechargeScrollView.gameObject)
self.RechargeScrollView = nil
end
if self.liveNode then
poolManager:UnLoadLive(self.LiveName, self.liveNode)
self.liveNode = nil
end
end
---=================================工具函数==========================================
-- 设置文本透明度
local function SetAlpha(text, a)
local color = text.color
color.a = a
text.color = color
end
---===================================内部函数========================================
-- 刷新商店内容显示
function this:RefreshShopInfo(isRefresh, isTop,isAni)
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(isRefresh,isTop,isAni)
-- 刷新商店的查看时间
ShopManager.RefreshShopCheckTime(self.ShopType)
if isRefresh then
-- 物品节点播放特效
if self._GoodsItemList then
Timer.New(function ()
PlaySoundWithoutClick("UI_refresh")
end,0.5):Start()
for _, item in pairs(self._GoodsItemList) do
item:OnShowUIeffectItemViewSaoguang()
end
end
end
end
-- 刷新立绘显示
function this: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 this:StartTimeCount()
local localSelf = self
local function _TimeUpdate()
-- 检测计时器是否已销毁,避免计时器销毁后仍然会执行一次,导致报错的问题
if not localSelf._TimeCounter then
return
end
-- 刷新时间
if localSelf.isShowRefreshTime then
local refreshTime = ShopManager.GetShopRefreshLeftTime(localSelf.ShopType)
if refreshTime >= 0 then
localSelf.refreshTime:GetComponent("Text").text = TimeToHMS(refreshTime)
elseif refreshTime < 0 and localSelf.ShopType == SHOP_TYPE.ARENA_SHOP then
JumpManager.GoJump(20003)
end
end
-- 关闭时间
if localSelf.isShowCloseTime then
local closeTime = ShopManager.GetShopCloseTime(localSelf.ShopType)
if closeTime >= 0 then
local timeStr = ""
-- if localSelf.ShopType == SHOP_TYPE.ACTIVITY_SHOP then
-- timeStr = TimeToDHMS(closeTime)
-- else
timeStr = TimeToHMS(closeTime)
-- end
localSelf.closeTime:GetComponent("Text").text = timeStr
end
end
-- 次数恢复时间
if localSelf.isShowCountTime then
local refreshTime = ShopManager.GetShopRefreshCountRecoverTime(localSelf.ShopType)
local maxTime = ShopManager.GetMaxRefreshCount(localSelf.ShopType)
local isAutoRecover, leftTime = ShopManager.IsAutoRecoverCount(localSelf.ShopType)
if refreshTime > 0 then
localSelf.countTime:GetComponent("Text").text = TimeToHMS(refreshTime)
elseif isAutoRecover and maxTime == leftTime and not localSelf.isMaxTime then
-- localSelf:RefreshBase()
localSelf.countTime:GetComponent("Text").text = Language[12031]
localSelf.countLabTip:GetComponent("Text").text = Language[12032]
localSelf.countLab:GetComponent("Text").text = leftTime
localSelf.isMaxTime = true
elseif isAutoRecover and maxTime ~= leftTime and refreshTime == 0 then
localSelf:RefreshBase()
localSelf.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 this: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 = Language[12033]
else
self.closeTimeLab:GetComponent("Text").text = Language[12034]
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 = Language[12032]
self.isMaxTime = false
else
self.costIcon:SetActive(true)
self.costLab:SetActive(true)
self.countLabTip:GetComponent("Text").text = Language[12035]
-- 刷新物品计算
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)
self.titleText:GetComponent("Text").text = self.ShopConfig.Name.."商店"
end
-- 对话显示
-- if self.ShopConfig.content then
-- self.contentBg:SetActive(true)
-- self.content:GetComponent("Text").text = self.ShopConfig.content
-- self.contentBg.transform.localPosition = Vector3(self.ShopConfig.contentPos[1], self.ShopConfig.contentPos[2], 0)
-- else
self.contentBg:SetActive(false)
-- end
end
-- 刷新物品列表
function this:RefreshItemList(isRefresh,isTop,isAni)
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)
-- if isPlayShow then
-- shopItem.gameObject:SetActive(false)
-- end
end, not isTop,not isAni)
-- if isPlayShow then
-- SecTorPlayAnimByScroll(self.RechargeScrollView,0.03)
-- isPlayShow = false
-- end
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)
if isPlayShow then
shopItem.gameObject:SetActive(true)
end
end, not isTop,not isAni)
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 this:ShopItemAdapter(shopItem, itemData)
-- 获取对象
local effect = Util.GetGameObject(shopItem, "Fx_SquareFlow")
effect.gameObject:SetActive(false)
Util.SetParticleSortLayer(effect, this.sortingOrder + 1)
local bg = Util.GetGameObject(shopItem, "GameObject/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(limitBg, "tip"):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 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
--itemInfo.GoodsName
-- 折扣
if price == 0 then
discountbg:SetActive(true)
discountbg:GetComponent("Image").sprite = self.spLoader:LoadSprite("s_shop_zhekou_00_zh")
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(Language[12036], unLockLevel)
end
end
lock:SetActive(not _IsUnLock)
priceBg.gameObject:SetActive(_IsUnLock)
itemName.gameObject:SetActive(_IsUnLock)
-- -- 限购
limitBg:SetActive(maxLimitCount ~= -1)
limitTip.text =Language[12037].." "..maxLimitCount
SetTextVerTial(limitTip,Vector3.New(12.65,-4.2,0),"MiddleLeft")
-- 售空 限购次数为-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,this.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)
SetAlpha(itemName, textA)
--SetAlpha(limitTip, textA)
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.SOUL_PRINT_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(Language[12038])
end)
Util.AddOnceClick(empty, function()
PopupTipPanel.ShowTip(Language[12039])
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(Language[12039])
return
end
if not _IsUnLock then
PopupTipPanel.ShowTip(Language[12038])
return
end
UIManager.OpenPanel(UIName.ShopBuyPopup, self.ShopType, itemData.id)
end)
end
-- 妖晶商店物品数据匹配
function this:RechargeShopItemAdapter(shopItem, itemData)
-- 获取对象
local first = Util.GetGameObject(shopItem, "first")
local firstNum = Util.GetGameObject(shopItem, "first/Text"):GetComponent("Text")
local xuChong = Util.GetGameObject(shopItem, "xuChong")
local xuNum = Util.GetGameObject(shopItem, "xuChong/Text"):GetComponent("Text")
local icon = Util.GetGameObject(shopItem, "icon"):GetComponent("Image")
local num = Util.GetGameObject(shopItem, "itemNum"):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.BaseReward[1][2]
price.text = MoneyUtil.GetMoneyUnitNameWithMoney(itemInfo.Price) --.. MoneyUtil.GetMoney(itemInfo.Price)
-- 判断首充赠送
local curBuyCount = itemData.buyTimes
first:SetActive(curBuyCount < 1)
firstNum.text = itemInfo.FirstMultiple[1][2]
if itemInfo.ContinuedMultiple and tonumber(itemInfo.ContinuedMultiple[1])~=nil then
xuChong:SetActive(curBuyCount>=1)
xuNum.text=itemInfo.ContinuedMultiple[2]
else
xuChong:SetActive(false)
end
-- 购买事件
Util.AddOnceClick(shopItem, function()
PayManager.Pay(itemData.goodsId, function(id)
self:RechargeSuccessFunc(itemData.goodsId)
end)
end)
end
-- 充值成功回调
function this:RechargeSuccessFunc(id)
FirstRechargeManager.RefreshAccumRechargeValue(id)
OperatingManager.RefreshGiftGoodsBuyTimes(GoodsTypeDef.DemonCrystal, id)
self:RefreshShopInfo(false, false,true)
--PopupTipPanel.ShowTip("购买成功,请到邮箱中领取!")
CheckRedPointStatus(RedPointType.GrowthPackage)--成长礼包红点检测
end
---=====================================对外接口=============================----
-- 设置要显示的商店类型
function this:ShowShop(shopType,_sortingOrder)
self.ScrollView:ForeachItemGO(function (index, go)
go.gameObject:SetActive(false)
end)
-- self.titleBg:GetComponent("Canvas").sortingOrder = _sortingOrder + 1
this.sortingOrder = _sortingOrder
-- 红点销毁
self.refreshRedpot:SetActive(false)
if self.ShopType == SHOP_TYPE.GENERAL_SHOP then
ClearRedPointObject(RedPointType.Shop_General_Refresh)
elseif self.ShopType == SHOP_TYPE.SOUL_PRINT_SHOP then
ClearRedPointObject(RedPointType.Shop_Soul_Refresh)
elseif self.ShopType == SHOP_TYPE.GodPrint then
ClearRedPointObject(RedPointType.Shop_God_Refresh)
end
-- 绑定新红点
if shopType == SHOP_TYPE.GENERAL_SHOP then
BindRedPointObject(RedPointType.Shop_General_Refresh, self.refreshRedpot)
elseif shopType == SHOP_TYPE.SOUL_PRINT_SHOP then
BindRedPointObject(RedPointType.Shop_Soul_Refresh, self.refreshRedpot)
elseif shopType == SHOP_TYPE.GodPrint then
BindRedPointObject(RedPointType.Shop_God_Refresh, self.refreshRedpot)
end
-- 刷新显示
self.ShopType = shopType
isPlayShow = true
self.ShopId = ShopManager.GetShopDataByType(self.ShopType).id
self.ShopConfig = _ShopTypeConfig[self.ShopId]
-- 显示帮助按钮
self.helpBtn:SetActive(self.ShopConfig.HelpId ~= 0)
self:RefreshShopInfo(false, true,true)
-- 设置tip显隐
local isSSSHop = self.ShopType == SHOP_TYPE.SOUL_STONE_SHOP
self.scrollBg1:SetActive(false)
self.scrollBg2:SetActive(false)
self.titleBg:SetActive(not isSSSHop)
self.bottom:SetActive(not isSSSHop)
self.scrollBg3:SetActive(false)
self.tip:SetActive(isSSSHop)
end
-- 设置立绘位置
function this:SetLivePosition(pos)
-- 计算位置
if not pos then
return
end
if not self.liveNode then
return
end
self.liveNode.transform.localPosition = pos
end
-- 设置商店物品栏位置
function this: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 this:SetBasePanelPostion(pos)
self.basePanel:GetComponent("RectTransform").anchoredPosition = pos
end
-- 设置层级
function this: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)--this.sortingOrder)
end
-- self.titleBg:GetComponent("Canvas").sortingOrder = sortLayer + 1
-- 保存层级
this.sortingOrder = sortLayer
end
return this