miduo_client/Assets/ManagedResources/~Lua/Modules/Operating/WeekCardPanel.lua

447 lines
17 KiB
Lua
Raw Normal View History

2025-03-14 11:58:20 +08:00
require("Base/BasePanel")
2022-06-01 09:34:41 +08:00
local WeekCardPanel = Inherit(BasePanel)
local sortingOrder = 0
local _WeekcardConfig = ConfigManager.GetConfig(ConfigName.WeekcardConfig)
2024-09-06 10:38:56 +08:00
local weekReward = ConfigManager.GetConfig(ConfigName.WeekRewardConfig)
2022-06-01 09:34:41 +08:00
local _ItemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig)
local _RechargeCommodityConfig = ConfigManager.GetConfig(ConfigName.RechargeCommodityConfig)
2024-09-06 10:38:56 +08:00
local weekcardR = nil
2022-06-01 09:34:41 +08:00
--初始化组件(用于子类重写)
function WeekCardPanel:InitComponent()
self.spLoader = SpriteLoader.New()
self.grid = Util.GetGameObject(self.gameObject, "grid")
self.cardPres = {}
self.timerList = {}
2024-09-06 10:38:56 +08:00
self.tabs = {}
self.selectObj = Util.GetGameObject(self.gameObject, "selectObj")
self.selectTxt = Util.GetGameObject(self.gameObject, "selectObj/Text"):GetComponent("Text")
self.info1 = Util.GetGameObject(self.gameObject, "info1"):GetComponent("Text")
self.info2 = Util.GetGameObject(self.gameObject, "info2"):GetComponent("Text")
self.info1.text = Language[12023]
self.info2.text = Language[12024]
self.titleImg = Util.GetGameObject(self.gameObject, "titleImg"):GetComponent("Image")
self.timeTxt = Util.GetGameObject(self.gameObject, "time"):GetComponent("Text")
self.titleImg.sprite = self.spLoader:LoadSprite("new_biaotichendi")
for i = 1, self.grid.transform.childCount do
2022-06-01 09:34:41 +08:00
self.cardPres[i] = {}
self.cardPres[i].go = self.grid.transform:GetChild(i - 1).gameObject
2024-09-06 10:38:56 +08:00
self.cardPres[i].bg = self.cardPres[i].go:GetComponent("Image")
2022-06-01 09:34:41 +08:00
self.cardPres[i].name = Util.GetGameObject(self.cardPres[i].go, "nameBg/name"):GetComponent("Text")
self.cardPres[i].nameBg = Util.GetGameObject(self.cardPres[i].go, "nameBg"):GetComponent("Image")
self.cardPres[i].icon = Util.GetGameObject(self.cardPres[i].go, "icon"):GetComponent("Image")
self.cardPres[i].hint = Util.GetGameObject(self.cardPres[i].go, "hint"):GetComponent("Text")
self.cardPres[i].Text = Util.GetGameObject(self.cardPres[i].go, "Text"):GetComponent("Text")
2022-07-26 17:39:41 +08:00
self.cardPres[i].timeTxt = Util.GetGameObject(self.cardPres[i].go, "time"):GetComponent("Text")
2022-06-01 09:34:41 +08:00
-- self.cardPres[i].icon1 = Util.GetGameObject(self.cardPres[i].go, "tip1/icon"):GetComponent("Image")
-- self.cardPres[i].icon2 = Util.GetGameObject(self.cardPres[i].go, "tip2/icon"):GetComponent("Image")
-- self.cardPres[i].icon3 = Util.GetGameObject(self.cardPres[i].go, "Image/icon"):GetComponent("Image")
-- self.cardPres[i].dayNum = Util.GetGameObject(self.cardPres[i].go, "tip1/num"):GetComponent("Text")
-- self.cardPres[i].curNum = Util.GetGameObject(self.cardPres[i].go, "tip2/num"):GetComponent("Text")
-- self.cardPres[i].allNum = Util.GetGameObject(self.cardPres[i].go, "Image/Text"):GetComponent("Text")
self.cardPres[i].btn = Util.GetGameObject(self.cardPres[i].go, "btn")
self.cardPres[i].btnImg = Util.GetGameObject(self.cardPres[i].go, "btn"):GetComponent("Image")
self.cardPres[i].btnText = Util.GetGameObject(self.cardPres[i].go, "btn/Text"):GetComponent("Text")
self.cardPres[i].red = Util.GetGameObject(self.cardPres[i].go, "btn/redPoint")
self.cardPres[i].rewardGrid = Util.GetGameObject(self.cardPres[i].go, "grid")
2024-09-06 10:38:56 +08:00
self.cardPres[i].rewards = {}
for j = 1, self.cardPres[i].rewardGrid.transform.childCount do
table.insert(self.cardPres[i].rewards, self.cardPres[i].rewardGrid.transform:GetChild(j - 1).gameObject)
2022-06-01 09:34:41 +08:00
self.cardPres[i].rewardGrid.transform:GetChild(j - 1).gameObject:SetActive(false)
end
end
2024-09-06 10:38:56 +08:00
self.btnBack = Util.GetGameObject(self.gameObject, "btnClose")
2022-06-01 09:34:41 +08:00
self.helpBtn = Util.GetGameObject(self.gameObject, "helpBtn")
2024-09-06 10:38:56 +08:00
for i = 1, 5 do
table.insert(self.tabs, Util.GetGameObject(self.gameObject, "scrollrect/tabs/" .. i))
2022-06-01 09:34:41 +08:00
end
end
--绑定事件(用于子类重写)
function WeekCardPanel:BindEvent()
Util.AddClick(self.helpBtn, function()
local pos = self.helpBtn.transform.localPosition
UIManager.OpenPanel(UIName.HelpPopup, HELP_TYPE.WeekCard, pos.x, pos.y)
end)
Util.AddClick(self.btnBack, function()
self:ClosePanel()
end)
end
--添加事件监听(用于子类重写)
function WeekCardPanel:AddListener()
Game.GlobalEvent:AddEvent(GameEvent.WeekCard.OnWeekCardUpdate, self.RefreshShow, self)
end
--移除事件监听(用于子类重写)
function WeekCardPanel:RemoveListener()
Game.GlobalEvent:RemoveEvent(GameEvent.WeekCard.OnWeekCardUpdate, self.RefreshShow, self)
end
--界面打开时调用(用于子类重写)
function WeekCardPanel:OnOpen(args)
-- self.actConfig = _activityConfig
-- self.pageIndex = _index
-- self.parent = parent
2024-09-06 10:38:56 +08:00
activityId = args
2022-06-01 09:34:41 +08:00
end
function WeekCardPanel:OnSortingOrderChange()
end
-- 打开,重新打开时回调
2024-09-06 10:38:56 +08:00
local allcards = {}
local curKey = 0
local curIndex = 0
2022-06-01 09:34:41 +08:00
--local activityId=0
2024-09-06 10:38:56 +08:00
local endTime = 0
2022-06-01 09:34:41 +08:00
function WeekCardPanel:OnShow()
self.gameObject:SetActive(true)
sortingOrder = _sortingOrder
2022-07-26 17:39:41 +08:00
local serverOpenTime = PlayerManager.GetServerOpenTime()
2022-06-01 09:34:41 +08:00
-- 查看周卡界面刷新红点
2024-09-06 10:38:56 +08:00
PlayerPrefs.SetInt("IsCheckWeekCard_" .. PlayerManager.uid, 1)
2022-06-01 13:23:34 +08:00
CheckRedPointStatus(RedPointType.WeekCard)
2022-06-01 09:34:41 +08:00
local id = ActivityGiftManager.GetActivityTypeInfo(102)
2024-09-06 10:38:56 +08:00
endTime = id.endTime
self.timeTxt.text = Language[10022] ..
TimeStampToDateStr6(id.startTime) .. Language[12025] .. TimeStampToDateStr6(id.endTime)
weekcardR = ConfigManager.GetConfigDataByKey(ConfigName.WeekcardRotationConfig, "GlobalActivity", id.activityId)
2022-06-01 09:34:41 +08:00
--weekcardR=ConfigManager.GetConfigData(ConfigName.WeekcardRotationConfig,1)
2024-09-06 10:38:56 +08:00
local cardTypes = {}
for i = 1, #weekcardR.WeekcardType do
local id = weekcardR.WeekcardType[i][3]
local min = weekcardR.WeekcardType[i][1]
local max = weekcardR.WeekcardType[i][2]
local type = _WeekcardConfig[id].Type
local data = WeekCardManager.GetWeekCardData(id)
2022-06-01 09:34:41 +08:00
--已经购买
if data then
2024-09-06 10:38:56 +08:00
if allcards[type] == nil then
allcards[type] = {}
2022-06-01 09:34:41 +08:00
end
2024-09-06 10:38:56 +08:00
table.insert(allcards[type], _WeekcardConfig[id])
table.insert(cardTypes, _WeekcardConfig[id].WeekcardType)
2022-06-01 09:34:41 +08:00
else
2024-09-06 10:38:56 +08:00
if PlayerManager.level >= min and PlayerManager.level <= max and not cardTypes[_WeekcardConfig[id].WeekcardType] then
if allcards[type] == nil then
allcards[type] = {}
2022-06-01 09:34:41 +08:00
end
2024-09-06 10:38:56 +08:00
table.insert(allcards[type], _WeekcardConfig[id])
2022-06-01 09:34:41 +08:00
end
end
--table.insert(allcards,weekcardR.WeekcardType[i][3])
end
2024-09-06 10:38:56 +08:00
for i = 1, 5 do
self.tabs[i]:SetActive(false)
2022-06-01 09:34:41 +08:00
end
2024-09-06 10:38:56 +08:00
local i = 0
local firstKey = 0
2022-06-01 09:34:41 +08:00
for key, value in pairs(allcards) do
2024-09-06 10:38:56 +08:00
i = i + 1
2022-06-01 09:34:41 +08:00
self.tabs[i]:SetActive(true)
2024-09-06 10:38:56 +08:00
local name = Util.GetGameObject(self.tabs[i], "Text"):GetComponent("Text")
name.text = value[1].Desc
local red = Util.GetGameObject(self.tabs[i], "redpoint")
2022-06-01 09:34:41 +08:00
red:SetActive(false)
if firstKey == 0 then
firstKey = key
2024-09-06 10:38:56 +08:00
curIndex = i
2022-06-01 09:34:41 +08:00
end
2024-09-06 10:38:56 +08:00
local kk = key
2022-06-01 09:34:41 +08:00
Util.AddClick(self.tabs[i], function()
2024-09-06 10:38:56 +08:00
curKey = kk
curIndex = i
2022-06-01 09:34:41 +08:00
self:SetCardWind(curKey)
end)
2024-09-06 10:38:56 +08:00
LogError("key==" .. key .. " value==" .. value[1].Id .. " value2==" .. value[2].Id)
2022-06-01 09:34:41 +08:00
end
2022-06-01 13:23:34 +08:00
self:CheckTabRed()
2024-09-06 10:38:56 +08:00
if curKey == 0 then
curKey = firstKey
2022-06-01 09:34:41 +08:00
end
self:SetCardWind(firstKey)
end
2022-06-01 13:23:34 +08:00
function WeekCardPanel:CheckTabRed()
2024-09-06 10:38:56 +08:00
--检测页签红点
local num = 0
for key, value in pairs(allcards) do
num = num + 1
local isTrue = false
Util.GetGameObject(self.tabs[num], "redpoint"):SetActive(false)
for i = 1, #value do
isTrue = WeekCardManager.CheckTabRedReward(value[i].Id)
2022-06-01 13:23:34 +08:00
if isTrue then
2024-09-06 10:38:56 +08:00
Util.GetGameObject(self.tabs[num], "redpoint"):SetActive(isTrue)
2022-06-01 13:23:34 +08:00
end
2024-09-06 10:38:56 +08:00
end
end
2022-06-01 13:23:34 +08:00
end
2022-06-01 09:34:41 +08:00
-- 妖晶数量显示
function WeekCardPanel:RefreshShow()
-- local allData = WeekCardManager.GetWeekCardDataArray()
-- --月卡
-- for i = 1, #self.cardPres do
-- if allData[i] then
-- self:SetCardShow(i, allData[i])
-- end
-- end
2022-06-01 13:23:34 +08:00
self:CheckTabRed()
2022-06-01 09:34:41 +08:00
self:SetCardWind(curKey)
end
--设置周卡界面
function WeekCardPanel:SetCardWind(key)
2024-09-06 10:38:56 +08:00
curkey = key
2022-06-01 09:34:41 +08:00
if allcards[curkey] then
2024-09-06 10:38:56 +08:00
local aaa = 0
2022-06-01 09:34:41 +08:00
for k, value in pairs(allcards) do
2024-09-06 10:38:56 +08:00
aaa = aaa + 1
if k == curkey then
break
end
2022-06-01 09:34:41 +08:00
end
self.selectObj.transform:SetParent(self.tabs[aaa].transform)
self.selectObj.transform.localScale = Vector3.one
self.selectObj.transform.localPosition = Vector3.zero
self.selectTxt:GetComponent("Text").text = Util.GetGameObject(self.tabs[aaa], "Text"):GetComponent("Text").text
2024-09-06 10:38:56 +08:00
for i = 1, #allcards[curkey] do
self:ShowCardInfo(i, allcards[curkey][i])
end
2022-06-01 09:34:41 +08:00
end
end
--显示周卡信息
2024-09-06 10:38:56 +08:00
function WeekCardPanel:ShowCardInfo(index, config)
2022-06-01 09:34:41 +08:00
local pre = self.cardPres[index]
if not pre then
2024-09-06 10:38:56 +08:00
return
2022-06-01 09:34:41 +08:00
end
if not config then
2024-09-06 10:38:56 +08:00
return
2022-06-01 09:34:41 +08:00
end
-- 背景
2024-09-06 10:38:56 +08:00
2022-06-01 09:34:41 +08:00
-- 物品名称
2024-09-06 10:38:56 +08:00
if config.QualityType == 1 then
2024-09-19 18:08:27 +08:00
pre.name.text = GetLanguageStrById(config.Name) -- Language[10349]
2024-03-14 15:58:03 +08:00
pre.bg.sprite = self.spLoader:LoadSprite("r_shijie_xuanzetiao")
2024-09-06 10:38:56 +08:00
pre.btnImg.sprite = self.spLoader:LoadSprite("r_zhouka_btn_an")
pre.nameBg.sprite = self.spLoader:LoadSprite("r_zhouka_btn_bg2")
2022-06-01 09:34:41 +08:00
else
2024-09-19 18:08:27 +08:00
pre.name.text = GetLanguageStrById(config.Name) --Language[12026]
2024-03-14 15:58:03 +08:00
pre.bg.sprite = self.spLoader:LoadSprite("r_shijie_xuanzetiao")
2024-09-06 10:38:56 +08:00
pre.btnImg.sprite = self.spLoader:LoadSprite("r_zhouka_btn_liang")
pre.nameBg.sprite = self.spLoader:LoadSprite("r_zhouka_btn_bg1")
2022-06-01 09:34:41 +08:00
end
2024-09-06 10:38:56 +08:00
2022-06-01 09:34:41 +08:00
-- 每日奖励数量
local itemId = 0
local dayNum = 0
2024-09-06 10:38:56 +08:00
-- pre.rewards
-- weekReward
local allNum = 0
local name = ""
local icon = ""
local oneNum = 0
for i = 1, #config.BaseRewardID do
2022-06-01 09:34:41 +08:00
if pre.rewards[i] then
pre.rewards[i]:SetActive(true)
2024-09-06 10:38:56 +08:00
local dayTxt = Util.GetGameObject(pre.rewards[i], "day"):GetComponent("Text")
dayTxt.text = Language[10286] .. NumToChinese[config.BaseRewardID[i][1]] .. Language[10017]
local rewardId = config.BaseRewardID[i][2]
if weekReward[rewardId] then
local id = weekReward[rewardId].BaseReward[1]
local num = weekReward[rewardId].BaseReward[2]
name = _ItemConfig[id].Name
oneNum = num
icon = GetResourcePath(_ItemConfig[id].ResourceID)
itemId = id
pre.rewards[i]:GetComponent("Image").sprite = self.spLoader:LoadSprite(GetQuantityImageByquality(
_ItemConfig[id].Quantity))
local icon1 = Util.GetGameObject(pre.rewards[i], "Image"):GetComponent("Image")
icon1.sprite = self.spLoader:LoadSprite(icon)
local stateTxt = Util.GetGameObject(pre.rewards[i], "Text"):GetComponent("Text")
local numTxt = Util.GetGameObject(pre.rewards[i], "num"):GetComponent("Text")
if num > 10000 then
numTxt.text = PrintWanNum2(num)
2022-06-01 09:34:41 +08:00
else
2024-09-06 10:38:56 +08:00
numTxt.text = num
2022-06-01 09:34:41 +08:00
end
2024-09-06 10:38:56 +08:00
allNum = allNum + num
2022-06-01 09:34:41 +08:00
end
2024-09-06 10:38:56 +08:00
-- pre.rewards[i]:GetComponent("Image").sprite=self.spLoader:LoadSprite(config.TypeImage)
2022-06-01 09:34:41 +08:00
end
end
2024-09-06 10:38:56 +08:00
2022-06-01 09:34:41 +08:00
pre.icon.sprite = self.spLoader:LoadSprite(icon)
2024-09-06 10:38:56 +08:00
Util.AddClick(pre.icon.gameObject, function()
UIManager.OpenPanel(UIName.RewardItemSingleShowPopup, itemId, nil)
end)
2024-09-19 18:08:27 +08:00
pre.Text.text = GetLanguageStrById(name) .. "*" .. PrintWanNum2(oneNum)
local str = GetLanguageStrById(name) .. "*" .. PrintWanNum2(allNum)
2024-09-06 10:38:56 +08:00
pre.hint.text = Language[12027] .. "<color=#D46000>" .. str .. "</color>"
2022-06-01 09:34:41 +08:00
local rechargeCfg = _RechargeCommodityConfig[config.RechargeId]
if not rechargeCfg then
2024-09-06 10:38:56 +08:00
return
2022-06-01 09:34:41 +08:00
end
2024-09-06 10:38:56 +08:00
local data = WeekCardManager.GetWeekCardData(config.Id)
2022-06-01 09:34:41 +08:00
-- 按钮状态
if data then
2024-09-06 10:38:56 +08:00
local getNum = 0
for i = 1, #data.leaveGetRewardDays do
if data.leaveGetRewardDays[i].state == 1 then
getNum = getNum + 1
2022-06-01 09:34:41 +08:00
end
end
2022-07-26 17:39:41 +08:00
local residueTimeNum = endTime - GetTimeStamp()
local dayNum = math.floor(residueTimeNum / (24 * 3600))
2024-09-06 10:38:56 +08:00
pre.timeTxt.text = Language[10049] .. dayNum .. Language[12028]
if dayNum == 0 then
2022-07-27 10:15:40 +08:00
pre.timeTxt.gameObject:SetActive(false)
else
pre.timeTxt.gameObject:SetActive(true)
end
2022-06-01 09:34:41 +08:00
if getNum > 0 then
-- 领取奖励
2024-08-29 21:36:51 +08:00
pre.btnText.text = Language[10018]
2022-06-01 09:34:41 +08:00
pre.red:SetActive(true)
Util.SetGray(pre.btn, false)
Util.AddOnceClick(pre.btn, function()
local id = ActivityGiftManager.GetActivityTypeInfo(102)
2022-06-01 13:23:34 +08:00
--LogError("cardid=="..data.id.." id=="..id.activityId)
2024-09-06 10:38:56 +08:00
WeekCardManager.RequestGetWeekCardReward(data.id, id.activityId, function()
2022-06-01 09:34:41 +08:00
-- 刷新显示
self:RefreshShow()
end)
end)
else
-- 已领取
2024-08-29 21:36:51 +08:00
pre.btnText.text = Language[10025]
2022-06-01 09:34:41 +08:00
pre.red:SetActive(false)
Util.SetGray(pre.btn, true)
Util.AddOnceClick(pre.btn, function()
2024-08-29 21:36:51 +08:00
PopupTipPanel.ShowTip(Language[12022])
2022-06-01 09:34:41 +08:00
end)
end
else
-- 购买周卡
2022-07-26 17:39:41 +08:00
pre.timeTxt.gameObject:SetActive(false)
2022-06-01 09:34:41 +08:00
pre.btnText.text = MoneyUtil.GetMoneyUnitNameWithMoney(rechargeCfg.Price)
pre.red:SetActive(false)
Util.SetGray(pre.btn, false)
Util.AddOnceClick(pre.btn, function()
2024-09-06 10:38:56 +08:00
PayManager.Pay(config.RechargeId, function(id)
2022-06-01 09:34:41 +08:00
-- 前端修改购买状态
--data.isBuy = true
--WeekCardManager.UpdateWeekCardData(data)
-- 刷新显示
--self:SetCardWind(curKey)
end)
end)
end
end
function WeekCardPanel:SetCardShow(index, data)
local pre = self.cardPres[index]
if not pre then
2024-09-06 10:38:56 +08:00
return
2022-06-01 09:34:41 +08:00
end
local config = _WeekcardConfig[data.id]
if not config then
2024-09-06 10:38:56 +08:00
return
2022-06-01 09:34:41 +08:00
end
-- 背景
pre.bg.sprite = self.spLoader:LoadSprite(config.BgImage)
-- 物品名称
pre.name.sprite = self.spLoader:LoadSprite(config.TypeImage)
pre.name:SetNativeSize()
-- 每日奖励数量
local itemId = 0
local dayNum = 0
if config.BaseReward and config.BaseReward[1] then
itemId = config.BaseReward[1][1]
dayNum = config.BaseReward[1][2]
end
pre.dayNum.text = PrintWanNum2(dayNum)
-- 当前累计奖励数量
local curNum = dayNum * data.leaveGetRewardDays or 0
pre.curNum.text = PrintWanNum2(curNum)
2024-09-06 10:38:56 +08:00
pre.curNum.transform.parent.gameObject:SetActive(curNum ~= 0) -- 累计数量为0时不显示
2022-06-01 09:34:41 +08:00
-- 总奖励数量
local continueDay = config.ContiueDays or 0
local allNum = dayNum * continueDay
pre.allNum.text = PrintWanNum2(allNum)
-- 设置物品图片显示
local sprite = SetIcon(self.spLoader, itemId)
pre.icon.sprite = sprite
pre.icon1.sprite = sprite
pre.icon2.sprite = sprite
pre.icon3.sprite = sprite
local rechargeCfg = _RechargeCommodityConfig[config.RechargeId]
if not rechargeCfg then
2024-09-06 10:38:56 +08:00
return
2022-06-01 09:34:41 +08:00
end
-- 按钮状态
if data.isBuy then
if data.leaveGetRewardDays > 0 then
-- 领取奖励
2024-08-29 21:36:51 +08:00
pre.btnText.text = Language[10018]
2022-06-01 09:34:41 +08:00
pre.red:SetActive(true)
Util.SetGray(pre.btn, false)
Util.AddOnceClick(pre.btn, function()
WeekCardManager.RequestGetWeekCardReward(data.id, function()
-- 刷新显示
self:RefreshShow()
end)
end)
else
-- 已领取
2024-08-29 21:36:51 +08:00
pre.btnText.text = Language[10025]
2022-06-01 09:34:41 +08:00
pre.red:SetActive(false)
Util.SetGray(pre.btn, true)
Util.AddOnceClick(pre.btn, function()
2024-08-29 21:36:51 +08:00
PopupTipPanel.ShowTip(Language[12022])
2022-06-01 09:34:41 +08:00
end)
end
else
-- 购买周卡
pre.btnText.text = MoneyUtil.GetMoneyUnitNameWithMoney(rechargeCfg.Price)
pre.red:SetActive(false)
Util.SetGray(pre.btn, false)
Util.AddOnceClick(pre.btn, function()
2024-09-06 10:38:56 +08:00
PayManager.Pay(config.RechargeId, function(id)
2022-06-01 09:34:41 +08:00
-- 前端修改购买状态
data.isBuy = true
WeekCardManager.UpdateWeekCardData(data)
-- 刷新显示
self:RefreshShow()
end)
end)
end
end
--界面关闭时调用(用于子类重写)
function WeekCardPanel:OnClose()
2022-06-01 13:23:34 +08:00
--CheckRedPointStatus(RedPointType.WeekCard)
CheckRedPointStatus(RedPointType.WeekCardOpen)
CheckRedPointStatus(RedPointType.WeekCardReward)
2022-06-01 09:34:41 +08:00
end
2024-09-06 10:38:56 +08:00
2022-06-01 09:34:41 +08:00
--界面销毁时调用(用于子类重写)
function WeekCardPanel:OnDestroy()
self.spLoader:Destroy()
self.cardPres = {}
end
2024-09-06 10:38:56 +08:00
return WeekCardPanel