--国战 悬赏任务 local UICountryWantedTask = UIViewClass() local TaskStarImageAtlas = "UI_Country" --任务星级底图 local TaskStarImageBg = { [1] = "xsrw_bg_lan",--蓝 [2] = "xsrw_bg_zi",--紫 [3] = "xsrw_bg_cheng",--橙 [4] = "xsrw_bg_hong",--红 [5] = "xsrw_bg_jin",--金 } local MaxStar = 5 local UIState = { NotReceived = 0, Finished = 1, Doing = 2, } function UICountryWantedTask:OnOpened(context) UIUtils.SetLabelText(self.UITemplateTitlePanel.lab_Title, Const_IDS["IDS_WantedTask_Title"]) self:RegistSystemEvent(EventID.Country_WantedTask_RefreshTaskInfo,self.RefreshTaskInfo) --刷新任务信息 self:RegistSystemEvent(EventID.Country_WantedTask_RefreshShareState,self.RefreshShareState) --刷新共享状态 self:RegistSystemEvent(EventID.New_Day_Refresh, self.OnBackButtonPressed) --隔天刷新时关闭 self:RefreshTaskInfo() end function UICountryWantedTask:OnBackButtonPressed() self:OnButtonClicked(self.UITemplateTitlePanel.btn_close) UIManager.CloseView(Const_UI_Lua.UIEnum.UICommonThirdPopup) end function UICountryWantedTask:OnButtonClicked(comp) if comp == self.UITemplateTitlePanel.btn_close then self:CloseView() elseif comp == self.UITemplateTitlePanel.btn_Home then CTL.HomeMain.CloseViewBackHomeMain() elseif comp == self.UITemplateTitlePanel.btn_Info then --玩法说明 local DayRefreshTimeId = 1 --每日刷新时间类型ID local desc, timeStr = UTL.Time.GetDateDescAndTime({ [1] = DayRefreshTimeId }) UIManager.OpenView(Const_UI_Lua.UIEnum.UICommonNoteView, { id = LuaConst.NoteID.CountryWantedTask, params = { timeStr } }) elseif comp == self.btn_ReceiveTask then if self.uiState == UIState.NotReceived then MDL.CountryWantedTask.WantedTaskQuickReceiveReq(MDL.CountryWantedTask.ReceiveType.ReceiveAndShare)--一键接取并自动共享 MDL.CountryWantedTask.WantedTaskPanelReq()--刷任务状态 elseif self.uiState == UIState.Doing then if CTL.CountryWantedTask.CanShare() then MDL.CountryWantedTask.WantedTaskQuickReceiveReq(MDL.CountryWantedTask.ReceiveType.Share)--只是共享 else CTL.Tips.AddTipsMsg(Const_IDS.IDS_WantedTask_ShareNoTeam) end else CTL.Tips.AddTipsMsg(Const_IDS.IDS_WantedTask_NoTaskShare)--无悬赏任务可共享 end end end function UICountryWantedTask:OnCellInit(scrollRect, index, cellTable, data) if scrollRect == self.scroll_Wanted then local taskWantedData = MDL.CountryWantedTask.GetTaskWantedByID(data.wantedTaskId) --父任务标题 local taskFatherData = DataSheetManager.TaskFatherData:GetDataByID(taskWantedData.TaskFatherID) if taskFatherData ~= nil then cellTable.UIScrollText2:SetText(UIUtils.GetLocalizedTxt(Const_IDS[taskFatherData.Brief])) end --星级显示 for i,v in ipairs(cellTable.group_Star) do UIUtils.SetActive(cellTable.group_Star[i],i <= taskWantedData.TaskQuality) end --星级底图 UTL.Item.SetAtlasSprite(cellTable.img_quality, TaskStarImageAtlas, TaskStarImageBg[taskWantedData.TaskQuality]) --最大星级显示 UIUtils.SetActive(cellTable.group_Many,taskWantedData.TaskQuality == MaxStar) --任务奖励展示 local rewardShowData = DataSheetManager.RewardClientShow:GetDataByClientShowID(taskWantedData.RewardShowID) if rewardShowData == nil then logging.error(LTAG.ERROR,"RewardClientShow not find data",taskWantedData.RewardShowID) else local itemTable = DataSheetUtil.GetRewardClientShowItemTable(rewardShowData) for i, v in ipairs(itemTable) do local contentItem = cellTable.Content[i] if not contentItem then contentItem = self:InstantiateCellCollection(cellTable.cell.gameObject, cellTable.Content, self.cellRewardItemTemplate.gameObject) end UTL.Item.SetItemCell(contentItem.UIItem, v.ItemID, v.ItemNum) UIUtils.SetActive(contentItem.gameObject, true) end for i = #itemTable + 1, #cellTable.Content do UIUtils.SetActive(cellTable.Content[i].gameObject, false) end end --子任务内容 local taskChildData = DataSheetManager.TaskChildData:GetDataByTaskLineID_TaskChildID(taskWantedData.TaskFatherID,taskWantedData.CollectTaskChild) if taskChildData then UIUtils.SetLabelText(cellTable.txt_TargetInfo, Const_IDS[taskChildData.Des]) else logging.error(LTAG.ERROR,"TaskChildData:GetDataByTaskLineID_TaskChildID not find",taskWantedData.TaskFatherID,taskWantedData.CollectTaskChild) end --调试日志 --logging.error(LTAG.ERROR,"taskWantedData.TaskFatherID",taskWantedData.TaskFatherID,taskWantedData.TaskType,UIUtils.GetLocalizedTxt(Const_IDS[taskChildData.Des])) --任务按钮 状态 local uiState = self:GetTaskUIState(data.state) cellTable.group_State:SetState(uiState) end end function UICountryWantedTask:OnCellClicked(scrollRect, index, cellTable, target, data) if scrollRect == self.scroll_Wanted then --任务道具点击 local taskWantedData = MDL.CountryWantedTask.GetTaskWantedByID(data.wantedTaskId) local rewardShowData = DataSheetManager.RewardClientShow:GetDataByClientShowID(taskWantedData.RewardShowID) for i, v in ipairs(cellTable.Content) do if v.UIItem.event_Click == target then UTL.ItemTips.ShowCommonTipsById(rewardShowData.ItemID[i]) break end end end end --刷新任务信息和按钮状态 function UICountryWantedTask:RefreshTaskInfo() local taskInfos = MDL.CountryWantedTask.GetTaskInfos() if taskInfos == nil then return end self.scroll_Wanted:ClearCells() self.scroll_Wanted:ReloadAll(taskInfos) self:RefreshShareState() end function UICountryWantedTask:RefreshShareState() local taskInfos = MDL.CountryWantedTask.GetTaskInfos() if taskInfos == nil then return end local uiState = UIState.Finished -- 初始设置为都完成了,无法共享 for _, v in ipairs(taskInfos) do local taskState = self:GetTaskUIState(v.state) if taskState == UIState.NotReceived then uiState = UIState.NotReceived -- 有一个未接取就都未接取,不用继续判断了 break elseif taskState == UIState.Doing then --接取的情况下,有一个未完成的就可以分享,不用继续判断了 uiState = UIState.Doing break end end self:StopRepeatFunc(self.OnUpdateFun) if uiState == UIState.Doing then local cdTime = MDL.CountryWantedTask.GetShareCDTime() if cdTime > 0 then --CD中 self.state_Btn:SetState(3) self.btn_ReceiveTask:SetGray(true) local showStr = UIUtils.GetLocalizedTxt(Const_IDS.IDS_WantedTask_ShareTask) .. "({0})" self.txt_time:SetCustomString(showStr, 1, 10) self.txt_time:ResetAndBeginTimer(false, cdTime) self:StartRepeatFunc(self.OnUpdateFun, 0.5) else --非CD中,可以点共享 self.state_Btn:SetState(2) self.btn_ReceiveTask:SetGray(false) end else self.state_Btn:SetState(uiState) self.btn_ReceiveTask:SetGray(uiState == UIState.Finished, true) end self.uiState = uiState end function UICountryWantedTask:OnUpdateFun(_, timeSinceUpdate) local cdTime = MDL.CountryWantedTask.GetShareCDTime() if cdTime < 0 then self:RefreshShareState() end end function UICountryWantedTask:GetTaskUIState(state) if state == MDL.CountryWantedTask.WantedTaskState.Done then return UIState.Finished elseif state == MDL.CountryWantedTask.WantedTaskState.Doing or state == MDL.CountryWantedTask.WantedTaskState.ChildDone then return UIState.Doing else return UIState.NotReceived end end return UICountryWantedTask