322 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Lua
		
	
			
		
		
	
	
			322 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)
 | 
						||
    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,-5))
 | 
						||
    this.ScrollView.moveTween.MomentumAmount = 1
 | 
						||
    this.ScrollView.moveTween.Strength = 1
 | 
						||
    this.NoviceItemList={}--存储itemview 重复利用
 | 
						||
 | 
						||
    this.boxItemGrid = Util.GetGameObject(gameObject, "rewardBg/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, "rewardBg/RewardPanel/getInfo")
 | 
						||
    this.RewardPanelGrid = Util.GetGameObject(gameObject, "rewardBg/RewardPanel/ViewRect/grid")
 | 
						||
    this.RewardPanel = Util.GetGameObject(gameObject, "rewardBg/RewardPanel")
 | 
						||
    this.rewardMaskBtn = Util.GetGameObject(gameObject, "rewardBg/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, "rewardBg/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()
 | 
						||
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()
 | 
						||
    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)   
 | 
						||
    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
 | 
						||
    if isPlayAnim then
 | 
						||
        _go:SetActive(false)
 | 
						||
    else
 | 
						||
        _go:SetActive(true)
 | 
						||
    end
 | 
						||
    local titleText = Util.GetGameObject(_go, "titleImage/titleText"):GetComponent("Text")
 | 
						||
    titleText.text =string.format(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.9,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)
 | 
						||
    getRewardProgress:SetActive(state ~= SingleDailyMissionState.Finish)
 | 
						||
    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()
 | 
						||
                -- 检测红点状态
 | 
						||
                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[11361]..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[11362]..curConfig.Values[2][1]..Language[11363]
 | 
						||
 | 
						||
        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
 | 
						||
        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()
 | 
						||
            end)
 | 
						||
            this.timer:Stop()   
 | 
						||
            this.timer = nil
 | 
						||
            btn:GetComponent("Button").enabled = true
 | 
						||
        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()
 | 
						||
    allMissionDailyPres = {}
 | 
						||
    allMissionDailyItemPres = {}
 | 
						||
    boxList = {}
 | 
						||
    allMissionDailyBoxItemPres = {}
 | 
						||
end
 | 
						||
 | 
						||
return this |