miduo_client/Assets/ManagedResources/~Lua/Modules/Shop/ShopBuyPopup.lua

182 lines
7.4 KiB
Lua

require("Base/BasePanel")
local ShopBuyPopup = Inherit(BasePanel)
local this = ShopBuyPopup
local itemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig)
--初始化组件(用于子类重写)
function ShopBuyPopup:InitComponent()
this.itemBg = Util.GetGameObject(self.gameObject, "tipImage/item/bg"):GetComponent("Image")
this.itemIcon = Util.GetGameObject(self.gameObject, "tipImage/item/icon"):GetComponent("Image")
this.itemNum = Util.GetGameObject(self.gameObject, "tipImage/item/num"):GetComponent("Text")
this.itemCount = Util.GetGameObject(self.gameObject, "tipImage/item/count"):GetComponent("Text")
this.itemName = Util.GetGameObject(self.gameObject, "tipImage/item/name"):GetComponent("Text")
this.itemContent = Util.GetGameObject(self.gameObject, "tipImage/item/content"):GetComponent("Text")
this.costNum = Util.GetGameObject(self.gameObject, "tipImage/cost/ncost"):GetComponent("Text")
this.discostNum1 = Util.GetGameObject(self.gameObject, "tipImage/cost/discost1"):GetComponent("Text")
this.discostNum2 = Util.GetGameObject(self.gameObject, "tipImage/cost/discost2"):GetComponent("Text")
this.costIcon = Util.GetGameObject(self.gameObject, "tipImage/cost/icon"):GetComponent("Image")
this.slider = Util.GetGameObject(self.gameObject, "tipImage/Slider"):GetComponent("Slider")
this.leftBtn = Util.GetGameObject(this.slider.gameObject, "leftbtn")
this.rightBtn = Util.GetGameObject(this.slider.gameObject, "rightbtn")
this.buyNumLab = Util.GetGameObject(this.slider.gameObject, "count"):GetComponent("Text")
this.backBtn = Util.GetGameObject(self.gameObject, "tipImage/btnReturn")
this.cancelBtn = Util.GetGameObject(self.gameObject, "tipImage/op/btnLeft")
this.confirmBtn = Util.GetGameObject(self.gameObject, "tipImage/op/btnRight")
this.vipTip = Util.GetGameObject(self.gameObject, "tipImage/vipTips")
this.costTip = Util.GetGameObject(self.gameObject, "tipImage/costTips")
end
--绑定事件(用于子类重写)
function ShopBuyPopup:BindEvent()
Util.AddClick(this.backBtn, function()
self:ClosePanel()
end)
Util.AddClick(this.cancelBtn, function()
self:ClosePanel()
end)
Util.AddClick(this.confirmBtn, function()
local count = this.slider.value
local itemLimitNum = ShopManager.GetShopItemMaxBuy(this.shopType, this.shopItemId)
if itemLimitNum == 0 or itemLimitNum < count then
local costId = this.shopItemInfo.Cost[1][1]
NotEnoughPopup:Show(costId, function()
this:ClosePanel()
end)
return
end
ShopManager.RequestBuyShopItem(this.shopType, this.shopItemId, count, function()
self:ClosePanel()
end)
end)
Util.AddSlider(this.slider.gameObject, function(go, value)
this.OnSliderValueChange(value)
end)
Util.AddClick(this.leftBtn, function()
local curCount = this.slider.value
if curCount <= 1 then return end
this.slider.value = curCount - 1
end)
Util.AddClick(this.rightBtn, function()
if this.maxNum <= 0 then
PopupTipPanel.ShowTip(Language[11931])
return
end
local curCount = this.slider.value
if curCount >= 999 then
PopupTipPanel.ShowTip(Language[11697])
return
end
if curCount >= this.maxNum then return end
this.slider.value = curCount + 1
end)
end
--添加事件监听(用于子类重写)
function ShopBuyPopup:AddListener()
end
--移除事件监听(用于子类重写)
function ShopBuyPopup:RemoveListener()
end
--界面打开时调用(用于子类重写)
function ShopBuyPopup:OnOpen(shopType, shopItemId)
-- 获取数据
this.shopType = shopType
this.shopItemId = shopItemId
this.shopItemInfo = ShopManager.GetShopItemInfo(shopItemId)
LogGreen(shopItemId..":shopItemId")
this.shopItemData = ShopManager.GetShopItemData(shopType, shopItemId)
-- 商品基础信息显示
-- this.itemName.text = this.shopItemInfo.GoodsName
this.itemName.text = itemConfig[this.shopItemInfo.Goods[1][1]].Name
this.goods = ShopManager.GetShopItemGoodsInfo(this.shopItemId)
local goodsId = this.goods[1][1]
local itemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig)
this.itemContent.text = string.gsub(itemConfig[goodsId].ItemDescribe, "\\n", "\n")
this.itemIcon.sprite = SetIcon(goodsId)
if itemConfig[this.shopItemInfo.Goods[1][1]].ItemType == 2 then
this.itemBg.sprite = Util.LoadSprite(GetHeroChipQuantityImageByquality(itemConfig[this.shopItemInfo.Goods[1][1]].Quantity))
Util.GetGameObject(self.gameObject, "tipImage/item/proima"):SetActive(true)
Util.GetGameObject(self.gameObject, "tipImage/item/proima"):GetComponent("Image").sprite = Util.LoadSprite(GetJobSpriteStrByJobNum(itemConfig[this.shopItemInfo.Goods[1][1]].PropertyName))
else
this.itemBg.sprite = SetFrame(goodsId)
Util.GetGameObject(self.gameObject, "tipImage/item/proima"):SetActive(false)
end
this.itemNum.text = this.goods[1][2]
-- 计算最大可购买的数量
local countLimitNum = ShopManager.GetShopItemLimitBuyCount(shopItemId)
local countLeftNum = countLimitNum >= 0 and countLimitNum - this.shopItemData.buyNum or math.huge
this.itemCount.text = countLimitNum == -1 and "" or string.format(Language[11695], countLeftNum, countLimitNum)
-- 判断最大值
local itemLimitNum = ShopManager.GetShopItemMaxBuy(shopType, shopItemId)
this.maxNum = math.min(itemLimitNum, countLeftNum)
this.maxNum = this.maxNum > 999 and 999 or this.maxNum
-- 设置滑动范围
this.slider.enabled = this.maxNum > 1
this.slider.maxValue = this.maxNum
this.slider.minValue = 0
this.slider.value = this.maxNum > 0 and 1 or 0
-- 设置颜色
this.buyNumLab.color = this.maxNum > 0 and Color.New(0.55,0.59,0.62,1) or UIColor.NOT_ENOUGH_RED
Util.SetGray(this.confirmBtn, this.maxNum <= 0)
-- 刷新花费
this.RefreshCostShow()
-- 商店购买界面提示显示设置
this.vipTip:SetActive(this.shopItemInfo.RelatedtoVIP == 1)
local abcd = this.shopItemInfo.Cost[2]-- 公式常数
this.costTip:SetActive(this.shopItemInfo.PremiumType == 2 or abcd[1] > 0 or abcd[2] > 0 or abcd[3] > 0 )
end
--- 滑动条值改变回调
function this.OnSliderValueChange(value)
this.RefreshCostShow()
end
--- 根据slider值刷新显示
function this.RefreshCostShow()
-- 购买数量
this.buyNumLab.text = this.slider.value
-- 计算数据
local count = this.slider.value == 0 and 1 or this.slider.value
local costId, discostnum, costnum = ShopManager.calculateBuyCost(this.shopType, this.shopItemId, count)
-- 判断显示
local isDiscount = this.shopItemInfo.IsDiscount == 1
this.costNum.gameObject:SetActive(not isDiscount)
this.discostNum1.gameObject:SetActive(isDiscount)
this.discostNum2.gameObject:SetActive(isDiscount)
-- 原价
this.costNum.text = costnum
this.discostNum1.text = costnum
-- 折后价
this.discostNum2.text = discostnum
-- 物品icon
this.costIcon.sprite = SetIcon(costId)
-- 物品获取数量
this.itemNum.text = this.goods[1][2] * count
end
--界面关闭时调用(用于子类重写)
function ShopBuyPopup:OnClose()
end
--界面销毁时调用(用于子类重写)
function ShopBuyPopup:OnDestroy()
end
return ShopBuyPopup