PGRData/Script/matrix/xui/xuipurchase/XUiPurchaseBuyTips.lua

702 lines
28 KiB
Lua
Raw Normal View History

local TextManager = CS.XTextManager
local DropdownOptionData = CS.UnityEngine.UI.Dropdown.OptionData
local XUiPurchaseLBTipsListItem = require("XUi/XUiPurchase/XUiPurchaseLBTipsListItem")
local XUiPurchaseSignTip = require("XUi/XUiPurchase/XUiPurchaseSignTip/XUiPurchaseSignTip")
local XUiBatchPanel = require("XUi/XUiPurchase/XUiBatchPanel")
local RestTypeConfig
local LBGetTypeConfig
local Next = _G.next
local UpdateTimerTypeEnum = {
SettOff = 1,
SettOn = 2
}
local CurrentSchedule = nil
-- v1.28 采购优化-购买CD
local PurchaseBuyPayCD = CS.XGame.ClientConfig:GetInt("PurchaseBuyPayCD") / 1000
local XUiPurchaseBuyTips = XLuaUiManager.Register(XLuaUi, "UiPurchaseBuyTips")
function XUiPurchaseBuyTips:OnAwake()
self:Init()
end
-- 更新数据
function XUiPurchaseBuyTips:OnStart(data, checkBuyFun, updateCb, beforeBuyReqFun, uiTypeList)
if not data then
return
end
self.Data = data
self.CheckBuyFun = checkBuyFun
self.UpdateCb = updateCb
self.BeforeBuyReqFun = beforeBuyReqFun
self.UiTypeList = uiTypeList
CS.XAudioManager.PlaySound(1100)
RestTypeConfig = XPurchaseConfigs.RestTypeConfig
LBGetTypeConfig = XPurchaseConfigs.LBGetTypeConfig
self.CurState = false
self.TimerFun = {} -- 计时器方法表
self.TitleGoPool = {}
self.ItemPool = {}
self.PurchaseSignTipDic = {} -- 签到礼包的奖励预览脚本实例key:PrefabPathvalue:{ PurchaseSignTip, Resource }
self.OpenBuyTipsList = {}
-- 检查是否是签到礼包
if self:CheckSignLBAndOpen() then
return
else
self.PanelSignGiftPack.gameObject:SetActiveEx(false)
end
self.PanelCommon.gameObject:SetActiveEx(true)
self:AutoRegisterListener()
self.TxtName.text = data.Name
local path = XPurchaseConfigs.GetIconPathByIconName(data.Icon)
if path and path.AssetPath then
self.RawImageIcon:SetRawImage(path.AssetPath)
end
-- 下列方法存在公用变量,注意调用顺序
self:CheckLBIsUseMail()
-- self:SetList()
self:InitAndRegisterTimer()
self:InitAndCheckNormalDiscount()
self:CheckLBRewardIsHave()
self:CheckLBCouponDiscount()
self:InitAndCheckMultiply()
self:SetBuyDes()
self:StartTimer()
end
function XUiPurchaseBuyTips:OnEnable()
-- SetList 放在Enable中跳出充值界面返回显示的时候重新刷新奖励列表
self:SetList()
end
function XUiPurchaseBuyTips:Init()
self.AssetPanel = XUiPanelAsset.New(self,self.PanelAssetPay,XDataCenter.ItemManager.ItemId.FreeGem,XDataCenter.ItemManager.ItemId.HongKa)
end
function XUiPurchaseBuyTips:InitBatchPanel()
local batchPanelParam = {
MaxCount = self.MaxBuyCount,
MinCount = 1,
BtnAddCallBack = function() self:OnBtnAddClick() end,
BtnReduceCallBack = function() self:OnBtnReduceClick() end,
BtnAddLongCallBack = function() self:BtnAddLongClick() end,
BtnReduceLongCallBack = function() self:BtnReduceLongClick() end,
BtnMaxCallBack = function() self:OnBtnMaxClick() end,
SelectTextChangeCallBack = function(count) self:OnSelectTextChange(count) end,
SelectTextInputEndCallBack = function(count) self:OnSelectTextInputEnd(count) end,
}
self.BatchPanel = XUiBatchPanel.New(self, self.PanelBatch, batchPanelParam)
end
function XUiPurchaseBuyTips:OnCouponDropDownValueChanged(index)
if index == 0 then
self.CurDiscountCouponIndex = index
self:RefreshDiscount(index)
else
local discountInfo = self.CurData.DiscountCouponInfos[index]
local couponItemId = discountInfo.ItemId
local couponName = XDataCenter.ItemManager.GetItemName(couponItemId)
if XPurchaseConfigs.GetTagType(self.CurData.Tag) == XPurchaseConfigs.PurchaseTagType.Discount then -- 配置了打折需要进行比较
local normalDisCountValue = XDataCenter.PurchaseManager.GetLBDiscountValue(self.CurData)
local normalDiscountConsume = math.floor(normalDisCountValue * self.CurData.ConsumeCount)
local couponDisCountValue = XDataCenter.PurchaseManager.GetLBCouponDiscountValue(self.CurData, index)
local couponDisCountConsume = math.floor(couponDisCountValue * self.CurData.ConsumeCount)
if couponDisCountConsume >= normalDiscountConsume then -- 普通打折比选择的打折券便宜
self.BuyUiTips.DrdSort.value = self.CurDiscountCouponIndex and self.CurDiscountCouponIndex or 0
XUiManager.TipMsg(TextManager.GetText("NormalDiscountIsBetter")..couponName)
return
end
end
local needCount = discountInfo.ItemCount
local count = XDataCenter.ItemManager.GetCount(couponItemId)
if count < needCount then
self.BuyUiTips.DrdSort.value = self.CurDiscountCouponIndex and self.CurDiscountCouponIndex or 0
XUiManager.TipMsg(TextManager.GetText("CouponCountInsufficient", needCount))
return
end
self.CurDiscountCouponIndex = index
self:RefreshDiscount(index)
end
end
function XUiPurchaseBuyTips:RefreshDiscount(discountItemIndex) -- 打折券刷新显示
if discountItemIndex == 0 then
if XPurchaseConfigs.GetTagType(self.Data.Tag) == XPurchaseConfigs.PurchaseTagType.Discount and self.NormalDisCountValue < 1 then -- 打折的
self.RawImageConsume.gameObject:SetActiveEx(true)
self.BtnBuy:SetName(math.modf(self.Data.ConsumeCount * self.NormalDisCountValue))
local icon = XDataCenter.ItemManager.GetItemIcon(self.Data.ConsumeId)
if icon then
self.RawImageConsume:SetRawImage(icon)
end
self.TxtPrice.gameObject:SetActiveEx(true)
self.TxtPrice.text = self.Data.ConsumeCount
else
self.BtnBuy:SetName(self.Data.ConsumeCount)
self.TxtPrice.gameObject:SetActiveEx(false)
end
else
local couponDisCountValue = XDataCenter.PurchaseManager.GetLBCouponDiscountValue(self.Data, discountItemIndex)
self.RawImageConsume.gameObject:SetActiveEx(true)
self.BtnBuy:SetName(math.modf(self.Data.ConsumeCount * couponDisCountValue))
self.TxtPrice.gameObject:SetActiveEx(true)
self.TxtPrice.text = self.Data.ConsumeCount
end
end
-- 更新倒计时
function XUiPurchaseBuyTips:UpdateTimerFun()
self:UpdateCouponRemainTime()
self.RemainTime = self.RemainTime - 1
if self.RemainTime <= 0 then
self:RemoveTimerFun(self.Data.Id)
if self.UpdateTimerType == UpdateTimerTypeEnum.SettOff then
self.TXtTime.text = TextManager.GetText("PurchaseLBSettOff")
return
end
self.TXtTime.text = ""
return
end
if self.UpdateTimerType == UpdateTimerTypeEnum.SettOff then
self.TXtTime.text = TextManager.GetText("PurchaseSetOffTime",XUiHelper.GetTime(self.RemainTime, XUiHelper.TimeFormatType.PURCHASELB))
return
end
self.TXtTime.text = TextManager.GetText("PurchaseSetOnTime",XUiHelper.GetTime(self.RemainTime))
end
function XUiPurchaseBuyTips:UpdateCouponRemainTime() -- 打折券倒计时更新
if not self.IsHasCoupon then
return
end
local nowTime = XTime.GetServerNowTimestamp()
local remainTime = self.AllCouponMaxEndTime - nowTime
if remainTime > 0 then
self.TxtTimeCoupon.text = TextManager.GetText("CouponEndTime", XUiHelper.GetTime(remainTime, XUiHelper.TimeFormatType.SHOP))
else
self.DrdSort.value = 0
self.TxtTimeCoupon.text = ""
self.DrdSort.gameObject:SetActiveEx(false)
self.IsHasCoupon = false
end
end
function XUiPurchaseBuyTips:OnBtnAddClick()
self.CurrentBuyCount = self.CurrentBuyCount + 1
if self.MaxBuyCount and self.CurrentBuyCount > self.MaxBuyCount then
self.CurrentBuyCount = self.MaxBuyCount
end
self:RefreshBtnBuyPrice()
end
function XUiPurchaseBuyTips:OnBtnReduceClick()
self.CurrentBuyCount = self.CurrentBuyCount - 1
if self.CurrentBuyCount < 1 then self.CurrentBuyCount = 1 end
self:RefreshBtnBuyPrice()
end
function XUiPurchaseBuyTips:BtnAddLongClick()
self:OnBtnAddClick()
end
function XUiPurchaseBuyTips:BtnReduceLongClick()
self:OnBtnReduceClick()
end
function XUiPurchaseBuyTips:OnBtnMaxClick()
local consumeCount = self.Data.ConsumeCount
consumeCount = math.floor(self.NormalDisCountValue * consumeCount)
local canBuyCount = math.floor(XDataCenter.ItemManager.GetCount(self.Data.ConsumeId) / consumeCount)
if canBuyCount <= 0 then canBuyCount = 1 end -- 最小可购买数量为1
if not self.MaxBuyCount then
if canBuyCount < self.BatchPanel.MaxCount then
self.CurrentBuyCount = canBuyCount
else
self.CurrentBuyCount = self.BatchPanel.MaxCount
end
else
if canBuyCount < self.MaxBuyCount then
self.CurrentBuyCount = canBuyCount
else
self.CurrentBuyCount = self.MaxBuyCount
end
end
self:RefreshBtnBuyPrice()
end
function XUiPurchaseBuyTips:OnSelectTextChange(count)
self.CurrentBuyCount = count
self:RefreshBtnBuyPrice()
end
function XUiPurchaseBuyTips:OnSelectTextInputEnd(count)
self.CurrentBuyCount = count
self:RefreshBtnBuyPrice()
end
function XUiPurchaseBuyTips:CloseTips()
if (self.Data or {}).SignInId and self.Data.SignInId ~= 0 then
-- 签到礼包展示预览关闭
if (self.PurchaseSignTipDic[self.CurPrefabPath] or {}).PurchaseSignTip then
self.PurchaseSignTipDic[self.CurPrefabPath].PurchaseSignTip:OnClose()
self.CurPrefabPath = nil
end
else
for _,v in pairs(self.ItemPool) do
v.Transform:SetParent(self.PoolGo)
v.GameObject:SetActiveEx(false)
end
for _,v in pairs(self.TitleGoPool) do
v:SetParent(self.PoolGo)
v.gameObject:SetActiveEx(false)
end
if self.UpdateTimerType then
self:RemoveTimerFun(self.Data.Id)
end
end
self:Close()
end
function XUiPurchaseBuyTips:SetList()
-- 直接获得的道具
self.ListDirData = {}
self.ListDayData = {}
local rewards0 = self.Data.RewardGoodsList or {}
for _,v in pairs(rewards0) do
v.LBGetType = LBGetTypeConfig.Direct
table.insert(self.ListDirData,v)
end
-- 每日获得的道具
local rewards1 = self.Data.DailyRewardGoodsList or {}
for _,v in pairs(rewards1) do
v.LBGetType = LBGetTypeConfig.Day
table.insert(self.ListDayData,v)
end
local index1 = 1
local index2 = 1
if Next(self.ListDirData) ~= nil then
local obj = self:GetTitleGo(index1)
index1 = index1 + 1
obj.transform:Find("TxtTitle"):GetComponent("Text").text = TextManager.GetText("PurchaseDirGet")
for _,v in pairs(self.ListDirData)do
local item = self:GetItemObj(index2)
item:OnRefresh(v)
index2 = index2 + 1
end
end
if Next(self.ListDayData) ~= nil then
local obj = self:GetTitleGo(index1)
obj.transform:Find("TxtTitle"):GetComponent("Text").text = self.Data.Desc or ""
for _,v in pairs(self.ListDayData)do
local item = self:GetItemObj(index2)
item:OnRefresh(v)
index2 = index2 + 1
end
end
end
function XUiPurchaseBuyTips:GetTitleGo(index)
if self.TitleGoPool[index] then
self.TitleGoPool[index].gameObject:SetActiveEx(true)
self.TitleGoPool[index]:SetParent(self.PanelReward)
return self.TitleGoPool[index]
end
local obj = CS.UnityEngine.Object.Instantiate(self.ImgTitle,self.PanelReward)
obj.gameObject:SetActiveEx(true)
obj:SetParent(self.PanelReward)
table.insert(self.TitleGoPool, obj)
return obj
end
function XUiPurchaseBuyTips:GetItemObj(index)
if self.ItemPool[index] then
self.ItemPool[index].GameObject:SetActiveEx(true)
self.ItemPool[index].Transform:SetParent(self.PanelReward)
return self.ItemPool[index]
end
local itemObj = CS.UnityEngine.Object.Instantiate(self.PanelPropItem,self.PanelReward)
itemObj.gameObject:SetActiveEx(true)
itemObj:SetParent(self.PanelReward)
local item = XUiPurchaseLBTipsListItem.New(itemObj)
item:Init(self)
table.insert(self.ItemPool, item)
return item
end
function XUiPurchaseBuyTips:SetBuyDes()
if self.Data.BuyLimitTimes and self.Data.BuyLimitTimes ~= 0 then
local clientResetInfo = self.Data.ClientResetInfo or {}
if Next(clientResetInfo) == nil then --不限时
-- if self.Data.CanMultiply and self.MaxBuyCount and self.MaxBuyCount > 0 then
if true and self.MaxBuyCount and self.MaxBuyCount > 0 then
self.TxtLimitBuy.gameObject:SetActiveEx(true)
self.TxtLimitBuy.text = TextManager.GetText("PurchaseCanBuyText", self.MaxBuyCount)
else
self.TxtLimitBuy.gameObject:SetActiveEx(false)
end
else -- 限时刷新
local textKey = nil
if clientResetInfo.ResetType == RestTypeConfig.Interval then
self.TxtLimitBuy.gameObject:SetActiveEx(true)
self.TxtLimitBuy.text = TextManager.GetText("PurchaseRestTypeInterval",clientResetInfo.DayCount,self.Data.BuyTimes,self.Data.BuyLimitTimes)
return
elseif clientResetInfo.ResetType == RestTypeConfig.Day then
textKey = "PurchaseRestTypeDay"
elseif clientResetInfo.ResetType == RestTypeConfig.Week then
textKey = "PurchaseRestTypeWeek"
elseif clientResetInfo.ResetType == RestTypeConfig.Month then
textKey = "PurchaseRestTypeMonth"
end
if not textKey then
self.TxtLimitBuy.text = ""
self.TxtLimitBuy.gameObject:SetActiveEx(false)
return
end
self.TxtLimitBuy.gameObject:SetActiveEx(true)
self.TxtLimitBuy.text = TextManager.GetText(textKey,self.Data.BuyTimes,self.Data.BuyLimitTimes)
end
else
self.TxtLimitBuy.gameObject:SetActiveEx(false)
end
end
function XUiPurchaseBuyTips:RefreshBtnBuyPrice()
local consumeCount = self.Data.ConsumeCount
if self.Data.ConvertSwitch and self.Data.ConvertSwitch < consumeCount and self.Data.ConvertSwitch > 0 then
consumeCount = self.Data.ConvertSwitch
end
local disCountConsume = math.floor(self.NormalDisCountValue * consumeCount)
self.TxtPrice.text = consumeCount * self.CurrentBuyCount
self.BtnBuy:SetName(disCountConsume * self.CurrentBuyCount)
end
function XUiPurchaseBuyTips:OnDestroy()
self:DestroyTimer()
if not self.PurchaseSignTipDic or not next(self.PurchaseSignTipDic) then
return
end
for _, v in pairs(self.PurchaseSignTipDic) do
if v.Resource then
v.Resource:Release()
end
if v.PurchaseSignTip then
v.PurchaseSignTip:OnClose()
CS.UnityEngine.Object.Destroy(v.PurchaseSignTip.GameObject)
end
end
end
function XUiPurchaseBuyTips:RegisterTimerFun(id, fun)
if id and fun then
self.TimerFun[id] = fun
end
end
function XUiPurchaseBuyTips:RemoveTimerFun(id)
if self.TimerFun[id] then
self.TimerFun[id] = nil
end
end
function XUiPurchaseBuyTips:AutoRegisterListener()
self.BtnBuy.CallBack = function() self:OnBtnBuyClick() end
self.BtnBgClick.CallBack = function() self:CloseTips() end
self.BtnCloseBg.CallBack = function() self:CloseTips() end
self.DrdSort.onValueChanged:RemoveAllListeners()
self.DrdSort.onValueChanged:AddListener(function(index) self:OnCouponDropDownValueChanged(index) end)
end
function XUiPurchaseBuyTips:CheckSignLBAndOpen()
if self.Data.SignInId and self.Data.SignInId ~= 0 then
-- 签到礼包展示预览
self.PanelCommon.gameObject:SetActiveEx(false)
self.PanelSignGiftPack.gameObject:SetActiveEx(true)
self.BtnSignGiftPackBgClose.CallBack = function() self:CloseTips() end
self.BtnSignGiftPackClose.CallBack = function() self:CloseTips() end
for _, v in pairs(self.PurchaseSignTipDic) do
v.PurchaseSignTip.GameObject:SetActiveEx(false)
end
self.CurPrefabPath = XSignInConfigs.GetSignPrefabPath(self.Data.SignInId)
local purchaseSignTip = (self.PurchaseSignTipDic[self.CurPrefabPath] or {}).PurchaseSignTip
if not purchaseSignTip then
-- 生成对应prefab的实例
local resource = CS.XResourceManager.Load(self.CurPrefabPath)
local go = CS.UnityEngine.Object.Instantiate(resource.Asset)
go.transform:SetParent(self.SignGiftPackNode, false)
go.gameObject:SetLayerRecursively(self.SignGiftPackNode.gameObject.layer)
purchaseSignTip = XUiPurchaseSignTip.New(go, self)
local info = {}
info.PurchaseSignTip = purchaseSignTip
info.Resource = resource
self.PurchaseSignTipDic[self.CurPrefabPath] = info
end
purchaseSignTip:Refresh(self.Data, function() self:OnBtnBuyClick() end)
purchaseSignTip.GameObject:SetActiveEx(true)
return true
else
return false
end
end
function XUiPurchaseBuyTips:CheckLBIsUseMail()
local isUseMail = self.Data.IsUseMail or false
self.TxtContinue.gameObject:SetActiveEx(isUseMail)
end
function XUiPurchaseBuyTips:InitAndRegisterTimer()
self.RemainTime = 0
self.UpdateTimerType = nil
self.NowTime = XTime.GetServerNowTimestamp()
if self.Data.TimeToInvalid and self.Data.TimeToInvalid > 0 then
self.RemainTime = self.Data.TimeToInvalid - self.NowTime
self.UpdateTimerType = UpdateTimerTypeEnum.SettOff
if self.RemainTime > 0 then--大于0注册。
self.TXtTime.gameObject:SetActiveEx(true)
self:RegisterTimerFun(self.Data.Id, function() self:UpdateTimerFun() end)
self.TXtTime.text = TextManager.GetText("PurchaseSetOffTime",XUiHelper.GetTime(self.RemainTime, XUiHelper.TimeFormatType.PURCHASELB))
else
self.TXtTime.gameObject:SetActiveEx(false)
self:RemoveTimerFun(self.Data.Id)
end
else
if (self.Data.TimeToShelve == nil or self.Data.TimeToShelve == 0) and (self.Data.TimeToUnShelve == nil or self.Data.TimeToUnShelve == 0) then
self.TXtTime.gameObject:SetActiveEx(false)
else
self.TXtTime.gameObject:SetActiveEx(true)
if self.Data.TimeToUnShelve > 0 then
self.RemainTime = self.Data.TimeToUnShelve - self.NowTime
self.UpdateTimerType = UpdateTimerTypeEnum.SettOff
self.TXtTime.text = TextManager.GetText("PurchaseSetOffTime",XUiHelper.GetTime(self.RemainTime, XUiHelper.TimeFormatType.PURCHASELB))
else
self.RemainTime = self.Data.TimeToShelve-self.NowTime
self.UpdateTimerType = UpdateTimerTypeEnum.SettOn
self.TXtTime.text = TextManager.GetText("PurchaseSetOnTime",XUiHelper.GetTime(self.RemainTime))
end
if self.RemainTime > 0 then--大于0注册。
self:RegisterTimerFun(self.Data.Id, function() self:UpdateTimerFun() end)
else
self:RemoveTimerFun(self.Data.Id)
end
end
end
end
function XUiPurchaseBuyTips:InitAndCheckNormalDiscount()
self.NormalDisCountValue = XDataCenter.PurchaseManager.GetLBDiscountValue(self.Data)
self.IsDisCount = XPurchaseConfigs.GetTagType(self.Data.Tag) == XPurchaseConfigs.PurchaseTagType.Discount and self.NormalDisCountValue < 1
if self.Data.ConsumeCount == 0 then
self.TxtPrice.gameObject:SetActiveEx(false)
self.RawImageConsume.gameObject:SetActiveEx(false)
self.BtnBuy:SetName(TextManager.GetText("PurchaseFreeText"))
else
self.RawImageConsume.gameObject:SetActiveEx(true)
if self.IsDisCount then -- 打折的
self.BtnBuy:SetName(math.modf(self.Data.ConsumeCount * self.NormalDisCountValue))
self.TxtPrice.gameObject:SetActiveEx(true)
self.TxtPrice.text = self.Data.ConsumeCount
else
self.TxtPrice.gameObject:SetActiveEx(false)
self.BtnBuy:SetName(self.Data.ConsumeCount)
end
local icon = XDataCenter.ItemManager.GetItemIcon(self.Data.ConsumeId)
if icon then
self.RawImageConsume:SetRawImage(icon)
end
end
end
function XUiPurchaseBuyTips:CheckLBRewardIsHave()
if self.Data.ConvertSwitch and self.Data.ConvertSwitch < self.Data.ConsumeCount then -- 礼包存在已拥有物品折扣
local remainPrice = self.Data.ConvertSwitch
if remainPrice < 0 then remainPrice = 0 end
if remainPrice == 0 then -- 全部都拥有
self.TxtHave.gameObject:SetActiveEx(true)
self.TxtHave.text = TextManager.GetText("PurchaseLBHaveFashion")
self.BtnBuy:SetName(TextManager.GetText("PurchaseLBDontNeed"))
self.BtnBuy:SetDisable(true, true)
else -- 未拥有和拥有同时存在
self.TxtHave.gameObject:SetActiveEx(true)
self.TxtHave.text = TextManager.GetText("PurchaseLBHaveFashion")
self.BtnBuy:SetDisable(false)
if self.IsDisCount then
remainPrice = math.modf(remainPrice * self.NormalDisCountValue)
end
self.BtnBuy:SetName(remainPrice)
self.TxtPrice.gameObject:SetActiveEx(true)
self.TxtPrice.text = self.Data.ConsumeCount
end
else
-- 默认检测是否已拥有逻辑
local isHave, isLimitTime = XRewardManager.CheckRewardGoodsListIsOwn(self.Data.RewardGoodsList)
local isShowHave = isHave and not isLimitTime
local path = CS.XGame.ClientConfig:GetString("PurchaseBuyRiYuanIconPath")
self.TxtHave.gameObject:SetActiveEx(isShowHave)
if isShowHave then
if #self.Data.RewardGoodsList > 1 then
self.TxtHave.text = TextManager.GetText("PurchaseLBHaveFashion")
self.BtnBuy:SetDisable(not isShowHave)
-- 后面4个path都冲突过, 需要判断后续4个path是否为必要的
path = CS.XGame.ClientConfig:GetString("PurchaseBuyRiYuanIconPath")
else
self.TxtHave.text = TextManager.GetText("PurchaseLBHaveFashionCantBuy")
self.BtnBuy:SetDisable(isShowHave, not isShowHave)
path = CS.XGame.ClientConfig:GetString("PurchaseBuyRiYuanIconPath1")
end
else
self.BtnBuy:SetDisable(false)
if (self.Data.BuyLimitTimes > 0 and self.Data.BuyTimes == self.Data.BuyLimitTimes) or (self.Data.TimeToShelve > 0 and self.Data.TimeToShelve <= self.NowTime) or (self.Data.TimeToUnShelve > 0 and self.Data.TimeToUnShelve <= self.NowTime) then --卖完了,不管。
self.TXtTime.text = ""
if self.UpdateTimerType then
self:RemoveTimerFun(self.Data.Id)
end
self.TxtPrice.gameObject:SetActiveEx(false)
self.BtnBuy:SetButtonState(XUiButtonState.Disable)
path = CS.XGame.ClientConfig:GetString("PurchaseBuyRiYuanIconPath1")
else
self.BtnBuy:SetButtonState(XUiButtonState.Normal)
path = CS.XGame.ClientConfig:GetString("PurchaseBuyRiYuanIconPath")
end
end
-- 若上述path不需要, 则这段也不需要
if self.Data.PayKeySuffix then
self.RawImageConsume:SetRawImage(path)
end
end
end
function XUiPurchaseBuyTips:CheckLBCouponDiscount()
if self.Data.DiscountCouponInfos and #self.Data.DiscountCouponInfos > 0 then
self.CurDiscountCouponIndex = 0
self.DrdSort.gameObject:SetActiveEx(true)
self.DrdSort:ClearOptions()
local od = DropdownOptionData(TextManager.GetText("UnUsedCouponDiscount"))
self.DrdSort.options:Add(od)
self.DrdSort.captionText.text = TextManager.GetText("UnUsedCouponDiscount")
self.AllCouponMaxEndTime = 0
for _, optionData in ipairs(self.Data.DiscountCouponInfos) do
local itemId = optionData.ItemId
local itemName = XDataCenter.ItemManager.GetItemName(itemId)
local count = XDataCenter.ItemManager.GetCount(itemId)
local od = DropdownOptionData(itemName..TextManager.GetText("DiscountCouponRemain", count))
self.DrdSort.options:Add(od)
if optionData.EndTime > self.AllCouponMaxEndTime then
self.AllCouponMaxEndTime = optionData.EndTime
end
end
self.DrdSort.value = 0
self.TxtTimeCoupon.text = TextManager.GetText("CouponEndTime", XUiHelper.GetTime(self.AllCouponMaxEndTime - self.NowTime, XUiHelper.TimeFormatType.SHOP))
self.IsHasCoupon = true
else
self.DrdSort.gameObject:SetActiveEx(false)
self.IsHasCoupon = false
end
end
function XUiPurchaseBuyTips:InitAndCheckMultiply()
self.CurrentBuyCount = 1 -- 每次打开把购买数量重置为1
local isSellOut = self.Data.BuyLimitTimes and self.Data.BuyLimitTimes > 0 and self.Data.BuyTimes == self.Data.BuyLimitTimes
if not isSellOut and self.Data.CanMultiply then -- 批量购买开关
self.MaxBuyCount = XDataCenter.PurchaseManager.GetPurchaseMaxBuyCount(self.Data)
self:InitBatchPanel()
self.PanelBatch.gameObject:SetActiveEx(true)
self:RefreshBtnBuyPrice()
else
self.MaxBuyCount = nil
self.PanelBatch.gameObject:SetActiveEx(false)
end
end
function XUiPurchaseBuyTips:OnBtnBuyClick()
--v1.28-采购优化-礼包购买冷却
local now = CS.UnityEngine.Time.realtimeSinceStartup
if not self.LastBuyTime or (self.LastBuyTime and now - self.LastBuyTime > PurchaseBuyPayCD) then
self.LastBuyTime = now
if self.CheckBuyFun then -- 存在检测函数
if self.CheckBuyFun(self.CurrentBuyCount, self.CurDiscountCouponIndex) then
if self.BeforeBuyReqFun then -- 购买前执行函数
self.BeforeBuyReqFun(function() self:BuyPurchaseRequest() end)
return
end
self:BuyPurchaseRequest()
else
self:CloseTips()
end
else
self:BuyPurchaseRequest()
end
end
end
function XUiPurchaseBuyTips:BuyPurchaseRequest()
if self.Data and self.Data.Id then
if not self.CurrentBuyCount or self.CurrentBuyCount == 0 then
self.CurrentBuyCount = 1
end
local discountCouponId = nil
if self.CurDiscountCouponIndex and self.CurDiscountCouponIndex ~= 0 then
discountCouponId = self.CurData.DiscountCouponInfos[self.CurDiscountCouponIndex].Id
end
XDataCenter.PurchaseManager.PurchaseRequest(self.Data.Id, self.UpdateCb, self.CurrentBuyCount, discountCouponId, self.UiTypeList)
self:CloseTips()
end
end
function XUiPurchaseBuyTips:StartTimer()
if self.IsTimerStart then
return
end
if CurrentSchedule then
XScheduleManager.UnSchedule(CurrentSchedule)
CurrentSchedule = nil
end
CurrentSchedule = XScheduleManager.ScheduleForever(function() self:UpdateTimer() end, 1000)
self.IsTimerStart = true
end
function XUiPurchaseBuyTips:DestroyTimer()
if CurrentSchedule then
XScheduleManager.UnSchedule(CurrentSchedule)
CurrentSchedule = nil
self.IsTimerStart = false
end
end
function XUiPurchaseBuyTips:UpdateTimer()
if self.TimerFun and next(self.TimerFun) then
for _, fun in pairs(self.TimerFun) do
fun()
end
end
end