local UITaskMainPanel = UIViewClass() function UITaskMainPanel:OnCreated() self.tabList = {} self.obj_TaskDetail = self.obj_TaskDetail.gameObject self.obj_ChapterDetail = self.obj_ChapterDetail.gameObject self.obj_WithTask = self.obj_WithTask.gameObject self.obj_Reward = self.obj_Reward.gameObject end function UITaskMainPanel:OnOpened() self.currentData = nil self.group_TypeTab:SelectIndex(0) self:RegistSystemEvent(EventID.UI_Task_Update, self.UpdateTaskLevelList) UIUtils.SetLabelText(self.UICommonPopUp.txt_Title,Const_IDS.IDS_GoldHeroActivity_ActivityLevel_TaskHint1) end --region -************ left *************- function UITaskMainPanel:UpdateTaskLevelList() self.scroll_Panel:ClearCells() local currentType = self.curSelectTabType if not currentType then return end local list = MDL.Task.Level_GetTaskSheetList(currentType) if not list or #list == 0 then UIUtils.SetActive(self.obj_WithTask,false) return end local enum_Type = MDL.Task.Enum_TaskType UIUtils.SetActive(self.obj_WithTask,true) if currentType == enum_Type.Major then self:UpdateMajorTaskLevelList(list) elseif currentType == enum_Type.Branch then self:UpdateBranchTaskLevelList(list) end end function UITaskMainPanel:UpdateMajorTaskLevelList(list) local count = #list local initShow for i,sheet in pairs(list) do sheet.Unfold = i == count self.scroll_Panel:AddData(sheet,0) if sheet.Unfold then initShow = sheet for ii, data in ipairs(sheet.List) do data.Unfold = true if data.Task then self.scroll_Panel:AddData(data, 1) end end else for ii, data in ipairs(sheet.List) do data.Unfold = false end end end self:ShowDetail(initShow) end function UITaskMainPanel:UpdateBranchTaskLevelList(list) local initShow for i,sheet in ipairs(list) do sheet.Unfold = true self.scroll_Panel:AddData(sheet,0) if sheet.Unfold then for ii, data in ipairs(sheet.List) do if not initShow then initShow = data end self.scroll_Panel:AddData(data,1) end end end self:ShowDetail(initShow) end --endregion left --region -************ center *************- function UITaskMainPanel:ShowDetail(data) self.currentData = nil if not data then UIUtils.SetActive(self.obj_TaskDetail,false) UIUtils.SetActive(self.obj_ChapterDetail,false) return end self.currentData = data.List[1] local curData = data.List[1] if curData.ChapterData then local Task = curData.Task if Task then local childData = Task.taskChildData if childData[1].CompleteCondition == 102 then self:ShowTaskDetailWithTime(Task) else self.cdTimer:EndTimer() UIUtils.SetActive(self.labLocal_TaskDescribe, true) self:ShowTaskDetail(Task.TaskData) end else self:ShowChapterDetail(curData.ChapterData) end elseif curData.TaskData then self:ShowTaskDetail(curData.TaskData) end end function UITaskMainPanel:ShowTaskDetailWithTime(task) local endTime = task.taskInfo.childInfo[1].autoFinishTime endTime = endTime - UTL.Time.GetServerTimestamp() self.cdTimer:ResetAndBeginCustomTimer(false, endTime + UTL.Time.TotalSecondsOneMinute, 0, UIUtils.GetLocalizedTxt(Const_IDS[task.taskChildData[1].Des]), 1) UIUtils.SetActive(self.labLocal_TaskDescribe, false) self:ShowTaskDetail(task.TaskData) self.countDownTime = endTime self.countDownTaskInfo = task.taskInfo if self.countDownTime > 0 then self:StartRepeatFunc(self.OnUpdateFun, endTime) else self:StopRepeatFunc(self.OnUpdateFun) end end function UITaskMainPanel:OnUpdateFun(deltaTime, timeSinceUpdate) self:StopRepeatFunc(self.OnUpdateFun) MDL.Task.TaskClientTimeFinishRequest(self.countDownTaskInfo.taskMainId, self.countDownTaskInfo.childInfo[1].taskChildId) end function UITaskMainPanel:ShowTaskDetail(taskData) UIUtils.SetActive(self.obj_TaskDetail,true) UIUtils.SetActive(self.obj_ChapterDetail,false) UIUtils.SetLabelText(self.labLocal_TaskTarget, Const_IDS[taskData.Aim]) -- 任务目标 UIUtils.SetLabelText(self.labLocal_TaskDescribe,Const_IDS[taskData.Desc]) -- 任务描述 if taskData.RewardShow_Table and #taskData.RewardShow_Table > 0 then UIUtils.SetActive(self.obj_Reward,true) self.scroll_RewardPanel:ClearCells() for i, reward in ipairs(taskData.RewardShow_Table) do self.scroll_RewardPanel:AddData(reward,0) end else UIUtils.SetActive(self.obj_Reward,false) end end function UITaskMainPanel:ShowChapterDetail(chapterData) UIUtils.SetActive(self.obj_TaskDetail,false) UIUtils.SetActive(self.obj_ChapterDetail,true) UIUtils.SetLabelText(self.labLocal_ChapterBgContent,Const_IDS[chapterData.BGContent]) end --endregion center --region -************ right *************- function UITaskMainPanel:UpdateTaskTypeTab(index) self.curSelectTabType = MDL.Task.List_TaskType[index + 1] self:UpdateTaskLevelList() end --endregion right --region -************ cell *************- function UITaskMainPanel:ChangeFoldState_Sheet(sheet,index) sheet.Unfold = not sheet.Unfold if sheet.Unfold then local insertIndex = index for i, v in ipairs(sheet.List) do if v.Task then insertIndex = insertIndex + 1 self.scroll_Panel:InsertData(insertIndex, v, 1) end end else --local count = #sheet.List local removeIndex = 1 + index for i, v in ipairs(sheet.List) do if v.Task then self.scroll_Panel:RemoveIndex(removeIndex) end end end end function UITaskMainPanel:ChangeFoldState_Chapter(chapter,index) chapter.Unfold = not chapter.Unfold if chapter.Unfold then if chapter.Task then self.scroll_Panel:InsertData(index + 1,chapter.Task,1) end else if chapter.Task then self.scroll_Panel:RemoveIndex(index + 1) end end end function UITaskMainPanel:OnCellInit(scrollRect, index, cellTable, data) if scrollRect == self.scroll_Panel then if data.Task then UIUtils.SetLabelText(cellTable.labLocal_Task,Const_IDS[data.Task.TaskData.Brief]) elseif data.SheetData then if data.Unfold then self.SelectSheetData = data self.SelectSheetCell = cellTable end local isShowArrow = data.List[1].Task ~= nil UIUtils.SetActive(cellTable.UnCheckmark02.gameObject, isShowArrow) UIUtils.SetActive(cellTable.Checkmark02.gameObject, isShowArrow) cellTable.obj_Check = cellTable.obj_Check.gameObject cellTable.obj_UnCheck = cellTable.obj_UnCheck.gameObject UIUtils.SetActive(cellTable.obj_Check,data.Unfold) UIUtils.SetActive(cellTable.obj_UnCheck,not data.Unfold) UIUtils.SetLabelText(cellTable.lab_UnSelectMain,Const_IDS[data.SheetData.Name]) UIUtils.SetLabelText(cellTable.labLocal_Sheet,Const_IDS[data.SheetData.Name]) end elseif scrollRect == self.scroll_RewardPanel then UTL.Item.SetItemCell(cellTable.item, data.ItemID, data.ItemNum) end end function UITaskMainPanel:GetIndexNum(sheet) local index = 0 for i, v in ipairs(sheet.List) do if v.Task and v.Unfold then index = index + 1 end end return index end function UITaskMainPanel:GetSheetIndex(sheetData) local currentType = self.curSelectTabType local list = MDL.Task.Level_GetTaskSheetList(currentType) local index = 0 for i,sheet in pairs(list) do index = index + 1 if sheet == sheetData then return index end end return index end function UITaskMainPanel:OnCellClicked(scrollRect, index, cellTable, target, data) if scrollRect == self.scroll_Panel then if target == cellTable.event_Cell then --先添加新的 self:ChangeFoldState_Sheet(data,index) UIUtils.SetActive(cellTable.obj_Check,data.Unfold) UIUtils.SetActive(cellTable.obj_UnCheck,not data.Unfold) --再删除旧的 if self.SelectSheetData then local selectIndex = self:GetSheetIndex(self.SelectSheetData) - 1 if selectIndex ~= index then --新增项在删除项之前,需要加上新增的index if index < selectIndex then local addIndex = self:GetIndexNum(data) self:ChangeFoldState_Sheet(self.SelectSheetData,selectIndex + addIndex) else self:ChangeFoldState_Sheet(self.SelectSheetData,selectIndex) end UIUtils.SetActive(self.SelectSheetCell.obj_Check,false) UIUtils.SetActive(self.SelectSheetCell.obj_UnCheck,true) end end if data.Unfold then self.SelectSheetData = data self.SelectSheetCell = cellTable else self.SelectSheetData = nil self.SelectSheetCell = nil end self:ShowDetail(data) end elseif scrollRect == self.scroll_RewardPanel then if target == cellTable.item.event_Click then UTL.ItemTips.ShowCommonTipsById(data.ItemID) end end end --endregion cell function UITaskMainPanel:OnValueChanged(obj, index) self:UpdateTaskTypeTab(index) end function UITaskMainPanel:OnBackButtonPressed() self:OnButtonClicked(self.UICommonPopUp.btn_Close) end function UITaskMainPanel:OnButtonClicked(obj) if obj == self.UICommonPopUp.btn_Close then self:CloseView() elseif obj == self.event_Task then if self.currentData then if self.currentData.Task then CTL.Task.DoTask(self.currentData.Task) elseif self.currentData.TaskData then CTL.Task.DoTask(self.currentData) end end self:CloseView() end end return UITaskMainPanel