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

315 lines
13 KiB
Lua
Raw Normal View History

local XUiPurchaseLBListItem = XClass(nil, "XUiPurchaseLBListItem")
local TextManager = CS.XTextManager
local Next = _G.next
local UpdateTimerTypeEnum = {
SettOff = 1,
SettOn = 2
}
function XUiPurchaseLBListItem:Ctor(ui, uiRoot)
self.GameObject = ui.gameObject
self.Transform = ui.transform
self.UiRoot = uiRoot
XTool.InitUiObject(self)
self.TimerUpdateCb = function(isRecover, id) self:UpdateTimer(isRecover, id) end
self:SetHaveDataState(true)
end
-- 更新数据
function XUiPurchaseLBListItem:OnRefresh(itemData)
if not itemData or not next(itemData) then
self:SetHaveDataState(false)
return
end
self:SetHaveDataState(true)
self.ItemData = itemData
self:SetData()
end
function XUiPurchaseLBListItem:SetHaveDataState(bool)
if self.PanelHave then self.PanelHave.gameObject:SetActiveEx(bool) end
if self.PanelNone then self.PanelNone.gameObject:SetActiveEx(not bool) end
end
function XUiPurchaseLBListItem:Init(uiRoot, parent)
self.UiRoot = uiRoot
self.Parent = parent
end
function XUiPurchaseLBListItem:SetData()
if self.ItemData.Icon then
local iconPath = XPurchaseConfigs.GetIconPathByIconName(self.ItemData.Icon)
if iconPath and iconPath.AssetPath then
self.ImgIconLb:SetRawImage(iconPath.AssetPath, function() self.ImgIconLb:SetNativeSize() end)
end
end
self.TxtName.text = self.ItemData.Name
self.ImgSellout.gameObject:SetActive(false)
self.TxtUnShelveTime.gameObject:SetActive(false)
self:ActiveImgTimeBg(false)
self.Parent:RemoveTimerFun(self.ItemData.Id)
self.RemainTime = 0
local nowTime = XTime.GetServerNowTimestamp()
self.IsDisCount = false
local tag = self.ItemData.Tag
local isShowTag = false
if tag > 0 then
isShowTag = true
local path = XPurchaseConfigs.GetTagBgPath(tag)
if path then
self.UiRoot:SetUiSprite(self.ImgTagBg, path)
end
local tagText = XPurchaseConfigs.GetTagDes(tag)
if XPurchaseConfigs.GetTagType(tag) == XPurchaseConfigs.PurchaseTagType.Discount then
local disCountValue = XDataCenter.PurchaseManager.GetLBDiscountValue(self.ItemData)
if disCountValue < 1 then
local disCountStr = string.format("%.1f", disCountValue * 10)
if self.ItemData.DiscountShowStr and self.ItemData.DiscountShowStr ~= "" then
disCountStr = self.ItemData.DiscountShowStr
end
tagText = disCountStr..tagText
self.IsDisCount = true
else
isShowTag = false
end
end
self.TxtTagDes.text = tagText
-- path = XPurchaseConfigs.GetTagEffectPath(tag)
-- if path then
-- self.FxGo.AssetName = path
-- self.FxGo.Prefab = self.FxGo.gameObject:LoadPrefab(path)
-- self.FxGo.gameObject:SetActive(true)
--end
else
isShowTag = false
end
self.PanelLabel.gameObject:SetActive(isShowTag)
local consumeCount = self.ItemData.ConsumeCount or 0
self.RedPoint.gameObject:SetActive(false)
if consumeCount == 0 then -- 免费的
self.TxtHk.gameObject:SetActive(false)
self.TxtHk2.gameObject:SetActiveEx(false)
self.TxtFree.gameObject:SetActive(true)
local isShowRedPoint = (self.ItemData.BuyTimes == 0 or self.ItemData.BuyTimes < self.ItemData.BuyLimitTimes)
and (self.ItemData.TimeToShelve == 0 or self.ItemData.TimeToShelve < nowTime)
and (self.ItemData.TimeToUnShelve == 0 or self.ItemData.TimeToUnShelve > nowTime)
-- self.RedPoint.gameObject:SetActive(XDataCenter.PurchaseManager.LBRedPoint())
self.RedPoint.gameObject:SetActive(isShowRedPoint)
elseif self.IsDisCount or self.ItemData.ConvertSwitch < consumeCount then -- 打折或者存在拥有物品折扣的
self.TxtFree.gameObject:SetActive(false)
self.TxtHk.gameObject:SetActive(false)
local path = XDataCenter.ItemManager.GetItemIcon(self.ItemData.ConsumeId)
if path then
self.RawConsumeImage2:SetRawImage(path)
end
if self.ItemData.ConvertSwitch <= 0 then
self.TxtHk2.gameObject:SetActiveEx(false)
self.TextNotNeed.gameObject:SetActiveEx(true)
else
self.TxtHk2.gameObject:SetActiveEx(true)
self.TextNotNeed.gameObject:SetActiveEx(false)
local consumeNum = consumeCount
if self.ItemData.ConvertSwitch > 0 and self.ItemData.ConvertSwitch < consumeCount then
consumeNum = self.ItemData.ConvertSwitch
end
if self.IsDisCount then
local disCountValue = XDataCenter.PurchaseManager.GetLBDiscountValue(self.ItemData)
consumeNum = math.modf(disCountValue * consumeNum) or ""
end
self.TxtHk2.text = consumeNum
end
self.TxtPrice.text = self.ItemData.ConsumeCount or ""
else
self.TxtFree.gameObject:SetActive(false)
self.TxtHk2.gameObject:SetActiveEx(false)
self.TxtHk.gameObject:SetActive(true)
local path = XDataCenter.ItemManager.GetItemIcon(self.ItemData.ConsumeId)
if path then
self.RawConsumeImage:SetRawImage(path)
end
self.TxtHk.text = self.ItemData.ConsumeCount or ""
end
--是否已拥有
if self.ImgHave then
local isShowHave
if self.ItemData.RewardGoodsList and #self.ItemData.RewardGoodsList == 1 then
local isHave, isLimitTime = XRewardManager.CheckRewardGoodsListIsOwn(self.ItemData.RewardGoodsList)
isShowHave = isHave and not isLimitTime
else
isShowHave = false
end
self.ImgHave.gameObject:SetActive(isShowHave)
end
-- 上架时间
if self.ItemData.TimeToShelve > 0 and nowTime < self.ItemData.TimeToShelve then
self.RemainTime = self.ItemData.TimeToShelve - XTime.GetServerNowTimestamp()
if self.RemainTime > 0 then--大于0注册。
self.UpdateTimerType = UpdateTimerTypeEnum.SettOn
self.Parent:RegisterTimerFun(self.ItemData.Id, function() self:UpdateTimer() end)
else
self.Parent:RemoveTimerFun(self.ItemData.Id)
end
self.TxtPutawayTime.gameObject:SetActive(true)
self.TxtHk.gameObject:SetActive(false)
self.TxtFree.gameObject:SetActive(false)
self.TxtPutawayTime.text = TextManager.GetText("PurchaseSetOnTime", XUiHelper.GetTime(self.RemainTime))
self:SetBuyDes()
return
end
-- 达到限购次数
if self.ItemData.BuyLimitTimes and self.ItemData.BuyLimitTimes > 0 and self.ItemData.BuyTimes == self.ItemData.BuyLimitTimes then
self.TxtPutawayTime.gameObject:SetActive(false)
self.ImgSellout.gameObject:SetActive(true)
self.TxtSetOut.text = TextManager.GetText("PurchaseSettOut")
self.TxtFree.gameObject:SetActive(false)
self.TxtHk.gameObject:SetActive(false)
self:SetBuyDes()
return
end
self.TxtQuota.gameObject:SetActive(true)
self:SetBuyDes()
--有失效时间只显示失效时间。
-- 失效时间
self.TxtPutawayTime.gameObject:SetActive(false)
if self.ItemData.TimeToInvalid and self.ItemData.TimeToInvalid > 0 then
self.RemainTime = self.ItemData.TimeToInvalid - XTime.GetServerNowTimestamp()
if self.RemainTime > 0 then--大于0注册。
self.UpdateTimerType = UpdateTimerTypeEnum.SettOff
self.Parent:RegisterTimerFun(self.ItemData.Id, self.TimerUpdateCb)
self.TxtUnShelveTime.gameObject:SetActive(true)
self:ActiveImgTimeBg(true)
if self.IsDisCount then
self.TxtUnShelveTime.text = TextManager.GetText("PurchaseSetOffTime", XUiHelper.GetTime(self.RemainTime, XUiHelper.TimeFormatType.PURCHASELB))
else
self.TxtUnShelveTime.text = TextManager.GetText("PurchaseSetOffTime", XUiHelper.GetTime(self.RemainTime, XUiHelper.TimeFormatType.PURCHASELB))
end
else
self.Parent:RemoveTimerFun(self.ItemData.Id)
self.TxtUnShelveTime.gameObject:SetActive(false)
self:ActiveImgTimeBg(false)
self.ImgSellout.gameObject:SetActive(true)
self.TxtSetOut.text = TextManager.GetText("PurchaseLBSettOff")
end
return
end
-- 下架时间
if self.ItemData.TimeToUnShelve > 0 then
if nowTime < self.ItemData.TimeToUnShelve then
self.RemainTime = self.ItemData.TimeToUnShelve - XTime.GetServerNowTimestamp()
if self.RemainTime > 0 then--大于0注册。
self.UpdateTimerType = UpdateTimerTypeEnum.SettOff
self.Parent:RegisterTimerFun(self.ItemData.Id, self.TimerUpdateCb)
self.TxtUnShelveTime.gameObject:SetActive(true)
self:ActiveImgTimeBg(true)
if self.IsDisCount then
self.TxtUnShelveTime.text = TextManager.GetText("PurchaseSetOffTime", XUiHelper.GetTime(self.RemainTime, XUiHelper.TimeFormatType.PURCHASELB))
else
self.TxtUnShelveTime.text = TextManager.GetText("PurchaseSetOffTime", XUiHelper.GetTime(self.RemainTime, XUiHelper.TimeFormatType.PURCHASELB))
end
else
self.Parent:RemoveTimerFun(self.ItemData.Id)
self.TxtUnShelveTime.gameObject:SetActive(false)
self:ActiveImgTimeBg(false)
end
else
self.ImgSellout.gameObject:SetActive(true)
self.TxtUnShelveTime.text = ""
self:ActiveImgTimeBg(false)
self.TxtSetOut.text = TextManager.GetText("PurchaseLBSettOff")
end
else
self.TxtUnShelveTime.gameObject:SetActive(false)
self:ActiveImgTimeBg(false)
end
end
function XUiPurchaseLBListItem:SetBuyDes()
local clientResetInfo = self.ItemData.ClientResetInfo or {}
if Next(clientResetInfo) == nil then
if self.ItemData.BuyLimitTimes > 0 then
self.TxtQuota.text = TextManager.GetText("PurchaseLimitBuy", self.ItemData.BuyTimes, self.ItemData.BuyLimitTimes)
else
self.TxtQuota.text = ""
end
return
end
local textKey = ""
if clientResetInfo.ResetType == XPurchaseConfigs.RestTypeConfig.Interval then
self.TxtQuota.text = TextManager.GetText("PurchaseRestTypeInterval", clientResetInfo.DayCount, self.ItemData.BuyTimes, self.ItemData.BuyLimitTimes)
return
elseif clientResetInfo.ResetType == XPurchaseConfigs.RestTypeConfig.Day then
textKey = "PurchaseRestTypeDay"
elseif clientResetInfo.ResetType == XPurchaseConfigs.RestTypeConfig.Week then
textKey = "PurchaseRestTypeWeek"
elseif clientResetInfo.ResetType == XPurchaseConfigs.RestTypeConfig.Month then
textKey = "PurchaseRestTypeMonth"
end
self.TxtQuota.text = TextManager.GetText(textKey, self.ItemData.BuyTimes, self.ItemData.BuyLimitTimes)
end
-- 更新倒计时
function XUiPurchaseLBListItem:UpdateTimer(isRecover, id)
if self.ItemData.TimeToInvalid == 0 and self.ItemData.TimeToUnShelve == 0 and self.ItemData.TimeToShelve == 0 then
return
end
if self.ItemData.Id ~= id then
return
end
if isRecover then
if self.UpdateTimerType == UpdateTimerTypeEnum.SettOff then
if self.ItemData.TimeToInvalid > 0 then
self.RemainTime = self.ItemData.TimeToInvalid - XTime.GetServerNowTimestamp()
else
self.RemainTime = self.ItemData.TimeToUnShelve - XTime.GetServerNowTimestamp()
end
else
self.RemainTime = self.ItemData.TimeToShelve - XTime.GetServerNowTimestamp()
end
else
self.RemainTime = self.RemainTime - 1
end
if self.RemainTime <= 0 then
self.Parent:RemoveTimerFun(self.ItemData.Id)
if self.UpdateTimerType == UpdateTimerTypeEnum.SettOff then
self.ImgSellout.gameObject:SetActive(true)
self.TxtUnShelveTime.text = ""
self:ActiveImgTimeBg(false)
self.TxtSetOut.text = TextManager.GetText("PurchaseLBSettOff")
return
end
self.TxtPutawayTime.text = ""
return
end
if self.UpdateTimerType == UpdateTimerTypeEnum.SettOff then
self.TxtUnShelveTime.text = TextManager.GetText("PurchaseSetOffTime", XUiHelper.GetTime(self.RemainTime, XUiHelper.TimeFormatType.PURCHASELB))
self:ActiveImgTimeBg(true)
return
end
self.TxtPutawayTime.text = TextManager.GetText("PurchaseSetOnTime", XUiHelper.GetTime(self.RemainTime))
end
function XUiPurchaseLBListItem:ActiveImgTimeBg(value)
if XTool.UObjIsNil(self.ImgTimeBg) then
return
end
self.ImgTimeBg.gameObject:SetActiveEx(value)
end
return XUiPurchaseLBListItem