PGRData/Script/matrix/xui/xuiguardcamp/XUiChongzhiTanchuang.lua

443 lines
No EOL
16 KiB
Lua

local TextManager = CS.XTextManager
local DropdownOptionData = CS.UnityEngine.UI.Dropdown.OptionData
local RestTypeConfig
local LBGetTypeConfig
local Next = _G.next
local UpdateTimerTypeEnum = {
SettOff = 1,
SettOn = 2
}
local XUiChongzhiTanchuangListItem = require("XUi/XUiGuardCamp/XUiChongzhiTanchuangListItem")
local XUiChongzhiTanchuang = XLuaUiManager.Register(XLuaUi, "UiChongzhiTanchuang")
function XUiChongzhiTanchuang:OnStart(data, buyCb, dropDownCb)
RestTypeConfig = XPurchaseConfigs.RestTypeConfig
LBGetTypeConfig = XPurchaseConfigs.LBGetTypeConfig
self.CurState = false
self.TitleGoPool = {}
self.ItemPool = {}
self.OpenBuyTipsList = {}
self.BuyCb = buyCb
self.DropDownCb = dropDownCb
self.Data = data
self:AutoAddListener()
end
function XUiChongzhiTanchuang:OnEnable()
self:OnRefresh(self.Data)
end
function XUiChongzhiTanchuang:OnDisable()
self:StopUpdateTimer()
end
function XUiChongzhiTanchuang:AutoAddListener()
local closefun = function() self:Close() end
self:RegisterClickEvent(self.BtnBgClick, self.Close)
self:RegisterClickEvent(self.BtnCloseBg, self.Close)
self:RegisterClickEvent(self.BtnBuy, self.OnBtnBuy)
self.DrdSort.onValueChanged:RemoveAllListeners()
self.DrdSort.onValueChanged:AddListener(function(index)
if self.DropDownCb then
self.DropDownCb(index)
end
end)
end
function XUiChongzhiTanchuang:OnDestroy()
for _, v in pairs(self.ItemPool) do
v.Transform:SetParent(self.PoolGo)
v.GameObject:SetActive(false)
end
for _, v in pairs(self.TitleGoPool) do
v:SetParent(self.PoolGo)
v.gameObject:SetActive(false)
end
end
-- 更新数据
function XUiChongzhiTanchuang:OnRefresh(data)
if not data then
return
end
CS.XAudioManager.PlaySound(1100)
self.RetimeSec = 0
self.UpdateTimerType = nil
local curtime = XTime.GetServerNowTimestamp()
self.Data = data
-- 直接获得的道具
self.ListDirData = {}
self.ListDayData = {}
local rewards0 = data.RewardGoodsList or {}
for _, v in pairs(rewards0) do
v.LBGetType = LBGetTypeConfig.Direct
table.insert(self.ListDirData, v)
end
-- 每日获得的道具
local rewards1 = data.DailyRewardGoodsList or {}
for _, v in pairs(rewards1) do
v.LBGetType = LBGetTypeConfig.Day
table.insert(self.ListDayData, v)
end
local isUseMail = self.Data.IsUseMail or false
self.TxtContinue.gameObject:SetActive(isUseMail)
self:SetList()
if data.TimeToInvalid and data.TimeToInvalid > 0 then
self.RetimeSec = data.TimeToInvalid - curtime
self.UpdateTimerType = UpdateTimerTypeEnum.SettOff
if self.RetimeSec > 0 then
self.TXtTime.gameObject:SetActive(true)
self:StartUpdateTimer()
self.TXtTime.text = TextManager.GetText("PurchaseSetOffTime", XUiHelper.GetTime(self.RetimeSec))
else
self.TXtTime.gameObject:SetActive(false)
self:StopUpdateTimer()
end
else
if (data.TimeToShelve == nil or data.TimeToShelve == 0) and (data.TimeToUnShelve == nil or data.TimeToUnShelve == 0) then
self.TXtTime.gameObject:SetActive(false)
else
self.TXtTime.gameObject:SetActive(true)
if data.TimeToUnShelve > 0 then
self.RetimeSec = data.TimeToUnShelve - curtime
self.UpdateTimerType = UpdateTimerTypeEnum.SettOff
self.TXtTime.text = TextManager.GetText("PurchaseSetOffTime", XUiHelper.GetTime(self.RetimeSec))
else
self.RetimeSec = data.TimeToShelve - curtime
self.UpdateTimerType = UpdateTimerTypeEnum.SettOn
self.TXtTime.text = TextManager.GetText("PurchaseSetOnTime", XUiHelper.GetTime(self.RetimeSec))
end
if self.RetimeSec > 0 then
self:StartUpdateTimer()
else
self:StopUpdateTimer()
end
end
end
self.TxtName.text = data.Name
local assetpath = XPurchaseConfigs.GetIconPathByIconName(data.Icon)
if assetpath and assetpath.AssetPath then
self.RawImageIcon:SetRawImage(assetpath.AssetPath)
end
self:SetBuyDes()
local disCountValue = XDataCenter.PurchaseManager.GetLBDiscountValue(data)
if data.ConsumeCount == 0 then
self.TxtPrice.gameObject:SetActiveEx(false)
self.RawImageConsume.gameObject:SetActive(false)
self.BtnBuy:SetName(TextManager.GetText("PurchaseFreeText"))
elseif XPurchaseConfigs.GetTagType(data.Tag) == XPurchaseConfigs.PurchaseTagType.Discount and disCountValue < 1 then -- 打折的
self.RawImageConsume.gameObject:SetActive(true)
self.BtnBuy:SetName(math.modf(data.ConsumeCount * disCountValue))
local icon = XDataCenter.ItemManager.GetItemIcon(data.ConsumeId)
if icon then
self.RawImageConsume:SetRawImage(icon)
end
self.TxtPrice.gameObject:SetActiveEx(true)
self.TxtPrice.text = data.ConsumeCount
else
self.TxtPrice.gameObject:SetActiveEx(false)
self.RawImageConsume.gameObject:SetActive(true)
self.BtnBuy:SetName(data.ConsumeCount)
local icon = XDataCenter.ItemManager.GetItemIcon(data.ConsumeId)
if icon then
self.RawImageConsume:SetRawImage(icon)
end
end
--是否已拥有
local isHave, isLimitTime = XRewardManager.CheckRewardGoodsListIsOwn(data.RewardGoodsList)
local isShowHave = isHave and not isLimitTime
self.TxtHave.gameObject:SetActive(isShowHave)
if isShowHave then
if #data.RewardGoodsList > 1 then
self.TxtHave.text = TextManager.GetText("PurchaseLBHaveFashion")
self.BtnBuy:SetDisable(not isShowHave)
else
self.TxtHave.text = TextManager.GetText("PurchaseLBHaveFashionCantBuy")
self.BtnBuy:SetDisable(isShowHave, not isShowHave)
end
else
self.BtnBuy:SetDisable(false)
if (data.BuyLimitTimes > 0 and data.BuyTimes == data.BuyLimitTimes) or (data.TimeToShelve > 0 and data.TimeToShelve <= curtime) or (data.TimeToUnShelve > 0 and data.TimeToUnShelve <= curtime) then --卖完了,不管。
self.TXtTime.text = ""
if self.UpdateTimerType then
self:StopUpdateTimer()
end
self.TxtPrice.gameObject:SetActiveEx(false)
self.BtnBuy:SetButtonState(XUiButtonState.Disable)
else
self.BtnBuy:SetButtonState(XUiButtonState.Normal)
end
end
if data.DiscountCouponInfos and #data.DiscountCouponInfos > 0 then
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.AllCoupouMaxEndTime = 0
for _, optionData in ipairs(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.AllCoupouMaxEndTime then
self.AllCoupouMaxEndTime = optionData.EndTime
end
end
self.DrdSort.value = 0
local nowTime = XTime.GetServerNowTimestamp()
self.TxtTimeCoupon.text = TextManager.GetText("CouponEndTime", XUiHelper.GetTime(self.AllCoupouMaxEndTime - nowTime, XUiHelper.TimeFormatType.SHOP))
self.IsHasCoupon = true
else
self.DrdSort.gameObject:SetActiveEx(false)
self.IsHasCoupon = false
end
end
function XUiChongzhiTanchuang:StartUpdateTimer()
self:StopUpdateTimer()
self.Timer = XScheduleManager.ScheduleForever(function()
self:UpdateTimer()
end, XScheduleManager.SECOND, 0)
end
function XUiChongzhiTanchuang:StopUpdateTimer()
if self.Timer then
XScheduleManager.UnSchedule(self.Timer)
self.Timer = nil
end
end
-- 更新倒计时
function XUiChongzhiTanchuang:UpdateTimer()
self:UpdateCouponRemainTime()
self.RetimeSec = self.RetimeSec - 1
if self.RetimeSec <= 0 then
self:StopUpdateTimer(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.RetimeSec))
return
end
self.TXtTime.text = TextManager.GetText("PurchaseSetOnTime", XUiHelper.GetTime(self.RetimeSec))
end
function XUiChongzhiTanchuang:UpdateCouponRemainTime() -- 打折券倒计时更新
if not self.IsHasCoupon then
return
end
local nowTime = XTime.GetServerNowTimestamp()
local remainTime = self.AllCoupouMaxEndTime - 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 XUiChongzhiTanchuang:SetList()
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 XUiChongzhiTanchuang:GetTitleGo(index)
if self.TitleGoPool[index] then
self.TitleGoPool[index].gameObject:SetActive(true)
self.TitleGoPool[index]:SetParent(self.PanelReward)
return self.TitleGoPool[index]
end
local obj = CS.UnityEngine.Object.Instantiate(self.ImgTitle, self.PanelReward)
obj.gameObject:SetActive(true)
obj:SetParent(self.PanelReward)
table.insert(self.TitleGoPool, obj)
return obj
end
function XUiChongzhiTanchuang:GetItemObj(index)
if self.ItemPool[index] then
self.ItemPool[index].GameObject:SetActive(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:SetActive(true)
itemobj:SetParent(self.PanelReward)
local item = XUiChongzhiTanchuangListItem.New(itemobj)
item:Init(self)
table.insert(self.ItemPool, item)
return item
end
-- [监听动态列表事件]
-- function XUiChongzhiTanchuang:OnDynamicTableEvent(event, index, grid)
-- if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
-- grid:Init(self, self)
-- elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
-- local data = self.ListData[index]
-- grid:OnRefresh(data)
-- end
-- end
function XUiChongzhiTanchuang:SetBuyDes()
local clientResetInfo = self.Data.ClientResetInfo or {}
if Next(clientResetInfo) == nil then
self.TxtLimitBuy.gameObject:SetActiveEx(false)
self.TxtLimitBuy.text = ""
return
end
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
function XUiChongzhiTanchuang:OnBtnBuy()
if self.Data.BuyLimitTimes and self.Data.BuyTimes and self.Data.BuyLimitTimes > 0 and self.Data.BuyTimes == self.Data.BuyLimitTimes then --卖完了,不管。
XUiManager.TipText("PurchaseLiSellOut")
return
end
if self.Data.TimeToShelve and self.Data.TimeToShelve > 0 and self.Data.TimeToShelve > XTime.GetServerNowTimestamp() then --没有上架
XUiManager.TipText("PurchaseBuyNotSet")
return
end
if self.Data.TimeToUnShelve and self.Data.TimeToUnShelve > 0 and self.Data.TimeToUnShelve < XTime.GetServerNowTimestamp() then --下架了
XUiManager.TipText("PurchaseSettOff")
return
end
if self.Data.TimeToInvalid and self.Data.TimeToInvalid > 0 and self.Data.TimeToInvalid < XTime.GetServerNowTimestamp() then --失效了
XUiManager.TipText("PurchaseSettOff")
return
end
local consumeCount = self.Data.ConsumeCount
if consumeCount and self.Data.Tag and XPurchaseConfigs.GetTagType(self.Data.Tag) == XPurchaseConfigs.PurchaseTagType.Discount then -- 计算打折后的钱
local disCountValue = XDataCenter.PurchaseManager.GetLBDiscountValue(self.Data)
consumeCount = math.floor(disCountValue * consumeCount)
end
if consumeCount and self.Data.ConsumeId and consumeCount > 0 and consumeCount > XDataCenter.ItemManager.GetCount(self.Data.ConsumeId) then --钱不够
local name = XDataCenter.ItemManager.GetItemName(self.Data.ConsumeId) or ""
local tips = CS.XTextManager.GetText("PurchaseBuyKaCountTips", name)
XUiManager.TipMsg(tips,XUiManager.UiTipType.Wrong)
if self.Data.ConsumeId == XDataCenter.ItemManager.ItemId.PaidGem then
XLuaUiManager.Open("UiPurchase", XPurchaseConfigs.TabsConfig.HK, false)
elseif self.Data.ConsumeId == XDataCenter.ItemManager.ItemId.HongKa then
XLuaUiManager.Open("UiPurchase", XPurchaseConfigs.TabsConfig.Pay, false)
end
return
end
if self:CheckIsOpenBuyTips(self.Data.RewardGoodsList) then
return
end
self:PurchaseRequest()
end
function XUiChongzhiTanchuang:CheckIsOpenBuyTips(rewardGoodsList)
if not rewardGoodsList then return false end
for k, v in pairs(rewardGoodsList) do
if XRewardManager.CheckRewardOwn(v.RewardType, v.TemplateId) then
local tipContent = {}
tipContent["title"] = CSXTextManagerGetText("PurchaseFashionRepeatTipsTitle")
tipContent["content"] = CSXTextManagerGetText("PurchaseFashionRepeatTipsContent")
table.insert(self.OpenBuyTipsList, tipContent)
end
end
if #self.OpenBuyTipsList > 0 then
self:OpenBuyTips()
return true
end
return false
end
function XUiChongzhiTanchuang:OpenBuyTips()
if #self.OpenBuyTipsList > 0 then
local tipContent = table.remove(self.OpenBuyTipsList, 1)
local sureCallback = function ()
if #self.OpenBuyTipsList > 0 then
self:OpenBuyTips()
else
self:PurchaseRequest()
end
end
local closeCallback = function()
self.OpenBuyTipsList = {}
end
XUiManager.DialogTip(tipContent["title"], tipContent["content"], XUiManager.DialogType.Normal, closeCallback, sureCallback)
end
end
function XUiChongzhiTanchuang:PurchaseRequest()
if self.Data and self.Data.Id then
XDataCenter.PurchaseManager.PurchaseRequest(self.Data.Id, self.BuyCb)
self:Close()
end
end