local UISubjectMonthRogueLevel = UIViewClass() local RankType = { Rank = 1, Reward = 2, } local RefinedHintTime = "UISubjectMonthRogueLevel_RefinedHintTime" local BG_Path = ConstAssetPathConfig.BG_Path function UISubjectMonthRogueLevel:OnOpened(context) self:RegistSystemEvent(EventID.UI_SubjectMonth_UpdateRankInfo, self.RefreshLeftPanel) self:RegistSystemEvent(EventID.UI_SubjectMonth_Rogue_UpdateInfo, self.RefreshLevel) self:RegistSystemEvent(EventID.UI_SubjectMonth_Rogue_UpdateInfo, self.RefreshPointLimits) UIUtils.SetActive(self.Level_Popup, false) UIUtils.SetLabelText(self.lab_RankSettlement, Const_IDS.IDS_ActivityBossFight_Hint_4) self:Init() end function UISubjectMonthRogueLevel:Init() self.modeId = CTL.SubjectMonth.GetSubActivityModeId(MDL.SubjectMonth.SubActivityType.Rogue) local cfg = DataSheetManager.VersionsRoguelikeData:GetDataByRoguelikeModeID(self.modeId) self.levelList = cfg.RoguelikeID local latestUnlockLevel = CTL.Rogue.GetLatestUnlockLevel() local index = 1 for i,v in ipairs(self.levelList) do if latestUnlockLevel == v then index = i break end end self:RefreshLevelPopupPanel() self:SelectLevel(index) self:RefreshPointLimits() UTL.Toggle.InitToggleGroupByIDS(self.toggle_UpGroup, "txt_TabName", {Const_IDS.IDS_VersionsActivity_Roguelike_Hint18, Const_IDS.IDS_OfflineSoloFight_Reward}) self.toggle_UpGroup:SelectIndex(0) self:StartRepeatFunc(self.OnUpdateFun, 5) end function UISubjectMonthRogueLevel:RefreshPointLimits() local points = MDL.Rogue.GetBattlePassPoint() local pointsLimit = CTL.Rogue.GetPointsLimit() local color = UTL.Color.White if points >= pointsLimit then points = pointsLimit color = UTL.Color.Red end local str = UTL.Color.FormatTextByColor(color, string.format("%s/%s", points, pointsLimit)) UIUtils.SetLabel(self.txt_number, str) end function UISubjectMonthRogueLevel:OnUpdateFun(deltaTime, timeSinceUpdate) if self.rankType == RankType.Rank then MDL.SubjectMonth.GetSubjectMonthRankRecordReq(MDL.SubjectMonth.SubActivityType.Rogue, self.level) end end function UISubjectMonthRogueLevel:OnValueChanged(comp, value) if comp == self.toggle_UpGroup then self.rankType = value + 1 MDL.SubjectMonth.GetSubjectMonthRankRecordReq(MDL.SubjectMonth.SubActivityType.Rogue, self.level) self:RefreshLeftPanel() self.scroll_Rank:MoveIndex(0) end end function UISubjectMonthRogueLevel:RefreshLevel() self.modeId = CTL.SubjectMonth.GetSubActivityModeId(MDL.SubjectMonth.SubActivityType.Rogue) local cfg = DataSheetManager.VersionsRoguelikeData:GetDataByRoguelikeModeID(self.modeId) self.levelList = cfg.RoguelikeID self:RefreshLeftPanel() self:RefreshRightPanel() end function UISubjectMonthRogueLevel:SelectLevel(index) if index <= 0 then index = #self.levelList elseif index >= #self.levelList + 1 then index = 1 end self.curIndex = index for i, v in ipairs(self.levelList) do if i == index then self.level = v break end end MDL.SubjectMonth.GetSubjectMonthRankRecordReq(MDL.SubjectMonth.SubActivityType.Rogue, self.level) self:RefreshLevel() self.scroll_Rank:MoveIndex(0) end function UISubjectMonthRogueLevel:RefreshLeftPanel() if self.rankType == RankType.Rank then self.state_RankReward:SetState(0) self:RefreshRank() elseif self.rankType == RankType.Reward then self.state_RankReward:SetState(1) self:RefreshReward() end self:RefreshMyRank() local leftTime = CTL.Rogue.GetShowSettlementTipsLeftTime(self.level) self:StopRepeatFunc(self.ShowSettlementTips) UIUtils.SetActive(self.lab_RankSettlement.gameObject, false) if leftTime >= 0 then self:StartRepeatFunc(self.ShowSettlementTips, leftTime, 1) end end function UISubjectMonthRogueLevel:ShowSettlementTips(deltaTime, timeSinceUpdate) UIUtils.SetActive(self.lab_RankSettlement.gameObject, true) end function UISubjectMonthRogueLevel:RefreshRank() local state = CTL.Rogue.GetLevelState(self.level) if state == CTL.Rogue.LevelState.Unavailable then self.state_Rank:SetState(0) else local rankInfo = MDL.SubjectMonth.GetRankListInfo(MDL.SubjectMonth.SubActivityType.Rogue, self.level) if not rankInfo or not IsProtoDataNotNil(rankInfo) or #rankInfo == 0 then self.state_Rank:SetState(1) UIUtils.SetActive(self.scroll_Rank.gameObject, false) else self.state_Rank:SetState(2) UIUtils.SetActive(self.scroll_Rank.gameObject, true) self.scroll_Rank:ReloadAll(rankInfo) end end end function UISubjectMonthRogueLevel:RefreshMyRank() local state = CTL.Rogue.GetLevelState(self.level) if state == CTL.Rogue.LevelState.Unavailable then UIUtils.SetActive(self.gourp_MyRankInfo.gameObject, false) else UIUtils.SetActive(self.gourp_MyRankInfo.gameObject, true) local myRankInfo = MDL.SubjectMonth.GetMyRankInfo(MDL.SubjectMonth.SubActivityType.Rogue, self.level) if not IsProtoDataNotNil(myRankInfo) or myRankInfo.index == 0 then self.state_MyRewardItems:SetState(0) UIUtils.SetLabelText(self.txt_MyRank, Const_IDS["IDS_FightThrone_None"]) UIUtils.SetLabel(self.txt_MyPoints, (myRankInfo and myRankInfo.param1) and myRankInfo.param1 or "--") else local index = myRankInfo.index UIUtils.SetLabel(self.txt_MyRank, index) UIUtils.SetLabel(self.txt_MyPoints, myRankInfo.param1) local rewardRepeat for _, v in DataSheetManager.VersionsRoguelikeRankReward:GetEnumerator() do if v.RoguelikeID == self.level and index >= v.RankMin and index <= v.RankMax then rewardRepeat = v.RewardRepeat end end if rewardRepeat then self.state_MyRewardItems:SetState(1) local cfg = DataSheetManager.VersionsActivityReward:GetDataByAttrRepeatID(rewardRepeat) for i, v in ipairs(cfg.Item_Table) do local item = self.group_Items[i] if not item then item = self:InstantiateCollection(self.group_Items, self.group_Items[1].gameObject) end UIUtils.SetActive(item.gameObject, true) UTL.Item.SetItemCell(item, v.ItemID, v.ItemNum) end for i = #cfg.Item_Table + 1, #self.group_Items do UIUtils.SetActive(self.group_Items[i], false) end else self.state_MyRewardItems:SetState(0) end end end end function UISubjectMonthRogueLevel:RefreshReward() if self.scroll_Reward.Count > 0 then self.scroll_Reward:ClearCells() end for _, v in DataSheetManager.VersionsRoguelikeRankReward:GetEnumerator() do if v.RoguelikeID == self.level then self.scroll_Reward:AddData(v, 0) end end end function UISubjectMonthRogueLevel:RefreshRightPanel() local levelId = DataSheetManager.VersionsRoguelikeLevel:GetDataByID(self.level).LevelID local rogueLevelData = DataSheetManager.RogueLevelData:GetDataByLevelID(levelId) string.format(BG_Path, rogueLevelData.MapIcon) UIUtils.SetTextureByAssetBundle(self.rawImg_LevelBg, string.format(BG_Path, rogueLevelData.MapIcon)) UIUtils.SetLabelText(self.txt_LevelName, Const_IDS[rogueLevelData.LevelNameIDS]) local startNum = MDL.Rogue.GetLevelStarNum(self.level) for i, v in ipairs(self.starGroup) do UIUtils.SetActive(v, startNum >= i) end local state, leftTime = CTL.Rogue.GetLevelState(self.level) if state == CTL.Rogue.LevelState.Unlock then self.state_Btn:SetState(2) elseif state == CTL.Rogue.LevelState.Unavailable then self.state_Btn:SetState(0) local dayStr = string.FormatByIdsId(Const_IDS.IDS_VersionsActivity_Roguelike_Hint1, UIUtils.GetLocalizedTxt(Const_IDS.IDS_DirectGift_TimeHint_1)) local hourStr = string.FormatByIdsId(Const_IDS.IDS_VersionsActivity_Roguelike_Hint1, UIUtils.GetLocalizedTxt(Const_IDS.IDS_DirectGift_TimeHint_2)) local minStr = string.FormatByIdsId(Const_IDS.IDS_VersionsActivity_Roguelike_Hint1, UIUtils.GetLocalizedTxt(Const_IDS.IDS_DirectGift_TimeHint_3)) local secStr = string.FormatByIdsId(Const_IDS.IDS_VersionsActivity_Roguelike_Hint1, UIUtils.GetLocalizedTxt(Const_IDS.IDS_DirectGift_TimeHint_4)) self.txt_Lock:SetDHMSStr(dayStr, hourStr, minStr, secStr) self.txt_Lock:ResetAndBeginCustomTimer(false, leftTime, 0, nil, 1) elseif state == CTL.Rogue.LevelState.PreviousLevelIncomplete then self.state_Btn:SetState(1) UIUtils.SetLabelText(self.txt_Condition, Const_IDS.IDS_VersionsActivity_Roguelike_Hint7) end local isSettled, leftTime = CTL.Rogue.GetRankSettlementCountdown(self.level) if isSettled == false and state ~= CTL.Rogue.LevelState.Unavailable then UIUtils.SetActive(self.txt_SettlementCountdown.gameObject, true) local dayStr = string.FormatByIdsId(Const_IDS.IDS_VersionsActivity_RankSettlement, UTL.Color.FormatGreenColor(UIUtils.GetLocalizedTxt(Const_IDS.IDS_DirectGift_TimeHint_1))) local hourStr = string.FormatByIdsId(Const_IDS.IDS_VersionsActivity_RankSettlement, UTL.Color.FormatGreenColor(UIUtils.GetLocalizedTxt(Const_IDS.IDS_DirectGift_TimeHint_2))) local minStr = string.FormatByIdsId(Const_IDS.IDS_VersionsActivity_RankSettlement, UTL.Color.FormatGreenColor(UIUtils.GetLocalizedTxt(Const_IDS.IDS_DirectGift_TimeHint_3))) local secStr = string.FormatByIdsId(Const_IDS.IDS_VersionsActivity_RankSettlement, UTL.Color.FormatGreenColor(UIUtils.GetLocalizedTxt(Const_IDS.IDS_DirectGift_TimeHint_4))) self.txt_SettlementCountdown:SetDHMSStr(dayStr, hourStr, minStr, secStr) self.txt_SettlementCountdown:ResetAndBeginCustomTimer(false, leftTime, 0, nil, 1) else UIUtils.SetActive(self.txt_SettlementCountdown.gameObject, false) end self:RefreshRedPoint() end function UISubjectMonthRogueLevel:RefreshRedPoint() self.btn_Star:SetRedPoint(CTL.Rogue.CanReceiveAnyStarRewardByLevel(self.level)) local last, next = false, false for _, v in ipairs(self.levelList) do if CTL.Rogue.CanReceiveAnyStarRewardByLevel(v) then if v < self.level then last = true end if v > self.level then next = true end end end self.btn_Last:SetRedPoint(last) self.btn_Next:SetRedPoint(next) end function UISubjectMonthRogueLevel:RefreshLevelPopupPanel() if self.scroll_Level.Count > 0 then self.scroll_Level:ClearCells() end for _, v in ipairs(self.levelList) do self.scroll_Level:AddData(v, 0) end end function UISubjectMonthRogueLevel:OnCellInit(scrollRect, index, cellTable, data) if scrollRect == self.scroll_Level then local levelId = DataSheetManager.VersionsRoguelikeLevel:GetDataByID(data).LevelID local rogueLevelData = DataSheetManager.RogueLevelData:GetDataByLevelID(levelId) UIUtils.SetLabelText(cellTable.txt_Choice, Const_IDS[rogueLevelData.LevelNameIDS]) elseif scrollRect == self.scroll_Reward then if data.RankMin == data.RankMax then UIUtils.SetLabel(cellTable.txt_Rank, data.RankMin) else UIUtils.SetLabel(cellTable.txt_Rank, string.format("%s-%s", data.RankMin, data.RankMax)) end local cfg = DataSheetManager.VersionsActivityReward:GetDataByAttrRepeatID(data.RewardRepeat) for i, v in ipairs(cfg.Item_Table) do local item = cellTable.group_Items[i] if not item then item = self:InstantiateCellCollection(cellTable.cell.gameObject, cellTable.group_Items, cellTable.group_Items[1].gameObject) end UIUtils.SetActive(item.gameObject, true) UTL.Item.SetItemCell(item, v.ItemID, v.ItemNum) end for i = #cfg.Item_Table + 1, #cellTable.group_Items do UIUtils.SetActive(cellTable.group_Items[i], false) end elseif scrollRect == self.scroll_Rank then UIUtils.SetLabel(cellTable.txt_Rank, data.index) UIUtils.SetLabel(cellTable.txt_Name, data.name) UIUtils.SetLabel(cellTable.txt_Score, data.param1) UIUtils.SetLabel(cellTable.txt_Server, string.FormatByIdsId(Const_IDS.IDS_ServerInfo, data.serverId)) end end function UISubjectMonthRogueLevel:OnCellClicked(scrollRect, index, cellTable, target, data) if scrollRect == self.scroll_Level then self:SelectLevel(index + 1) elseif scrollRect == self.scroll_Reward then for i, v in ipairs(cellTable.group_Items) do if target == v.event_Click then local cfg = DataSheetManager.VersionsActivityReward:GetDataByAttrRepeatID(data.RewardRepeat) UTL.ItemTips.ShowCommonTipsById(cfg.Item_Table[i].ItemID) end end end end function UISubjectMonthRogueLevel:OnButtonClicked(comp) if comp == self.btn_Go then if CTL.Rogue.IsDuringRankSettlement(self.level) then CTL.Tips.AddTipsMsg(Const_IDS.IDS_VersionsActivity_Roguelike_Hint6) return end local points = MDL.Rogue.GetBattlePassPoint() local pointsLimit = CTL.Rogue.GetPointsLimit() local typeBattle = 1 local levelId = DataSheetManager.VersionsRoguelikeLevel:GetDataByID(self.level).LevelID local refinedHintTime = PersistentData.PlayerData:Get(RefinedHintTime, 0) -- 获取上一次本地保存的提示时间 if points >= pointsLimit and not UTL.Time.IsTimestampSameDay(refinedHintTime) then UTL.MessageBox.ShowOKCancelToggleBox(UIUtils.GetLocalizedTxt(Const_IDS.IDS_COMMON_PROMPT), UIUtils.GetLocalizedTxt(Const_IDS.IDS_VersionsActivity_Roguelike_Hint5), UIUtils.GetLocalizedTxt(Const_IDS.IDS_RFDevelop_Tips3), function() UIManager.OpenAndPushAll(Const_UI_Lua.UIEnum.UISubjectMonthRogueHeroListMain, {type = typeBattle, level = self.level, levelId = levelId}) end, function(isOn) if isOn then PersistentData.PlayerData:Set(RefinedHintTime, UTL.Time.GetServerTimestamp(), true) else PersistentData.PlayerData:Set(RefinedHintTime, refinedHintTime, true) end end) else UIManager.OpenAndPushAll(Const_UI_Lua.UIEnum.UISubjectMonthRogueHeroListMain, {type = typeBattle, level = self.level, levelId = levelId}) end elseif comp == self.btn_SelectLevel then UIUtils.SetActive(self.Level_Popup, true) self.scroll_Level:RefreshCells() elseif comp == self.btn_CloseLevelPanel then UIUtils.SetActive(self.Level_Popup, false) elseif comp == self.btn_Last then self:SelectLevel(self.curIndex - 1) elseif comp == self.btn_Next then self:SelectLevel(self.curIndex + 1) elseif comp == self.btn_Star then UIManager.OpenView(Const_UI_Lua.UIEnum.UISubjectMonthRogueStarReward, {level = self.level}) end end return UISubjectMonthRogueLevel