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