782 lines
31 KiB
Lua
782 lines
31 KiB
Lua
|
||
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 |