miduo_client/Assets/ManagedResources/~Lua/Modules/Mission/MissionDailyPanel_Daily.lua

326 lines
14 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.

----- 日常任务弹窗 -----
local this = {}
--传入父脚本模块
local parent
--传入特效层级
local sortingOrder=0
local fun
local SingleDailyMissionState = {
NoFinish = 0, --未完成
Finish = 1, --完成未领取
GetFinish = 2, --已领取
}
local SortDailyMissionState = {
[1]=1,
[0]=2,
[2]=3
}
local dailyTasksConfig={}--静态数据
local curDailyMissionData={}--每日任务条目
local curDailyMissionBoxData={}--宝箱
local boxList={}--宝箱按钮
local allMissionDailyPres = {}
local allMissionDailyItemPres = {}
local allMissionDailyBoxItemPres = {}
local myGo
local isPlayAnim = true
function this:InitComponent(gameObject)
this.spLoader = SpriteLoader.New()
myGo = gameObject
this.rectMask=Util.GetGameObject(gameObject,"rect"):GetComponent("Image")
this.rewardPre = Util.GetGameObject(gameObject, "rewardPre")
local v = Util.GetGameObject(gameObject, "rect"):GetComponent("RectTransform").rect
this.ScrollView = SubUIManager.Open(SubUIConfig.ScrollCycleView, Util.GetGameObject(gameObject, "rect").transform,
this.rewardPre, nil, Vector2.New(v.width, v.height), 1, 1, Vector2.New(0,10))
this.ScrollView.moveTween.MomentumAmount = 1
this.ScrollView.moveTween.Strength = 1
this.NoviceItemList={}--存储itemview 重复利用
this.boxItemGrid = Util.GetGameObject(gameObject, "RewardPanel/ViewRect/grid").transform
for i = 1, 3 do
boxList[i] = Util.GetGameObject(gameObject, "rewardBg/btnList/BoxBtn"..i)
allMissionDailyBoxItemPres[i] = SubUIManager.Open(SubUIConfig.ItemView, this.boxItemGrid)
end
this.BoxThree = Util.GetGameObject(gameObject, "rewardBg/BoxThree")
this.BoxSix = Util.GetGameObject(gameObject, "rewardBg/BoxSix")
this.BoxNine = Util.GetGameObject(gameObject, "rewardBg/BoxNine")
this.RewardPanelGetInfo = Util.GetGameObject(gameObject, "RewardPanel/getInfo")
this.RewardPanelGrid = Util.GetGameObject(gameObject, "RewardPanel/ViewRect/grid")
this.RewardPanel = Util.GetGameObject(gameObject, "RewardPanel")
this.rewardMaskBtn = Util.GetGameObject(gameObject, "RewardPanel/rewardMaskBtn")
this.progressBottom = Util.GetGameObject(gameObject, "rewardBg/progressBottom/Image"):GetComponent("Image")
this.totalPro = Util.GetGameObject(gameObject, "rewardBg/totalProImage/totalPro"):GetComponent("Text")
this.getInfo = Util.GetGameObject(gameObject, "RewardPanel/getInfo"):GetComponent("Text")
end
function this:BindEvent()
Util.AddClick(this.rewardMaskBtn, function()
this.rewardMaskBtn:SetActive(false)
this.RewardPanel:SetActive(false)
end)
end
function this:AddListener()
Game.GlobalEvent:AddEvent(GameEvent.MissionDaily.OnMissionDailyChanged, this.OnShowData)
Game.GlobalEvent:AddEvent(GameEvent.CloseUI.OnClose, this.ClosePanel)
end
function this:RemoveListener()
Game.GlobalEvent:RemoveEvent(GameEvent.MissionDaily.OnMissionDailyChanged,this.OnShowData)
Game.GlobalEvent:RemoveEvent(GameEvent.CloseUI.OnClose, this.ClosePanel)
end
function this:OnShow(_parent,...)
isPlayAnim = true
parent=_parent
sortingOrder = _parent.sortingOrder
--不定参中包含的不定参 _args[1]为面板类型 _args[2]之后(包括)为打开面板后传入的不定参
local args = {...}
fun = args[1]
this.rectMask.enabled=true
this.OnShowData(true,true)
this.RewardPanel:SetActive(false)
end
function this:OnSortingOrderChange(sortingOrder)
for i, v in pairs(this.NoviceItemList) do
for j = 1, #this.NoviceItemList[i] do
if this.NoviceItemList[i][j] and this.NoviceItemList[i][j].gameObject then
this.NoviceItemList[i][j]:SetEffectLayer(sortingOrder)
end
end
end
--特效层级重设
for i=1,#boxList do
Util.AddParticleSortLayer(boxList[i], sortingOrder)
end
end
function this.OnShowData(isTop,isAni)
dailyTasksConfig=ConfigManager.GetConfig(ConfigName.DailyTasksConfig)
curDailyMissionData = {}
curDailyMissionBoxData = {}
for i, v in pairs(TaskManager.GetTypeTaskList(TaskTypeDef.DayTask)) do
if v.missionId < 10000 then
if dailyTasksConfig[v.missionId].OpenLevel then
table.insert(curDailyMissionData,v)
end
else
if dailyTasksConfig[v.missionId].OpenLevel then
table.insert(curDailyMissionBoxData,v)
end
end
end
table.sort(curDailyMissionData, function(a,b)
if a.state == b.state then
return a.missionId<b.missionId
else
return SortDailyMissionState[a.state]<SortDailyMissionState[b.state]
end
end)
local AllData = TaskManager.GetTypeTaskList(TaskTypeDef.Achievement)
this.ScrollView:SetData(curDailyMissionData, function (index, go)
this.SingleMissionDatasDataShow(go,curDailyMissionData[index])
end, not isTop, not isAni)
this.SetDailyMissionBox(curDailyMissionBoxData)
-- if isPlayAnim then
-- SecTorPlayAnimByScroll(this.ScrollView)
-- isPlayAnim = false
-- end
end
function this.SingleMissionDatasDataShow(_go,_missionData)
local missionData = _missionData
local missionConfigData = dailyTasksConfig[missionData.missionId]
local reward = {}
if missionConfigData and #missionConfigData.Reward then
for i = 1, #missionConfigData.Reward do
table.insert(reward,{reward = {missionConfigData.Reward[i][1],missionConfigData.Reward[i][2]},type = 1})
end
end
if missionConfigData and #missionConfigData.MazePoint then
for i = 1, #missionConfigData.MazePoint do
table.insert(reward,{reward = {missionConfigData.MazePoint[i][1],missionConfigData.MazePoint[i][2]},type = 2})
end
end
local titleText = Util.GetGameObject(_go, "titleImage/titleText"):GetComponent("Text")
titleText.text =string.format(GetLanguageStrById(missionConfigData.Desc),missionConfigData.Values[2][1])
local itemGroup = Util.GetGameObject(_go, "content")
--滚动条复用重设itemview
if not this.NoviceItemList[_go] then
this.NoviceItemList[_go] = {}
end
for i = 1, #reward do
if not this.NoviceItemList[_go][i] then
this.NoviceItemList[_go][i] = SubUIManager.Open(SubUIConfig.ItemView, itemGroup.transform)
end
this.NoviceItemList[_go][i].gameObject:SetActive(false)
end
local show
for i = 1, #reward do
show = false
if (reward[i].type == 2 and ActivityGiftManager.GetActivityOpenStatus(ActivityTypeDef.TreasureOfSomeBody) and ActivityGiftManager.IsQualifiled( ActivityTypeDef.TreasureOfSomeBody))
or reward[i].type == 1 then
show = true
end
if show then
this.NoviceItemList[_go][i]:OnOpen(false, reward[i].reward, 0.7,false,false,false,sortingOrder)
this.NoviceItemList[_go][i].gameObject:SetActive(true)
end
end
local lingquButton = Util.GetGameObject(_go.gameObject, "lingquButton")
Util.GetGameObject(lingquButton.gameObject, "redPoint"):SetActive(false)
local qianwangButton = Util.GetGameObject(_go.gameObject, "qianwangButton")
local getFinishText = Util.GetGameObject(_go.gameObject, "getFinishText")
local getRewardProgress = Util.GetGameObject(_go.gameObject, "getRewardProgress")
local state=missionData.state--0:未完成 1完成未领取 2已达成已领取
lingquButton:SetActive(state == SingleDailyMissionState.Finish)
qianwangButton:SetActive(state == SingleDailyMissionState.NoFinish)
getFinishText:SetActive(state == SingleDailyMissionState.GetFinish)
Util.SetGray(getFinishText,state == SingleDailyMissionState.GetFinish)
getRewardProgress:SetActive(state == SingleDailyMissionState.NoFinish)
getRewardProgress:GetComponent("Text").text = missionData.progress.."/"..missionConfigData.Values[2][1]
Util.AddOnceClick(qianwangButton, function()
if missionConfigData.Jump then
JumpManager.GoJump(missionConfigData.Jump)
this.rectMask.enabled= UIManager.IsTopShow(UIName.MissionDailyPanel)
end
end)
Util.AddOnceClick(lingquButton, function()
NetManager.TakeMissionRewardRequest(TaskTypeDef.DayTask,missionData.missionId,function (msg)
UIManager.OpenPanel(UIName.RewardItemPopup,msg.drop,1,function()
TaskManager.SetTypeTaskState(TaskTypeDef.DayTask, missionData.missionId, SingleDailyMissionState.GetFinish)
this.OnShowData(false,false)
-- 检测红点状态
CheckRedPointStatus(RedPointType.DailyTask)
CheckRedPointStatus(RedPointType.SecretTer)
end)
end)
end)
end
--每日任务宝箱赋值
function this.SetDailyMissionBox(_missionDatas)
for i = 1, math.max(#_missionDatas, #boxList) do
local go = boxList[i]
if not go then
go = newObject(boxList[3])
go.transform:SetParent(Util.GetGameObject(myGo, "rewardBg/btnList").transform)
go.name = "BoxBtn"..i
go.transform.localScale = Vector3.one
go.transform.localPosition = Vector3.zero
boxList[i] = go
end
-- go.gameObject:SetActive(false)
end
local curGetRewardNum=0
for i, v in ipairs(curDailyMissionBoxData) do
--LogGreen("v.missionId "..v.missionId.." "..v.progress)
if v.progress > curGetRewardNum then
curGetRewardNum = v.progress
end
end
--LogGreen("#_missionDatas:"..#_missionDatas)
this.progressBottom.fillAmount=curGetRewardNum/dailyTasksConfig[_missionDatas[#_missionDatas].missionId].Values[2][1]
this.totalPro.text= Language[11320]..curGetRewardNum--.."/"..LengthOfTable(curDailyMissionData)
for i, v in pairs(_missionDatas) do
boxList[i]:SetActive(true)
local missionConfigData = dailyTasksConfig[v.missionId]
Util.GetGameObject(boxList[i], "num"):GetComponent("Text").text = missionConfigData.Values[2][1]
boxList[i]:GetComponent("Image").enabled = (not (v.state==SingleDailyMissionState.Finish or v.state==SingleDailyMissionState.GetFinish))
Util.GetGameObject(boxList[i], "UI_Effect_BaoXiang_KaiQi"):SetActive(v.state==SingleDailyMissionState.GetFinish)
Util.GetGameObject(boxList[i], "UI_Effect_BaoXiang_KaiQi/MeiKaiQi"):SetActive(false)
Util.GetGameObject(boxList[i], "UI_Effect_BaoXiang_KaiQi"):GetComponent("Animator").enabled = false
Util.GetGameObject(boxList[i], "UI_Effect_BaoXiang_KaiQi/KaiQi"):SetActive(v.state==SingleDailyMissionState.GetFinish)
Util.GetGameObject(boxList[i], "getFinish"):SetActive(false)
Util.GetGameObject(boxList[i], "redPoint"):SetActive(false)
Util.GetGameObject(boxList[i], "UI_Effect_BaoXiang_KeKaiQi"):SetActive(v.state==SingleDailyMissionState.Finish)
Util.AddOnceClick(boxList[i], function()
this.MissionBoxClick(boxList[i],v)
end)
end
end
function this.MissionBoxClick(btn,_singleData)
if _singleData.state == SingleDailyMissionState.NoFinish or _singleData.state == SingleDailyMissionState.GetFinish then
local curConfig = dailyTasksConfig[_singleData.missionId]
this.getInfo.text=Language[11321]..curConfig.Values[2][1]..Language[11322]
local reward = dailyTasksConfig[_singleData.missionId]
if reward then
for i = 1, math.max(#allMissionDailyBoxItemPres, #reward.Reward) do
local go = allMissionDailyBoxItemPres[i]
if not go then
go = SubUIManager.Open(SubUIConfig.ItemView, this.boxItemGrid)
go.gameObject.name = "frame"..i
allMissionDailyBoxItemPres[i] = go
end
go.gameObject:SetActive(false)
end
for i = 1, #reward.Reward do
allMissionDailyBoxItemPres[i].gameObject:SetActive(true)
allMissionDailyBoxItemPres[i]:OnOpen(false,reward.Reward[i],0.75)
end
end
this.rewardMaskBtn:SetActive(true)
this.RewardPanel:SetActive(true)
elseif _singleData.state == SingleDailyMissionState.Finish then
Util.GetGameObject(btn, "UI_Effect_BaoXiang_KeKaiQi"):SetActive(false)
Util.GetGameObject(btn, "UI_Effect_BaoXiang_KaiQi"):SetActive(true)
Util.GetGameObject(btn, "UI_Effect_BaoXiang_KaiQi"):GetComponent("Animator").enabled = true
Util.GetGameObject(btn, "UI_Effect_BaoXiang_KaiQi/MeiKaiQi"):SetActive(true)
-- btn:GetComponent("Button").enabled = false
for i = 1, #boxList do
boxList[i]:GetComponent("Button").enabled = false
end
this.timer = Timer.New(function()
NetManager.TakeMissionRewardRequest(TaskTypeDef.DayTask,_singleData.missionId,function (msg)
TaskManager.SetTypeTaskState(TaskTypeDef.DayTask, _singleData.missionId, SingleDailyMissionState.GetFinish)
UIManager.OpenPanel(UIName.RewardItemPopup,msg.drop,1)
this.OnShowData(false,false)
end)
this.timer:Stop()
this.timer = nil
for i = 1, #boxList do
boxList[i]:GetComponent("Button").enabled = true
end
end, 1, 1, true)
this.timer:Start()
end
end
function this.GetCurIsOpen(LevelRegion)
if LevelRegion[1] == 1 then--等级
return PlayerManager.level >= LevelRegion[2]
elseif LevelRegion[1] == 2 then--关卡
return FightPointPassManager.GetFightIsOpenById(LevelRegion[2])
end
end
--跳转显示新手提示圈
function this.ShowGuideGo()
--JumpManager.ShowGuide(UIName.MissionDailyPanel, Util.GetGameObject(allMissionDailyPres[1].transform, "getAwardBtn"))
end
--用于跳转回调
function this.ClosePanel()
this.rectMask.enabled=true
end
function this:OnClose()
FightPointPassManager.isBeginFight = false
this.rectMask.enabled=true
end
function this:OnDestroy()
this.spLoader:Destroy()
allMissionDailyPres = {}
allMissionDailyItemPres = {}
boxList = {}
allMissionDailyBoxItemPres = {}
end
return this