local UIHeroLightEffectTool = require "View/Common/UIHeroLightEffectTool" local UINationClimbTowerProgress = UIViewClass() local FAST_REWARD_COUNT = DataSheetManager.ConstData:GetDataByID("NationClimbTowerRankNum").IntValue -- 排行榜10人上限 local DATE_FORMAT = "%s-%s" local DATE_FORMAT_VN = "%s/%s" local PLAYER_NAME_FORMAT = "%s%s" local Common2DScenePrefab = ConstAssetPathConfig.Common2DScenePrefab local bgTexturePath = ConstAssetPathConfig.bgTexturePath1 function UINationClimbTowerProgress:OnCreated() self.heroLightEffectDatas = UIHeroLightEffectTool.CreateHeroLightEffectDatas(true) end function UINationClimbTowerProgress:OnOpened(context) self:RegistSystemEvent(EventID.UI_UpdateNationProgressRankInfo, self.RefreshRankList) self:RegistSystemEvent(EventID.UI_UpdateFastLevelPassRewards, self.RefreshRewardInfo) self:RegistSystemEvent(EventID.UI_UpdateFastLevelPassRewards, self.RefreshTabRed) -- 全通奖励红点刷新 self:RegistSystemEvent(EventID.UI_CommonShow_RefreshRoleInfo, self.ShowPlayerUI) self:RegistSystemEvent(EventID.FunctionUnlockUpdate, self.CheckIfFuncUnlock) -- GMS self:RegistSystemEvent(EventID.UI_CloseAndRecoverView, self.OnCloseAndRecoverView) UIUtils.SetLabelText(self.UITemplateTitlePanel.lab_Title, Const_IDS['IDS_NationClimbTower_History']) self.leftTabData = MDL.NationClimbTower.GetRankTabData() self.mainSelectType = 0 self.selectChildType = 0 self:RefreshLeftTab(MDL.NationClimbTower.GetLatestRankIndex()) self:PlayOnStartAni()-- 动效修改打开播放动画 self.modelComponentDataHandle = UTL.UIRender.CreateModelComponentDatas(self.obj_Model) UTL.UIRender.Create2DSceneTrans(self.modelComponentDataHandle, Common2DScenePrefab, 1600, 0, 1600, bgTexturePath, false) UIManager.ActiveUIModle(false, "UINationClimbTowerProgress") end function UINationClimbTowerProgress:OnClosed() UTL.UIRender.DisposeModelComponentData(self.modelComponentDataHandle) UIManager.ActiveUIModle(true, "UINationClimbTowerProgress") self:StopHeroLightEffect(true) end function UINationClimbTowerProgress:PlayOnStartAni() self.group_Tab:PlayAnim() self.group_Rank:PlayAnim() end function UINationClimbTowerProgress:CheckIfFuncUnlock(funcId) if funcId and funcId == MDL.Unlock.FunctionType.ClimbTower and not MDL.Unlock.IsUnlock(funcId) then CTL.NationClimbTower.CloseAllClimbView() end end function UINationClimbTowerProgress:RefreshTabRed() self.loop_NationRankTab:RefreshCells() end function UINationClimbTowerProgress:RefreshLeftTab(mainType, childType) if self.loop_NationRankTab.Count == 0 then self.mainSelectType = mainType self.selectChildType = childType for i, v in ipairs(self.leftTabData) do self.loop_NationRankTab:AddData(v, 0) if self.mainSelectType == v.mainType then for _, subV in ipairs(v.subData) do self.loop_NationRankTab:AddData(subV, 1) end end end else if self.mainSelectType == mainType and self.selectChildType == childType then return end if self.mainSelectType ~= mainType or self.selectChildType ~= childType then if not childType then childType = 1 end self.selectChildType = childType end if self.mainSelectType ~= mainType then self.mainSelectType = mainType self.loop_NationRankTab:ClearCells() for i, v in ipairs(self.leftTabData) do self.loop_NationRankTab:AddData(v, 0) if self.mainSelectType == v.mainType then for _, subV in ipairs(v.subData) do self.loop_NationRankTab:AddData(subV, 1) end end end else self.loop_NationRankTab:RefreshCells(false) end end self:SendRankRequest() end function UINationClimbTowerProgress:SendRankRequest() self.requestTowerType = self.mainSelectType if self.requestTowerType == MDL.NationClimbTower.NormalClimbTowerType then self.requestTowerLevel = self.leftTabData[1].subData[self.selectChildType].climbTowerLevel self.requestTowerChapter = self.leftTabData[1].subData[self.selectChildType].climbTowerChapter MDL.NationClimbTower.NationTowerGetRankInfosReq(self.requestTowerType, self.requestTowerLevel, self.requestTowerChapter) else local mainType = GameAppInfo.IsOverseaPackage() and self.mainSelectType or self.mainSelectType + 1 self.requestTowerLevel = self.leftTabData[mainType].subData[self.selectChildType].NationClimbTowerLevel MDL.NationClimbTower.NationTowerGetRankInfosReq(self.requestTowerType, self.requestTowerLevel) end end function UINationClimbTowerProgress:RefreshRankList(rankInfo) self.LoopScroll_NationProperties:ClearCells() self.rankCount = (rankInfo and #rankInfo.records > 0) and #rankInfo.records or 0 if self.rankCount > FAST_REWARD_COUNT then self.rankCount = FAST_REWARD_COUNT end for i = 1, FAST_REWARD_COUNT do if rankInfo.records and rankInfo.records[i] then self.LoopScroll_NationProperties:AddData(rankInfo.records[i], 0) else self.LoopScroll_NationProperties:AddData(nil, 0) end end self.LoopScroll_NationProperties:SelectIndex(0) self:RefreshRewardInfo() end -- 刷新底部全服速通奖励 function UINationClimbTowerProgress:RefreshRewardInfo() local rewardState, rewardShowID, rewards if self.requestTowerType == MDL.NationClimbTower.NormalClimbTowerType then local name = CTL.ClimbTower.GetClimbTowerProgressName(CTL.ClimbTower.GetClimbTowerLevelByChapterAndNumber(self.requestTowerChapter, self.requestTowerLevel)) self.txt_Remind.text = string.FormatByIdsId(Const_IDS["IDS_NationClimbTower_TenReach"], FAST_REWARD_COUNT, UIUtils.GetLocalizedTxt(Const_IDS.IDS_ActivityName_ClimbTower), name, self.rankCount, FAST_REWARD_COUNT) rewardState, rewardShowID = CTL.NationClimbTower.GetFastLevelPassRewardsState(self.requestTowerType, self.requestTowerLevel, self.requestTowerChapter) rewards = DataSheetManager.ClimbTowerRankReward:GetDataByAttrRepeatID(rewardShowID).Item_Table else local towerConfig = MDL.NationClimbTower.GetTowerConfigData(self.requestTowerType) local name = UIUtils.GetLocalizedTxt(Const_IDS[towerConfig.ClimbTower]) -- 速通奖励文本 local lvTxt = string.FormatByIdsId(Const_IDS["IDS_NationClimbTower_HistoryLevel"], self.requestTowerLevel) self.txt_Remind.text = string.FormatByIdsId(Const_IDS["IDS_NationClimbTower_TenReach"], FAST_REWARD_COUNT, name, lvTxt, self.rankCount, FAST_REWARD_COUNT) rewardState, rewardShowID = CTL.NationClimbTower.GetFastLevelPassRewardsState(self.requestTowerType, self.requestTowerLevel) rewards = DataSheetManager.NationClimbTowerRankReward:GetDataByAttrRepeatID(rewardShowID).Item_Table end for i, v in ipairs(self.group_Reward) do -- 速通宝物状态 UIUtils.SetActive(v.effect_Available, rewardState == CTL.NationClimbTower.RewardState.Available) UIUtils.SetActive(v.effect_AvailableItem, rewardState == CTL.NationClimbTower.RewardState.Available) UIUtils.SetActive(v.group_Get, rewardState == CTL.NationClimbTower.RewardState.Received) UTL.Item.SetItemCell(v.item, rewards[i].ItemID, rewards[i].ItemNum) v.ItemID = rewards[i].ItemID end end function UINationClimbTowerProgress:OnBackButtonPressed() self:OnButtonClicked(self.UITemplateTitlePanel.btn_close) end function UINationClimbTowerProgress:OnButtonClicked(comp) if comp == self.UITemplateTitlePanel.btn_close then self:CloseView(true) -- 返回按钮 elseif comp == self.UITemplateTitlePanel.btn_Home then CTL.HomeMain.CloseViewBackHomeMain() elseif comp == self.UITemplateTitlePanel.btn_Info then -- 玩法说明 UIManager.OpenView(Const_UI_Lua.UIEnum.UICommonNoteView, {id = LuaConst.NoteID.ClimbTower}) else local rewardState, _ = CTL.NationClimbTower.GetFastLevelPassRewardsState(self.requestTowerType, self.requestTowerLevel, self.requestTowerChapter) for i, collection in ipairs(self.group_Reward) do if comp == collection.item.event_Click then if rewardState == CTL.NationClimbTower.RewardState.Available then MDL.NationClimbTower.NationTowerGetServerAwardReq(self.requestTowerType, self.requestTowerLevel, self.requestTowerChapter) else UTL.ItemTips.ShowCommonTipsById(collection.ItemID) end return end end end end function UINationClimbTowerProgress:OnCellSelect(scrollRect, index, cellTable, data) if scrollRect == self.LoopScroll_NationProperties then if data then if self.curShowACID ~= data.acid then MDL.Rank.CommonShowGetInfoRequest(data.acid) self.curShowACID = data.acid end else if self.curShowACID ~= BattleDataGetter.GetAcID() then MDL.Rank.CommonShowGetInfoRequest(BattleDataGetter.GetAcID()) self.curShowACID = BattleDataGetter.GetAcID() end end end end function UINationClimbTowerProgress:OnCellInit(scrollRect, index, cellTable, data) if scrollRect == self.LoopScroll_NationProperties then -- 排名背景和排名号 cellTable.UIState2:SetState(index % 2 == 0 and 0 or 1) if index < 3 then cellTable.group_Rank.UIState:SetState(index) else cellTable.group_Rank.UIState:SetState(3) end local rankRewardID local rewards if self.requestTowerType == MDL.NationClimbTower.NormalClimbTowerType then rankRewardID = DataSheetManager.ClimbTowerRank:GetDataByClimbTowerChapter_ClimbTowerLevel_RankID(self.requestTowerChapter, self.requestTowerLevel, index + 1).TowerRankReward rewards = DataSheetManager.ClimbTowerRankReward:GetDataByAttrRepeatID(rankRewardID).Item_Table else rankRewardID = DataSheetManager.NationClimbTowerRank:GetDataByNationClimbTowerLevel_RankID(self.requestTowerLevel, index + 1).TowerRankReward[self.requestTowerType] rewards = DataSheetManager.NationClimbTowerRankReward:GetDataByAttrRepeatID(rankRewardID).Item_Table end for i, v in ipairs(cellTable.group_Rewards) do UTL.Item.SetItemCell(v, rewards[i].ItemID, rewards[i].ItemNum) end UIUtils.SetLabel(cellTable.group_Rank.txt_Rank, index + 1) -- 无人上榜 隐藏名字、通关时间、势力 UIUtils.SetActive(cellTable.txt_Name, data ~= nil) UIUtils.SetActive(cellTable.txt_Empty, data == nil) UIUtils.SetLabelText(cellTable.txt_Empty, Const_IDS["IDS_NationClimbTower_NoManRank"]) UIUtils.SetActive(cellTable.group_Time.gameObject, data ~= nil) if data then -- 玩家姓名 UIUtils.SetLabel(cellTable.txt_Name, data.name) -- 设置通关时间 local month, day, hour = CTL.NationClimbTower.GetProgressFinishFormatTime(data.param1) if GameAppInfo.IsVietnamPackage() then UIUtils.SetLabel(cellTable.txt_Time01, hour) UIUtils.SetLabel(cellTable.txt_Time02, string.format(DATE_FORMAT_VN, day, month)) else UIUtils.SetLabel(cellTable.txt_Time01, string.format(DATE_FORMAT, month, day)) UIUtils.SetLabel(cellTable.txt_Time02, hour) end end elseif scrollRect == self.loop_NationRankTab then if data.isParent then local isParentSelected = data.mainType == self.mainSelectType UIUtils.SetActive(cellTable.img_Selected, isParentSelected) UIUtils.SetActive(cellTable.img_UnSelected, not isParentSelected) UIUtils.SetLabel(cellTable.txt_Name_Nomal, data.title) UIUtils.SetLabel(cellTable.txt_Name_Selected, data.title) cellTable.obj_ArrowState:SetState(isParentSelected and 0 or 1) else -- 奖励可领红点 local rewardState if data.parentType == MDL.NationClimbTower.NormalClimbTowerType then rewardState = CTL.NationClimbTower.GetFastLevelPassRewardsState(data.parentType, data.climbTowerLevel, data.climbTowerChapter) else rewardState = CTL.NationClimbTower.GetFastLevelPassRewardsState(data.parentType, data.NationClimbTowerLevel) end UIUtils.SetActive(cellTable.img_RedDot, rewardState == CTL.NationClimbTower.RewardState.Available) local mainCell = scrollRect:GetCellTableByIndex(index - data.subTabIndex) local isSelect = data.parentType == self.mainSelectType and data.subTabIndex == self.selectChildType UIUtils.SetActive(mainCell.img_Selected, true) UIUtils.SetActive(cellTable.img_Selected, isSelect) UIUtils.SetActive(cellTable.img_UnSelected, not isSelect) if data.climbTowerLevel then local name = CTL.ClimbTower.GetClimbTowerProgressName(CTL.ClimbTower.GetClimbTowerLevelByChapterAndNumber(data.climbTowerChapter, data.climbTowerLevel)) cellTable.txt_Name_Selected.text = name cellTable.txt_Name_Nomal.text = name else cellTable.txt_Name_Selected.text = string.FormatByIdsId(Const_IDS["IDS_NationClimbTower_HistoryLevel"], data.NationClimbTowerLevel) cellTable.txt_Name_Nomal.text = string.FormatByIdsId(Const_IDS["IDS_NationClimbTower_HistoryLevel"], data.NationClimbTowerLevel) end end end end function UINationClimbTowerProgress:OnCellClicked(scrollRect, index, cellTable, target, data) if scrollRect == self.LoopScroll_NationProperties then local rankRewardID local rewards if self.requestTowerType == MDL.NationClimbTower.NormalClimbTowerType then rankRewardID = DataSheetManager.ClimbTowerRank:GetDataByClimbTowerChapter_ClimbTowerLevel_RankID(self.requestTowerChapter, self.requestTowerLevel, index + 1).TowerRankReward rewards = DataSheetManager.ClimbTowerRankReward:GetDataByAttrRepeatID(rankRewardID).Item_Table else rankRewardID = DataSheetManager.NationClimbTowerRank:GetDataByNationClimbTowerLevel_RankID(self.requestTowerLevel, index + 1).TowerRankReward[self.requestTowerType] rewards = DataSheetManager.NationClimbTowerRankReward:GetDataByAttrRepeatID(rankRewardID).Item_Table end for i, v in ipairs(cellTable.group_Rewards) do if target == v.event_Click then UTL.ItemTips.ShowCommonTipsById(rewards[i].ItemID) end end elseif scrollRect == self.loop_NationRankTab then if data.isParent then if self.mainSelectType~= data.mainType then self:RefreshLeftTab(data.mainType) end else self:RefreshLeftTab(data.parentType, data.subTabIndex) end end end -- 通用设置军团标记 function UINationClimbTowerProgress:SetGuildFameNum(obj, emblemContent, emblemFrame) if not string.isNilOrEmpty(emblemContent) then UIUtils.SetLabel(obj.txt_Guild, emblemContent) UIUtils.SetActive(obj.img_Guild, true) local guildEmblemCfg = DataSheetManager.GuildEmblem:GetDataByID(emblemFrame) if guildEmblemCfg then UTL.Item.SetAtlasSprite(obj.img_Guild, "UI_Guild", guildEmblemCfg.Image) end else UIUtils.SetActive(obj.img_Guild, false) end end -- 玩家模型展示 function UINationClimbTowerProgress:ShowPlayerUI(headInfo) -- 加载战骑 local isStandOnHorse, driverAnim, horseCfg if headInfo.horseAppearanceId > 0 then local appearanceData = MDL.WarHorse.GetAppearanceInfoByID(headInfo.horseAppearanceId) UTL.UIRender.CreateHorse3DModel(self.modelComponentDataHandle, headInfo.HorseID, headInfo.horseAppearanceId, UTL.UIRender.LayerActiveType.HorseShow) isStandOnHorse, driverAnim = UTL.UIRender.GetOnHorseAnim(appearanceData) horseCfg = appearanceData elseif headInfo.HorseID > 0 then local horseData = DataSheetManager.HorseData:GetDataByHorseID(headInfo.HorseID) UTL.UIRender.CreateHorse3DModel(self.modelComponentDataHandle, headInfo.HorseID, 0, UTL.UIRender.LayerActiveType.HorseShow) isStandOnHorse, driverAnim = UTL.UIRender.GetOnHorseAnim(horseData) horseCfg = horseData else UTL.UIRender.DisposeHorseOther(self.modelComponentDataHandle) UTL.UIRender.DisposePlayerModel(self.modelComponentDataHandle) end -- 加载人物 local resolutionRatio = UIUtils.GetScreenResolutionRatio() local heroLightEffects = headInfo.lightEffectIds self:StopHeroLightEffect() if headInfo.HorseID > 0 or headInfo.horseAppearanceId > 0 then UTL.UIRender.Create2DSceneTrans(self.modelComponentDataHandle, Common2DScenePrefab, 1600, 0, 1600, bgTexturePath, false) UTL.UIRender.StartRideHorse(self.modelComponentDataHandle, headInfo.HorseID, headInfo.HeroID, headInfo) if not isStandOnHorse then UTL.UIRender.DriverEntityPlayAnim(self.modelComponentDataHandle, "ride_idle_loop") else UTL.UIRender.DriverEntityPlayAnim(self.modelComponentDataHandle, LuaConst.Animation_idle_loop) end local modelRot = horseCfg.RankModelRot and horseCfg.RankModelRot or horseCfg.SettingModelRot if resolutionRatio == LuaConst.ScreenResolutionRatio.RatioPad4_3 or resolutionRatio == LuaConst.ScreenResolutionRatio.RatioPadOther then local posX, posY, posZ = CTL.WarHorse.GetHorseRankModelXYZ(horseCfg, 0.6, -1.06, -0.6) UTL.UIRender.SetHeroParentPos(self.modelComponentDataHandle, posX, posY, posZ) UTL.UIRender.SetHeroParentRot(self.modelComponentDataHandle, 0, modelRot, 1.335) else local posX, posY, posZ = CTL.WarHorse.GetHorseRankModelXYZ(horseCfg, 0.6, -1.12, -0.25) UTL.UIRender.SetHeroParentPos(self.modelComponentDataHandle, posX, posY, posZ) UTL.UIRender.SetHeroParentRot(self.modelComponentDataHandle, 0, modelRot, 0) end UTL.UIRender.SetModelRootLocalScale(self.modelComponentDataHandle, 0.9, 0.9, 0.9) --播放光效 self:BeginHeroLightEffect(self, UIHeroLightEffectTool.PlayLightEffectFuncEnum.UI3DDriver, heroLightEffects) else UTL.UIRender.DisposeHorseOther(self.modelComponentDataHandle) UTL.UIRender.DisposePlayerModel(self.modelComponentDataHandle) UTL.UIRender.Create2DSceneTrans(self.modelComponentDataHandle, Common2DScenePrefab, 1600, 0, 1600, bgTexturePath, false) UTL.UIRender.CreatePlayerModel(self.modelComponentDataHandle, headInfo.HeroID, nil, nil, true) if resolutionRatio == LuaConst.ScreenResolutionRatio.RatioPad4_3 or resolutionRatio == LuaConst.ScreenResolutionRatio.RatioPadOther then UTL.UIRender.SetHeroParentPos(self.modelComponentDataHandle, 0.71, -1.13, -1) UTL.UIRender.SetHeroParentRot(self.modelComponentDataHandle, 0, -6, 1.335) else UTL.UIRender.SetHeroParentPos(self.modelComponentDataHandle, 0.9, -1.13, -1) UTL.UIRender.SetHeroParentRot(self.modelComponentDataHandle, 0, -6, 0) end --播放光效 self:BeginHeroLightEffect(self, UIHeroLightEffectTool.PlayLightEffectFuncEnum.LuaView, heroLightEffects) end -- 加载神兵铸魂天命 local weaponSoul = CTL.DivineWeaponForgeSoul.GetWeaponSoulSkillByProtoMap(headInfo.HeroID, headInfo.weaponSoul) if weaponSoul then UTL.UIRender.LoadPlayerWeaponSoul(self.modelComponentDataHandle, weaponSoul) end -- 设置称号 if headInfo.TitleID > 0 then local titleData = DataSheetManager.Title:GetDataByID(headInfo.TitleID) UIUtils.SetActive(self.UITitleShow.gameObject, true) CTL.Title.SetTitleShow(self.UITitleShow, titleData) UIUtils.SetActiveByScale(self.UITitleShow.gameObject, true) UIUtils.SetRectPosition(self.UITitleShow.gameObject, 1, 1) else UIUtils.SetActive(self.UITitleShow.gameObject, false) end -- 设置军团标记 if string.isNilOrEmpty(headInfo.EmblemContent) then UIUtils.SetActive(self.img_Guild, false) else UIUtils.SetActive(self.img_Guild, true) self:SetGuildFameNum(self, headInfo.EmblemContent, headInfo.EmblemFrame) end -- 设置名字 if headInfo.OfficialId > 0 then UIUtils.SetLabel(self.txt_Name, string.format(PLAYER_NAME_FORMAT, CTL.OfficialPosition.GetModelNameShow(headInfo.OfficialId), headInfo.name)) else UIUtils.SetLabel(self.txt_Name, headInfo.name) end end function UINationClimbTowerProgress:StopHeroLightEffect(isDispose) UIHeroLightEffectTool.StopHeroLightEffect(self.heroLightEffectDatas) if isDispose then self.heroLightEffectDatas = nil end end function UINationClimbTowerProgress:BeginHeroLightEffect(renderComp,playLightEffectFuncEnum,heroLightEffects) for _, lightEffectID in ipairs(heroLightEffects) do UIHeroLightEffectTool.PlayHeroLightEffect(self.heroLightEffectDatas,renderComp, 0, playLightEffectFuncEnum,lightEffectID, nil) end end function UINationClimbTowerProgress:PlayDriverModelEffect(effectPath) return UTL.UIRender.PlayDriverPsEffect(self.modelComponentDataHandle, effectPath) end function UINationClimbTowerProgress:AuxUtilPlayPsEffect(effectPath) return UTL.UIRender.PlayPsEffect(self.modelComponentDataHandle, effectPath) end function UINationClimbTowerProgress:PlayCharacterModelEffect(effectPath) return UTL.UIRender.PlayPsEffect(self.modelComponentDataHandle, effectPath) end return UINationClimbTowerProgress