local UIAchievementPandect = UIViewClass() local EventSystem = require('Event/EventSystem') local ScoreStr = "%d/%d" ------------------------------- 系统函数 ---------------------------- function UIAchievementPandect:OnCreated() self.progressMat = self.img_ProgressBar.material self.rewardTable = nil end function UIAchievementPandect:OnOpened(context) self:RegistSystemEvent(EventID.UI_AchievementPandect_Refresh, self.RefreshPanel) self:RegistSystemEvent(EventID.UI_Achievement_RefreshRedPoint, self.RefreshRedPoint) self:RefreshPanel() self:RefreshRedPoint() end function UIAchievementPandect:OnCellInit(scrollRect, index, cellTable, data) if scrollRect == self.Loop_Horizontal_Scroll_Rect then local mainAchievement = MDL.Achievement.GetMainAchievement(data) local cfg = DataSheetManager.AchievementType:GetDataByMainType_ChildType(data, 0) if mainAchievement and cfg then UIUtils.SetImageByAssetBundle(cellTable.img_Icon, cfg.Icon) UIUtils.SetLabelText(cellTable.txt_Title, Const_IDS[cfg.TypeName]) local curScore, amountScore = mainAchievement.curScore, mainAchievement.amountScore cellTable.slider_XP.value = curScore / amountScore UIUtils.SetLabel(cellTable.txt_Score, string.format(ScoreStr, curScore, amountScore)) end end end function UIAchievementPandect:OnCellClicked(scrollRect, index, cellTable, target, data) if scrollRect == self.Loop_Horizontal_Scroll_Rect then EventSystem.Dispatch(EventID.UI_AchievementBase_Refresh, data) end end function UIAchievementPandect:OnButtonClicked(comp) if comp == self.btn_Reward then -- 显示奖励预览 UIManager.OpenView(Const_UI_Lua.UIEnum.UIAchievementReward) else if self.rewardItemTable then for i, v in ipairs (self.Content) do if comp == v.event_Click then UTL.ItemTips.ShowCommonTipsById(self.rewardItemTable[i].ItemID) break end end end end end ---------------------------------------------------------------------- function UIAchievementPandect:RefreshPanel(mainType) local curLevel = MDL.Achievement.GetCurAchievementLevel() local cfg = DataSheetManager.AchievementData:GetDataByID(curLevel) local __, nextCfg = DataSheetManager.AchievementData:TryGetDataByID(curLevel + 1) UIUtils.SetImageByAssetBundle(self.img_Icon, cfg.Icon) UIUtils.SetActive(self.img_Star_01, cfg.Star >= 1) UIUtils.SetActive(self.img_Star_02, cfg.Star >= 2) UIUtils.SetActive(self.img_Star_03, cfg.Star >= 3) UIUtils.SetLabelText(self.txt_Now, Const_IDS[cfg.AchievementTitle]) if not nextCfg then UIUtils.SetLabel(self.txt_Score, string.format(ScoreStr, MDL.Achievement.GetCurAchievementScore(), cfg.Score)) self.progressMat:SetFloat("_Percent", 1) UIUtils.SetLabelText(self.txt_Nest, Const_IDS["IDS_Achievement_MaxLevelDes"]) else UIUtils.SetLabel(self.txt_Score, string.format(ScoreStr, MDL.Achievement.GetCurAchievementScore(), nextCfg.Score)) self.progressMat:SetFloat("_Percent", MDL.Achievement.GetCurAchievementScore() / nextCfg.Score) UIUtils.SetLabel(self.txt_Nest, string.FormatByIdsId(Const_IDS["IDS_Achievement_NextLevelDes"], UIUtils.GetLocalizedTxt(Const_IDS[nextCfg.AchievementTitle]))) end -- 奖励显示 local rewardCfg = nextCfg and DataSheetManager.AchievementReward:GetDataByID(nextCfg.AchievementReward) or nil self.rewardItemTable = rewardCfg and rewardCfg.Item_Table or nil UIUtils.SetActive(self.Content.gameObject, self.rewardItemTable ~= nil) if self.rewardItemTable then for i, rewardData in ipairs(self.rewardItemTable) do local contentItem = self.Content[i] if not contentItem then contentItem = self:InstantiateCollection(self.Content, self.itemTemplate_Reward.gameObject) end UTL.Item.SetItemCell(contentItem, rewardData.ItemID, rewardData.ItemNum) UIUtils.SetActive(contentItem.gameObject, true) end for i = #self.rewardItemTable + 1, #self.Content do UIUtils.SetActive(self.Content[i].gameObject, false) end end -- 分类成就显示 if self.Loop_Horizontal_Scroll_Rect.Count == 0 then local showTypes = MDL.Achievement.GetAchievementShowTypes() for i = 2, #showTypes do local showType = showTypes[i] self.Loop_Horizontal_Scroll_Rect:AddData(showType.typeID, 0) end else -- 刷新分类 if mainType then local showTypes = MDL.Achievement.GetAchievementShowTypes() local l = 2 local r = #showTypes while (l <= r) do local mid = math.floor((l + r) / 2) if showTypes[mid].typeID == mainType then self.Loop_Horizontal_Scroll_Rect:UpdateIndex(mid - 2) return end if showTypes[mid].typeID > mainType then r = mid - 1 else l = mid + 1 end end end end end function UIAchievementPandect:RefreshRedPoint() self.btn_Reward:SetRedPoint(MDL.Achievement.IsShowAchievementLevelRewardRedPoint()) end return UIAchievementPandect