326 lines
14 KiB
Lua
326 lines
14 KiB
Lua
----- 日常任务弹窗 -----
|
||
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 |