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

272 lines
12 KiB
Lua
Raw Normal View History

2020-05-09 13:31:21 +08:00
require("Base/BasePanel")
MissionDailyPanel = Inherit(BasePanel)
local this = MissionDailyPanel
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 = {}
--初始化组件(用于子类重写)
function MissionDailyPanel:InitComponent()
self.closeBtn = Util.GetGameObject(self.transform, "bg/closeBtn")
self.grid = Util.GetGameObject(self.transform, "dayMission/infoOb/rect/grid")
for i = 1, 9 do
allMissionDailyPres[i] = Util.GetGameObject(self.gameObject, "dayMission/infoOb/rect/grid/dayMissionPre ("..i..")")
allMissionDailyItemPres[i] = SubUIManager.Open(SubUIConfig.ItemView, Util.GetGameObject(allMissionDailyPres[i].transform, "itemRect/itemGrid").transform)
end
self.boxItemGrid = Util.GetGameObject(self.transform, "dayMission/rewardBg/RewardPanel/ViewRect/grid").transform
for i = 1, 3 do
boxList[i] = Util.GetGameObject(self.transform, "dayMission/rewardBg/btnList/BoxBtn"..i)
allMissionDailyBoxItemPres[i] = SubUIManager.Open(SubUIConfig.ItemView, self.boxItemGrid)
end
self.BoxThree = Util.GetGameObject(self.transform, "dayMission/rewardBg/BoxThree")
self.BoxSix = Util.GetGameObject(self.transform, "dayMission/rewardBg/BoxSix")
self.BoxNine = Util.GetGameObject(self.transform, "dayMission/rewardBg/BoxNine")
self.RewardPanelGetInfo = Util.GetGameObject(self.transform, "dayMission/rewardBg/RewardPanel/getInfo")
self.RewardPanelGrid = Util.GetGameObject(self.transform, "dayMission/rewardBg/RewardPanel/ViewRect/grid")
self.RewardPanel = Util.GetGameObject(self.transform, "dayMission/rewardBg/RewardPanel")
self.rewardMaskBtn = Util.GetGameObject(self.transform, "dayMission/rewardBg/RewardPanel/rewardMaskBtn")
self.rewardMaskBtn = Util.GetGameObject(self.transform, "dayMission/rewardBg/RewardPanel/rewardMaskBtn")
self.progressBottom = Util.GetGameObject(self.transform, "dayMission/rewardBg/progressBottom/Image"):GetComponent("Image")
self.totalPro = Util.GetGameObject(self.transform, "dayMission/rewardBg/totalPro"):GetComponent("Text")
self.getInfo = Util.GetGameObject(self.transform, "dayMission/rewardBg/RewardPanel/getInfo"):GetComponent("Text")
end
--绑定事件(用于子类重写)
function MissionDailyPanel:BindEvent()
Util.AddClick(self.closeBtn, function()
self:ClosePanel()
end)
Util.AddClick(self.rewardMaskBtn, function()
self.rewardMaskBtn:SetActive(false)
self.RewardPanel:SetActive(false)
end)
end
--添加事件监听(用于子类重写)
function MissionDailyPanel:AddListener()
Game.GlobalEvent:AddEvent(GameEvent.MissionDaily.OnMissionDailyChanged, self.OnShowData,self)
end
--移除事件监听(用于子类重写)
function MissionDailyPanel:RemoveListener()
Game.GlobalEvent:RemoveEvent(GameEvent.MissionDaily.OnMissionDailyChanged,self.OnShowData,self)
end
--界面打开时调用(用于子类重写)
function MissionDailyPanel:OnOpen(...)
end
--界面打开或者重新打开后,界面刷新时调用(用于子类重写)
function MissionDailyPanel:OnShow()
self:OnShowData()
end
function MissionDailyPanel:OnShowData()
dailyTasksConfig=ConfigManager.GetConfig(ConfigName.DailyTasksConfig)
curDailyMissionData = {}
curDailyMissionBoxData = {}
for i, v in pairs(TaskManager.GetTypeTaskList(TaskTypeDef.DayTask)) do
if v.missionId < 10000 then
if self:GetCurIsOpen(dailyTasksConfig[v.missionId].OpenLevel) then
table.insert(curDailyMissionData,v)
end
else
if self:GetCurIsOpen(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)
self:SetDailyMission(curDailyMissionData)
self:SetDailyMissionBox(curDailyMissionBoxData)
end
function MissionDailyPanel:SetDailyMission(_missionDatas)
for i = 1, math.max(#_missionDatas, #allMissionDailyPres) do
local go = allMissionDailyPres[i]
if not go then
go = newObject(allMissionDailyPres[1])
go.transform:SetParent(self.grid.transform)
go.name = "dayMissionPre ("..i..")"
go.transform.localScale = Vector3.one
go.transform.localPosition = Vector3.zero
allMissionDailyPres[i] = go
Util.ClearChild(Util.GetGameObject(allMissionDailyPres[i].transform, "itemRect/itemGrid").transform)
local goItemPres = SubUIManager.Open(SubUIConfig.ItemView, Util.GetGameObject(allMissionDailyPres[i].transform, "itemRect/itemGrid").transform)
--goItemPres.transform:SetParent(allMissionDailyPres[i].transform)
goItemPres.transform.localScale = Vector3.one
goItemPres.transform.localPosition = Vector3.zero
allMissionDailyItemPres[i] = goItemPres
end
go.gameObject:SetActive(false)
end
for i = 1, #_missionDatas do
allMissionDailyPres[i]:SetActive(true)
self:SingleMissionDatasDataShow(allMissionDailyPres[i],allMissionDailyItemPres[i],_missionDatas[i])
end
end
function MissionDailyPanel:SingleMissionDatasDataShow(_go,_itemGo,_missionData)
local missionData = _missionData
local missionConfigData = dailyTasksConfig[missionData.missionId]
local jumpBtn = Util.GetGameObject(_go.transform, "jumpBtn")
local getAwardBtn = Util.GetGameObject(_go.transform, "getAwardBtn")
local completeBtn = Util.GetGameObject(_go.transform, "completeBtn")
local state=missionData.state--0:未完成 1完成未领取 2已达成已领取
jumpBtn:SetActive(state == SingleDailyMissionState.NoFinish)
getAwardBtn:SetActive(state ~= SingleDailyMissionState.NoFinish)
Util.GetGameObject(_go.transform, "redPoint"):SetActive(false)--state == SingleDailyMissionState.Finish
completeBtn:SetActive(state == SingleDailyMissionState.GetFinish)
if state==SingleDailyMissionState.NoFinish then
elseif state==SingleDailyMissionState.Finish then
Util.GetGameObject(_go.transform, "getAwardBtn/Text"):GetComponent("Text").text = "领 取"
elseif state==SingleDailyMissionState.GetFinish then
Util.GetGameObject(_go.transform, "getAwardBtn/Text"):GetComponent("Text").text = "已领取"
end
local itemGrid = Util.GetGameObject(_go.transform, "itemRect/itemGrid")
if missionConfigData then
Util.GetGameObject(_go.transform, "infoText"):GetComponent("Text").text =string.format(missionConfigData.Desc,missionConfigData.Values[2][1])
Util.GetGameObject(_go.transform, "progressText"):GetComponent("Text").text = missionData.progress.."/"..missionConfigData.Values[2][1]
_itemGo:OnOpen(false,missionConfigData.Reward[1],0.75)--就一个
Util.AddOnceClick(jumpBtn, function()
JumpManager.GoJump(missionConfigData.Jump)
end)
end
Util.AddOnceClick(getAwardBtn, 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)
self:OnShowData()
-- 检测红点状态
CheckRedPointStatus(RedPointType.DailyTask)
CheckRedPointStatus(RedPointType.SecretTer)
end)
end)
end)
end
--每日任务宝箱赋值
function MissionDailyPanel: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(self.transform, "dayMission/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 pairs(curDailyMissionData) do
if v.state >= SingleDailyMissionState.GetFinish then
curGetRewardNum = curGetRewardNum+1
end
end
Log("curGetRewardNum "..curGetRewardNum)
self.progressBottom.fillAmount=curGetRewardNum/dailyTasksConfig[_missionDatas[#_missionDatas].missionId].Values[2][1]--LengthOfTable(curDailyMissionData)
self.totalPro.text=curGetRewardNum.."/"..LengthOfTable(curDailyMissionData)
for i, v in pairs(_missionDatas) do
boxList[i]:SetActive(true)
Log("v.missionId "..v.missionId)
local missionConfigData = dailyTasksConfig[v.missionId]
Util.GetGameObject(boxList[i], "num"):GetComponent("Text").text = missionConfigData.Values[2][1]
Util.GetGameObject(boxList[i], "getFinish"):SetActive(v.state==SingleDailyMissionState.GetFinish)
Util.GetGameObject(boxList[i], "redPoint"):SetActive(v.state==SingleDailyMissionState.Finish)
Util.AddOnceClick(boxList[i], function()
self:MissionBoxClick(boxList[i],v)
end)
end
end
function MissionDailyPanel:MissionBoxClick(btn,_singleData)
if _singleData.state == SingleDailyMissionState.NoFinish or _singleData.state == SingleDailyMissionState.GetFinish then
local curConfig = dailyTasksConfig[_singleData.missionId]
self.getInfo.text="完成"..curConfig.Values[2][1].."个任务获得:"
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, self.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
self.rewardMaskBtn:SetActive(true)
self.RewardPanel:SetActive(true)
elseif _singleData.state == SingleDailyMissionState.Finish then
NetManager.TakeMissionRewardRequest(TaskTypeDef.DayTask,_singleData.missionId,function (msg)
TaskManager.SetTypeTaskState(TaskTypeDef.DayTask, _singleData.missionId, SingleDailyMissionState.GetFinish)
UIManager.OpenPanel(UIName.RewardItemPopup,msg.drop,1)
self:OnShowData()
end)
else
end
end
--界面关闭时调用(用于子类重写)
function MissionDailyPanel:OnClose()
FightPointPassManager.isBeginFight = false
end
--界面销毁时调用(用于子类重写)
function MissionDailyPanel:OnDestroy()
allMissionDailyPres = {}
allMissionDailyItemPres = {}
boxList = {}
allMissionDailyBoxItemPres = {}
end
function MissionDailyPanel: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
return MissionDailyPanel