miduo_client/Assets/ManagedResources/~Lua/Modules/JourneyWithWind/JourneyWithWindPanel.lua

516 lines
25 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

require("Base/BasePanel")
JourneyWithWindPanel = Inherit(BasePanel)
local this = JourneyWithWindPanel
local JourneyWithWind = ConfigManager.GetConfig(ConfigName.JourneyWithWind)
local mainlevleConfig = ConfigManager.GetConfig(ConfigName.MainLevelConfig)
this.timer = Timer.New()
local sorting = 0
local itemList = {}--item list 重复利用 和 修改层级时会用到
local curDayIndex = 0--当前天数索引
local curBtnConFigData = {}--当前daybtn ActivityRewardConfig数据
local allBtnsConFigData = {}--上方所有daybtn ActivityRewardConfig数据
local curDayAllTaskGos = {}--当前天所有任务go
local activityData
local isGetState
local curRewardTaskData--奖励后端数据
local isOpenLock
local dayNumImage = {
[1] = "p_piaomialzhilv_paizi01",
[2] = "p_piaomialzhilv_paizi02",
[3] = "p_piaomialzhilv_paizi03",
[4] = "p_piaomialzhilv_paizi04",
[5] = "p_piaomialzhilv_paizi05",
[6] = "p_piaomialzhilv_paizi06",
[7] = "p_piaomialzhilv_paizi07",
[8] = "p_piaomialzhilv_paizi08",
[9] = "p_piaomialzhilv_paizi09",
[10] = "p_piaomialzhilv_paizi10",
[11] = "p_piaomialzhilv_paizi11",
[12] = "p_piaomialzhilv_paizi12",
[13] = "p_piaomialzhilv_paizi13",
[14] = "p_piaomialzhilv_paizi14",
[15] = "p_piaomialzhilv_paizi15",
}
-- local dayBtns = {}
--初始化组件(用于子类重写)
function JourneyWithWindPanel:InitComponent()
this.spLoader = SpriteLoader.New()
--子模块脚本
this.BtnBack = Util.GetGameObject(self.gameObject, "btnBack")
this.helpBtn = Util.GetGameObject(self.gameObject, "helpBtn")
this.helpPosition = this.helpBtn:GetComponent("RectTransform").localPosition
curDayAllTaskGos = {}
for i = 1, (5+2) do--5+2 是 任务最多显示五个 2 个 一个是活动奖励 一个是礼包
curDayAllTaskGos[i] = Util.GetGameObject(self.gameObject, "taskList/MissionPre (".. i ..")")
end
this.curDayTip = Util.GetGameObject(self.transform, "curDayTipImage/curDayTip"):GetComponent("Image")
this.selected = Util.GetGameObject(self.transform, "selected")
this.dayPre = Util.GetGameObject(self.gameObject, "dayPre")
this.dayGrid = Util.GetGameObject(self.gameObject, "rect/grid")
-- dayBtns = {}
-- for i = 1, 6 do
-- dayBtns[i] = Util.GetGameObject(self.gameObject, "rect/grid/dayPre (".. i ..")")
-- end
local v2 = Util.GetGameObject(self.gameObject, "rect"):GetComponent("RectTransform").rect
this.titleScrollView = SubUIManager.Open(SubUIConfig.ScrollCycleView, Util.GetGameObject(self.gameObject, "rect").transform,
this.dayPre, nil, Vector2.New(-v2.x*2, -v2.y*2), 2, 1, Vector2.New(0,0))
this.titleScrollView.moveTween.MomentumAmount = 1
this.titleScrollView.moveTween.Strength = 1
end
--绑定事件(用于子类重写)
function JourneyWithWindPanel:BindEvent()
Util.AddClick(this.BtnBack, function()
self:ClosePanel()
end)
--帮助按钮
Util.AddClick(this.helpBtn, function()
UIManager.OpenPanel(UIName.HelpPopup,HELP_TYPE.JourneyWithWind,this.helpPosition.x,this.helpPosition.y)
end)
end
--添加事件监听(用于子类重写)
function JourneyWithWindPanel:AddListener()
Game.GlobalEvent:AddEvent(GameEvent.Activity.OnActivityOpenOrClose, this.AutoClose)
end
--移除事件监听(用于子类重写)
function JourneyWithWindPanel:RemoveListener()
Game.GlobalEvent:RemoveEvent(GameEvent.Activity.OnActivityOpenOrClose, this.AutoClose)
end
local curServerDay--1 3 5 7 10 15
-- local curServerIndex--1 2 3 4 5 6
--界面打开时调用(用于子类重写)
function JourneyWithWindPanel:OnOpen(_curDayIndex)
allBtnsConFigData = ActivityGiftManager.GetJourneyWithWindAllDayConFigData()
curServerDay = math.ceil((CalculateSecondsNowTo_N_OClock(0) + GetTimeStamp() - PlayerManager.userCreateTime)/86400)
local curDay = 1
for i = 1, #allBtnsConFigData do
if curServerDay >= allBtnsConFigData[i].Values[1][2] then
curDay = allBtnsConFigData[i].Values[1][2]
-- curServerIndex = allBtnsConFigData[i].Sort
end
end
local curDayIsNotClick,joConFig = ActivityGiftManager.JourneyWithWindRewardNoGet()
if curDayIsNotClick then
if joConFig.Values[1][2] < curDay then
curDay = joConFig.Values[1][2]
-- curServerIndex = joConFig.Sort
end
end
curDayIndex = _curDayIndex or curDay
end
--界面打开或者重新打开后,界面刷新时调用(用于子类重写)
function JourneyWithWindPanel:OnShow()
PlayerPrefs.SetInt(PlayerManager.uid.."piaomiaozhilv",1)
activityData = ActivityGiftManager.GetActivityTypeInfo(ActivityTypeDef.JourneyWithWind)
this.ShowDayBtnsData()
this.ShowDayData(curDayIndex)
end
function JourneyWithWindPanel:OnSortingOrderChange()
for i, v in pairs(itemList) do
for j = 1, #v do
v[j]:SetEffectLayer(self.sortingOrder)
end
end
sorting=self.sortingOrder
end
--显示上方所有天的按钮 及 当前可领取的主要奖励
function this.ShowDayBtnsData()
this.titleScrollView:SetData(allBtnsConFigData, function (index, go)
this.SingleDayBtnDataShow(go, allBtnsConFigData[index],index)
end,true,true)
this.titleScrollView:SetIndex(curDayIndex)
-- for i = 1, math.max(#dayBtns,#allBtnsConFigData) do
-- local go = dayBtns[i]
-- if not go then
-- go = newObject(this.dayPre)
-- go.transform:SetParent(this.dayGrid.transform)
-- go.transform.localScale = Vector3.one
-- go.transform.localPosition = Vector3.zero
-- dayBtns[i] = go
-- end
-- go.gameObject:SetActive(false)
-- end
-- for i = 1, #allBtnsConFigData do
-- this.SingleDayBtnDataShow(dayBtns[i],allBtnsConFigData[i],i)
-- end
end
function this.SingleDayBtnDataShow(_go,data,index)
local go = Util.GetGameObject(_go, "dayPre")
Util.GetGameObject(go, "dayBg/dayImage"):GetComponent("Image").sprite = this.spLoader:LoadSprite(dayNumImage[data.Values[1][2]])
local iconItemId = ConfigManager.GetConfigData(ConfigName.ItemConfig,data.Reward[1][1])
Util.GetGameObject(go, "icon"):GetComponent("Image").sprite = this.spLoader:LoadSprite(GetResourcePath(iconItemId.ResourceID))
local redPoint = Util.GetGameObject(go, "redPoint")
local redState = false
if curServerDay >= data.Values[1][2] then
Util.SetGray(Util.GetGameObject(go, "dayBg"),false)
else
Util.SetGray(Util.GetGameObject(go, "dayBg"),true)
end
--上方按钮一个高一个低
if index%2 == 0 then
go.transform.anchoredPosition = Vector3.New(3.05,23,0)
else
go.transform.anchoredPosition = Vector3.New(3.05,176.09,0)
end
if data.Values[1][2] == curDayIndex then--初始化按钮选中状态
this.selected.transform:SetParent(Util.GetGameObject(go, "selectedParent").transform)
this.selected.transform.anchoredPosition = Vector3.New(4.3,9.4,0)
ActivityGiftManager.SetJourneyWithWindPlayerPrefs(curDayIndex,1)
end
if activityData and curServerDay >= data.Values[1][2] then
for j = 1, #activityData.mission do
if activityData.mission[j].missionId == data.Id then
redState = ActivityGiftManager.SingleJourneyWithWindRewardNoGet(activityData.mission[j])
end
end
end
if not redState and curServerDay >= data.Values[1][2] then
redState = tonumber(ActivityGiftManager.GetJourneyWithWindPlayerPrefs(data.Values[1][2])) == 0
end
redPoint:SetActive(redState)
Util.AddOnceClick(go, function()
this.ShowDayData(data.Values[1][2])--点击按钮刷新界面
this.selected.transform:SetParent(Util.GetGameObject(go, "selectedParent").transform)
this.selected.transform.anchoredPosition = Vector3.New(4.3,9.4,0)
end)
end
--当前天的具体任务显示
function this.ShowDayData(_curDayIndex)
curDayIndex = _curDayIndex
ActivityGiftManager.SetJourneyWithWindPlayerPrefs(curDayIndex,1)
this.curDayTip.sprite = this.spLoader:LoadSprite(dayNumImage[curDayIndex])
for i = 1, #allBtnsConFigData do
if curDayIndex == allBtnsConFigData[i].Values[1][2] then
curBtnConFigData = allBtnsConFigData[i]
end
end
--组当前所有任务的表数据
local curDayAllTaskConFigData = {}
for key, configInfo in ConfigPairs(JourneyWithWind) do
if activityData.activityId == configInfo.ActivityId and configInfo.DayNum == curDayIndex then
table.insert(curDayAllTaskConFigData,configInfo)
end
end
--组当前所有任务的后端数据
local AllTaskData = TaskManager.GetTypeTaskList(TaskTypeDef.JourneyWithWind)
for i = 1, #curDayAllTaskGos-2 do--curDayAllTaskGos-2 是因为上方任务至多只有五个 其余两个 一个是活动奖励 一个是礼包
if curDayAllTaskConFigData[i] then
curDayAllTaskGos[i]:SetActive(true)
Util.GetGameObject(curDayAllTaskGos[i], "pre1"):SetActive(true)
Util.GetGameObject(curDayAllTaskGos[i], "pre2"):SetActive(false)
Util.GetGameObject(curDayAllTaskGos[i], "pre1/name"):GetComponent("Text").text = "目标"
Util.GetGameObject(curDayAllTaskGos[i], "pre1/condition"):GetComponent("Text").text = curDayAllTaskConFigData[i].Show
local btnJump = Util.GetGameObject(curDayAllTaskGos[i], "pre1/btnJump")
local btnFinish = Util.GetGameObject(curDayAllTaskGos[i], "pre1/btnFinish")
local btnJumpText = Util.GetGameObject(btnJump, "get"):GetComponent("Text")
local buyInfo = Util.GetGameObject(curDayAllTaskGos[i], "buyInfo"):GetComponent("Text")
local headName = Util.GetGameObject(curDayAllTaskGos[i], "headImage/name")
headName:GetComponent("Text").text = curDayAllTaskConFigData[i].HeadName
local size = headName:GetComponent("RectTransform").sizeDelta
if string.len(curDayAllTaskConFigData[i].HeadName) >= 15 then--每条任务的最前方标题 文字字节长度大于等于15个字节五个字 text 要变宽否则显示不对
size.x = 130.3
headName.transform.sizeDelta = size
else
size.x = 108.3
headName.transform.sizeDelta = size
end
btnFinish:SetActive(false)
btnJump:SetActive(false)
buyInfo.text = ""
local curMissionData--获取对应天数的后端活动数据
for j = 1, #AllTaskData do
if AllTaskData[j].missionId == curDayAllTaskConFigData[i].Id then
curMissionData = AllTaskData[j]
end
end
if curMissionData then
local isOpen = false
if curDayAllTaskConFigData[i].SystemId == FUNCTION_OPEN_TYPE.EXPEDITION then--大闹天宫 特殊判断 大闹天宫有 休息期 但不能显示关闭
if ActTimeCtrlManager.SingleFuncState(curDayAllTaskConFigData[i].SystemId) then
isOpen = true
else
if ActTimeCtrlManager.IsQualifiled(FUNCTION_OPEN_TYPE.EXPEDITION) then
isOpen = true
else
isOpen = false
end
end
else
isOpen = (curDayAllTaskConFigData[i].SystemId and curDayAllTaskConFigData[i].SystemId > 0 and ActTimeCtrlManager.SingleFuncState(curDayAllTaskConFigData[i].SystemId))
end
local progress = curMissionData.progress--任务进度
local state = curMissionData.state--任务状态 0:未完成 1完成未领取 2已达成已领取
isOpenLock = curServerDay >= curDayIndex
Util.SetGray(btnJump,false)
if isOpenLock then--到天数
btnJump.transform.anchoredPosition = Vector3.New(262.41,44.5,0)
Util.SetGray(btnJump,false)
btnJumpText.text = "前往"
btnJump:GetComponent("Button").enabled = true
if isOpen then--功能是否开启
if state == 1 or state == 2 then--是否已达成
btnFinish:SetActive(true)
elseif state == 0 then
btnJump:SetActive(true)
btnJump:GetComponent("Button").enabled = true
buyInfo.text = string.format("%s/%s",progress,curDayAllTaskConFigData[i].TaskValue[2][1])
Util.AddOnceClick(btnJump, function()
if curDayAllTaskConFigData[i].SystemId == FUNCTION_OPEN_TYPE.EXPEDITION then--大闹天宫点击前往做特殊判断 也许是之前的跳转接口写的不合理 之后优化
if ActTimeCtrlManager.SingleFuncState(FUNCTION_OPEN_TYPE.EXPEDITION) then
if #ExpeditionManager.nodeInfo <= 0 then
if ExpeditionManager.expeditionLeve == -1 then
NetManager.GetExpeditionRequest(2,function()
JumpManager.GoJump(curDayAllTaskConFigData[i].Jump[1])
end)
else
NetManager.GetExpeditionRequest(
ExpeditionManager.expeditionLeve,function()
JumpManager.GoJump(curDayAllTaskConFigData[i].Jump[1])
end)
end
else
JumpManager.GoJump(curDayAllTaskConFigData[i].Jump[1])
end
NetManager.TreasureOfHeavenScoreRequest()
PlayerPrefs.SetInt(PlayerManager.uid.."ExpeditionRed",ActTimeCtrlManager.GetSerDataByTypeId(FUNCTION_OPEN_TYPE.EXPEDITION).endTime)
CheckRedPointStatus(RedPointType.OrdinaryExplore)
else
if ActTimeCtrlManager.IsQualifiled(FUNCTION_OPEN_TYPE.EXPEDITION) then
PopupTipPanel.ShowTip(Language[12183])
else
PopupTipPanel.ShowTip(ActTimeCtrlManager.GetFuncTip(FUNCTION_OPEN_TYPE.EXPEDITION))
end
end
else
JumpManager.GoJump(curDayAllTaskConFigData[i].Jump[1])
end
end)
end
else
btnJump:SetActive(true)
Util.SetGray(btnJump,true)
btnJump:GetComponent("Button").enabled = false
if curDayAllTaskConFigData[i].TaskType ~= 14 then--除了战力 其他任务当对应功能不开启是要显示开启条件
buyInfo.text = string.format(Language[11903],ConfigManager.GetConfigData(ConfigName.GlobalSystemConfig,curDayAllTaskConFigData[i].SystemId).OpenRules[2])
end
end
else--未到天数
btnJump.transform.anchoredPosition = Vector3.New(262.41,27.2,0)
btnJump:SetActive(true)
Util.SetGray(btnJump,true)
btnJumpText.text = "未开启"
btnJump:GetComponent("Button").enabled = false
end
end
else
curDayAllTaskGos[i]:SetActive(false)
end
end
this.ShowDayDataActivityReward()--位置1 不变 因为该方法会对界面上的一些数据赋值
this.ShowDayDataGiftBag()--位置2 不变
CheckRedPointStatus(RedPointType.JourneyWithWind)
end
--奖励任务
function this.ShowDayDataActivityReward()
local go = curDayAllTaskGos[6]
if go and curBtnConFigData and activityData then
Util.GetGameObject(go, "pre1"):SetActive(false)
Util.GetGameObject(go, "pre2"):SetActive(true)
for i = 1, #activityData.mission do
if activityData.mission[i].missionId == curBtnConFigData.Id then
curRewardTaskData = activityData.mission[i]
end
end
if curRewardTaskData then
if not itemList[go.name] then
itemList[go.name] = {}
end
for i = 1, #itemList[go.name] do
itemList[go.name][i].gameObject:SetActive(false)
end
for i = 1, #curBtnConFigData.Reward do
if itemList[go.name][i] then
itemList[go.name][i]:OnOpen(false, curBtnConFigData.Reward[i], 0.9,false,false,false,sorting)
else
itemList[go.name][i] = SubUIManager.Open(SubUIConfig.ItemView, Util.GetGameObject(go, "pre2/itemContent").transform)
itemList[go.name][i]:OnOpen(false, curBtnConFigData.Reward[i], 0.9,false,false,false,sorting)
end
itemList[go.name][i].gameObject:SetActive(true)
end
local getBtn = Util.GetGameObject(go, "pre2/getBtn")
local btnText = Util.GetGameObject(getBtn, "get"):GetComponent("Text")
local redPoint = Util.GetGameObject(getBtn, "redPoint")
isGetState = ActivityGiftManager.SingleJourneyWithWindRewardNoGet(curRewardTaskData)
isOpenLock = curServerDay >= curDayIndex
local imageStr = isGetState and "s_slbz_1anniuongse" or "s_slbz_1anniuhuise"
getBtn:GetComponent("Image").sprite = this.spLoader:LoadSprite(imageStr)
redPoint:SetActive(isGetState)
local headName = Util.GetGameObject(go, "headImage/name")
headName:GetComponent("Text").text = "奖励"
local size = headName:GetComponent("RectTransform").sizeDelta
size.x = 108.3
headName.transform.sizeDelta = size
btnText.text = "领取"
if isOpenLock then
Util.SetGray(getBtn,false)
getBtn:GetComponent("Button").enabled = true
if curRewardTaskData.state == 1 then
btnText.text = "已领取"
getBtn:GetComponent("Button").enabled = false
Util.SetGray(getBtn,true)
else
Util.AddOnceClick(getBtn, function()
if isGetState then
if MonthCardManager.GetMonthCardIsOpen(MONTH_CARD_TYPE.LUXURYMONTHCARD) and MonthCardManager.GetMonthCardIsOpen(MONTH_CARD_TYPE.GIFT) then
NetManager.GetActivityRewardRequest(curRewardTaskData.missionId, activityData.activityId, function(drop)
UIManager.OpenPanel(UIName.RewardItemPopup,drop,1,function()
btnText.text = "已领取"
getBtn:GetComponent("Button").enabled = false
Util.SetGray(getBtn,true)
redPoint:SetActive(false)
CheckRedPointStatus(RedPointType.JourneyWithWind)
this.ShowDayBtnsData()
end)
end)
else
MsgPanel.ShowTwo("当前仍有未激活的月卡,是否前往查看激活?", function()
end, function()
JumpManager.GoJump(36004)
end, Language[10731], Language[10019],nil, false)
end
else
if curRewardTaskData.state == 0 then
if curRewardTaskData.progress>=4 then
MsgPanel.ShowTwo("当前仍有未激活的月卡,是否前往查看激活?", function()
end, function()
JumpManager.GoJump(36004)
end, Language[10731], Language[10019],nil, false)
else
PopupTipPanel.ShowTip("完成当日所有目标才可领取!")
end
end
end
end)
end
else
Util.SetGray(getBtn,true)
btnText.text = "未开启"
getBtn:GetComponent("Button").enabled = false
end
end
end
end
-- 礼包
function this.ShowDayDataGiftBag()
local go = curDayAllTaskGos[7]
local rechargecommodityData = ConfigManager.GetConfigData(ConfigName.RechargeCommodityConfig,curBtnConFigData.Values[2][1])
if go and rechargecommodityData then
Util.GetGameObject(go, "pre1"):SetActive(false)
Util.GetGameObject(go, "pre2"):SetActive(true)
if not itemList[go.name] then
itemList[go.name] = {}
end
for i = 1, #itemList[go.name] do
itemList[go.name][i].gameObject:SetActive(false)
end
for i = 1, #rechargecommodityData.RewardShow do
if itemList[go.name][i] then
itemList[go.name][i]:OnOpen(false, rechargecommodityData.RewardShow[i], 0.9,false,false,false,sorting)
else
itemList[go.name][i] = SubUIManager.Open(SubUIConfig.ItemView, Util.GetGameObject(go, "pre2/itemContent").transform)
itemList[go.name][i]:OnOpen(false, rechargecommodityData.RewardShow[i], 0.9,false,false,false,sorting)
end
itemList[go.name][i].gameObject:SetActive(true)
end
local rechargeData = OperatingManager.GetGiftGoodsInfo(GoodsTypeDef.DirectPurchaseGift, rechargecommodityData.Id)
local getBtn = Util.GetGameObject(go, "pre2/getBtn")
local btnText = Util.GetGameObject(getBtn, "get"):GetComponent("Text")
local btnFinish = Util.GetGameObject(go, "pre2/btnFinish")
btnFinish:SetActive(false)
local headName = Util.GetGameObject(go, "headImage/name")
headName:GetComponent("Text").text = "免费礼包"
local size = headName:GetComponent("RectTransform").sizeDelta
size.x = 108.3
headName.transform.sizeDelta = size
local isCurGetState = false
if curRewardTaskData then
local dayNumConFig = ConfigManager.GetConfigData(ConfigName.ActivityRewardConfig,curRewardTaskData.missionId)
local list = ActivityGiftManager.GetJourneyWithWindDayAmount()
if dayNumConFig and curRewardTaskData.progress >= list[dayNumConFig.Values[1][2]] then
isCurGetState = true
end
end
local freetimes = rechargeData.dynamicBuyTimes - rechargeData.buyTimes
local imageStr = (freetimes > 0 and isCurGetState) and "s_slbz_1anniuongse" or "s_slbz_1anniuhuise"
getBtn:GetComponent("Image").sprite = this.spLoader:LoadSprite(imageStr)
btnText.text = string.format(Language[10383],rechargecommodityData.Price)
if isOpenLock then--是否到天数
Util.SetGray(getBtn,false)
getBtn:GetComponent("Button").enabled = true
if freetimes > 0 and isCurGetState then
btnText.text = string.format(Language[10383],rechargecommodityData.Price)
elseif freetimes <= 0 then
btnText.text = "已购买"
getBtn:GetComponent("Button").enabled = false
Util.SetGray(getBtn,true)
end
Util.AddOnceClick(getBtn, function()
if freetimes > 0 and isCurGetState then
PayManager.Pay(rechargecommodityData.Id, function(id)
FirstRechargeManager.RefreshAccumRechargeValue(rechargecommodityData.Id)
btnText.text = "已购买"
getBtn:GetComponent("Button").enabled = false
Util.SetGray(getBtn,true)
end)
else
PopupTipPanel.ShowTip("完成当日所有目标才可购买!")
end
end)
else
Util.SetGray(getBtn,true)
btnText.text = "未开启"
getBtn:GetComponent("Button").enabled = false
end
end
end
--活动到期自动关闭
function this.AutoClose(data)
if data.type == ActivityTypeDef.JourneyWithWind and data.status == 0 then
if this.timer then
this.timer:Stop()
this.timer = nil
end
this:ClosePanel()
end
end
--界面关闭时调用(用于子类重写)
function JourneyWithWindPanel:OnClose()
if this.timer then
this.timer:Stop()
this.timer = nil
end
end
--界面销毁时调用(用于子类重写)
function JourneyWithWindPanel:OnDestroy()
this.spLoader:Destroy()
if this.timer then
this.timer:Stop()
this.timer = nil
end
itemList = {}
end
return JourneyWithWindPanel