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