local UIAssistanceFightPanel = UIViewClass() local LockEffectPath = ConstAssetPathConfig.LockEffect local HeadImgPath = ConstAssetPathConfig.HeadImgPath local PercentStr = "%d%%" local FormationIconPath = "zz_msz_0%d" local FormationStr = "IDS_Formation_Team%d" local FormationType = { First = 1, Middle = 2, Back = 3 } local CheckParams = { FormationIndex = 0, MainHeroIndex = 0, SubHeroIndex = 0, heroIdList = nil, isHeroFormation = true } local Ani_CameraLeftIn = "Camera_LeftIn" local Ani_CameraLeftInImmediate = "Camera_LeftIn_Immediate" local Ani_CameraCenterIn = "Camera_MiddleIn" local Ani_CameraRightIn = "Camera_RightIn" local Ani_CameraOut = "Camera_Out" local Ani_UIOpen = "AssistanceFightOpen" local Ani_UIClose = "AssistanceFightClose" local ArrayCameraPos = Vector3.New(-992.1, -999.3, -999.3) local ArrayCameraRot = Vector3.New(-6.28, -87.75, -0.04) local DefaultFov = 30 -- TODO -- 优化前:进入界面时 会同时加载场景、6个武将(战斗模)、设置各种UI,导致峰值压力非常大 -- 优化后:进入界面时 会先加载场景、设置UI,同时开启分帧加载武将,延迟0.16加载一个武将,来降低进入界面时的峰值压力 -- 还存在的问题: -- 1、后续优化是将加载场景接口单独拆分,实现 加载UI(不设置具体UI内容)、加载场景、设置UI、分帧加载武将,以便进一步降低峰值压力 -- 2、这个界面(助阵)每次打开不管什么情况下 都会重新加载场景、武将, -- 在和布阵界面互相切换的时候,使用的场景、武将模型、武将占位一模一样,需要根据条件只加载一次场景和武将,仅切换UI的状态, -- 而不是像现在 打开助阵——>切换布阵:先加载场景、6个武将,切换时卸载场景、武将,在重新加载场景、武将。 -- 3、使用分帧加载后。由于武将是一个一个出现,表现效果需要重新考虑一下 ---------------------------------- 系统函数 ------------------------------- function UIAssistanceFightPanel:OnCreated() self.effectId = LuaExt.CreateTable(#MDL.Player.GetHeroLinUpIds()) self.isPlayingCameraAni = false self.isOpenFromHeroFormationPanel = false end function UIAssistanceFightPanel:OnOpened(context) CheckParams.heroIdList = MDL.Player.GetHeroLinUpIds() self.UITemplateTitlePanel.btn_close.enabled = true UIUtils.SetLabelText(self.UITemplateTitlePanel.lab_Title, Const_IDS.IDS_AssistanceFight_Title) self:RegistSystemEvent(EventID.UI_AssistanceFight_RefreshMainPanel, self.RefreshPanel) self:RegistSystemEvent(EventID.BagItem_Update, self.RefreshPanel) self:RegistSystemEvent(EventID.UI_AssistanceFight_PlaySlotUnlockEft, self.PlayUnlockEft) self:RegistSystemEvent(EventID.UI_AssistanceFight_PlaySlotOnHeroEft, self.PlayOnHeroEft) self.isOpenFromHeroFormationPanel = context.isOpenFromHeroFormationPanel self.selectFormationType = self:FormationIndex2Type(context.heroIndex) self:RefreshFormationInfos(1, 2, self.group_FirstFormation) self:RefreshFormationInfos(3, 4, self.group_MiddleFormation) self:RefreshFormationInfos(5, 6, self.group_BackFormation) self:InitBgScene() self:RefreshPanel() if self.isOpenFromHeroFormationPanel then self:PlayUIAnimation(Ani_CameraLeftInImmediate, false) self.ani_UIOpen = self:PlayUIAnimation(Ani_UIOpen, true) UIUtils.SetActive(self.group_Assistance, true) else -- 播放进入动画 if self.selectFormationType == FormationType.First then self.ani_CameraIn = self:PlayUIAnimation(Ani_CameraLeftIn, true) elseif self.selectFormationType == FormationType.Middle then self.ani_CameraIn = self:PlayUIAnimation(Ani_CameraCenterIn, true) elseif self.selectFormationType == FormationType.Back then self.ani_CameraIn = self:PlayUIAnimation(Ani_CameraRightIn, true) end UIUtils.SetActive(self.group_Assistance, false) self.isPlayingCameraAni = true end end function UIAssistanceFightPanel:OnBackButtonPressed() self:OnButtonClicked(self.UITemplateTitlePanel.btn_close) end function UIAssistanceFightPanel:OnButtonClicked(comp) if comp == self.UITemplateTitlePanel.btn_close then if self.isOpenFromHeroFormationPanel then self:CloseView(true) return end -- 特效全部关闭 for i, v in ipairs (self.group_Assistances) do v.effect_Success:StopUIEffect() v.effect_Unlockable:StopUIEffect() v.effect_AssistanceNew:StopUIEffect() end for i, v in ipairs (self.group_AssistanceHorse) do v.effect_Success:StopUIEffect() v.effect_Unlockable:StopUIEffect() v.effect_AssistanceNew:StopUIEffect() end for i, v in ipairs (self.group_AssistanceTreasure) do v.effect_Success:StopUIEffect() v.effect_Unlockable:StopUIEffect() v.effect_AssistanceNew:StopUIEffect() end UIUtils.SetActive(self.group_TeamPower.gameObject, false) self.UITemplateTitlePanel.btn_close.enabled = false self:PlayUIAnimation(Ani_UIClose) self.ani_CameraOut = self:PlayUIAnimation(Ani_CameraOut, 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.AssistanceFight}) elseif comp == self.btn_OneKey then -- 一键助战 CTL.Sound.PlayGameSound("UI_click_02") if CTL.AssistanceFight.IsNeedOptimise() then MDL.AssistanceFight.RequestAutoOptimize() else CTL.Tips.AddTipsMsg(Const_IDS["IDS_AssistanceFight_NoneHeroHint"]) end elseif comp == self.btn_ArrowRight then if self.isPlayingCameraAni then return end -- 右 self:ChangeFormationType(self.selectFormationType + 1) elseif comp == self.btn_ArrowLeft then if self.isPlayingCameraAni then return end -- 左 self:ChangeFormationType(self.selectFormationType - 1) elseif comp == self.group_TeamPower.btn_Check then -- 属性详情 if self.selectFormationType == FormationType.First then CheckParams.MainHeroIndex = 1 CheckParams.SubHeroIndex = 2 elseif self.selectFormationType == FormationType.Middle then CheckParams.MainHeroIndex = 3 CheckParams.SubHeroIndex = 4 elseif self.selectFormationType == FormationType.Back then CheckParams.MainHeroIndex = 5 CheckParams.SubHeroIndex = 6 end CheckParams.FormationIndex = self.selectFormationType UIManager.OpenView(Const_UI_Lua.UIEnum.UIAssistanceInfoTips, CheckParams) elseif comp == self.group_FirstFormation.btn then if self.isPlayingCameraAni then return end -- 前军 self:ChangeFormationType(FormationType.First) elseif comp == self.group_MiddleFormation.btn then if self.isPlayingCameraAni then return end -- 中军 self:ChangeFormationType(FormationType.Middle) elseif comp == self.group_BackFormation.btn then if self.isPlayingCameraAni then return end -- 后军 self:ChangeFormationType(FormationType.Back) else if self.ani_UIOpenPlaying then return end self:AssistanceHeroButton(comp) self:AssistanceHorseButton(comp) self:AssistanceTreasureButton(comp) end end function UIAssistanceFightPanel:OnUIAnimationStoped(playingID) if self.ani_UIOpen == playingID then CTL.PlayerGuide.TryStartAssistanceFightGuide() self.ani_UIOpenPlaying = false elseif (self.ani_CameraIn and self.ani_CameraIn == playingID) or (self.ani_CameraMove and self.ani_CameraMove == playingID) then if self.ani_CameraIn and self.ani_CameraIn == playingID then self.ani_UIOpen = self:PlayUIAnimation(Ani_UIOpen, true) self.ani_UIOpenPlaying = true UIUtils.SetActive(self.group_Assistance, true) end self.isPlayingCameraAni = false elseif (self.ani_CameraOut and self.ani_CameraOut == playingID) then self.UITemplateTitlePanel.btn_close.enabled = true self:CloseView(true) end end ---------------------------------------------------------------------------- function UIAssistanceFightPanel:InitBgScene() self.modelComponentDataHandle = UTL.UIRender.CreateModelComponentDatas(self.ModelShow) UTL.UIRender.Create2DSceneTrans(self.modelComponentDataHandle, ConstAssetPathConfig.Common2DScenePrefab, 1600, 0, 1600, ConstAssetPathConfig.BGPath_1, false) self.HeroShow:EnterArrayShowWithCameraParam(ArrayCameraPos, ArrayCameraRot, DefaultFov) self.frameLoadIndex = 1 self:StopRepeatFunc(self.FrameLoadFormationHero) self:StartRepeatFunc(self.FrameLoadFormationHero, 0.12) end function UIAssistanceFightPanel:FrameLoadFormationHero() local lineUpHeroIds = MDL.Player.GetHeroLinUpIds() self:LoadFormationHero(lineUpHeroIds[self.frameLoadIndex], self.frameLoadIndex) self.frameLoadIndex = self.frameLoadIndex + 1 if self.frameLoadIndex > #lineUpHeroIds then self:StopRepeatFunc(self.FrameLoadFormationHero) end end function UIAssistanceFightPanel:LoadFormationHero(heroId, index) if heroId and heroId > 0 then self:LoadHeroModel(heroId, index) elseif heroId < 0 then if self.effectId[index] then AuxUtil.StopPsEffect(self.effectId[index]) end self.effectId[index] = SystemManager.PlayPsEffect(LockEffectPath, self.HeroShow:GetHeroModelTransform(index)) end end function UIAssistanceFightPanel:RefreshFormationInfos(index_1, index_2, group) local mainHeroId = MDL.Player.GetHeroLinUpIds()[index_1] local viceHeroId = MDL.Player.GetHeroLinUpIds()[index_2] UIUtils.SetActive(group.img_MainHeroHead, mainHeroId and mainHeroId > 0) if mainHeroId and mainHeroId > 0 then UTL.Item.SetHeroIconByHeroId(group.img_MainHeroHead, mainHeroId, MDL.HeroAwaken.GetIsHeroAwaken(mainHeroId)) end UIUtils.SetActive(group.img_AssistantHeroHead, viceHeroId and viceHeroId > 0) if viceHeroId and viceHeroId > 0 then UTL.Item.SetHeroIconByHeroId(group.img_AssistantHeroHead, viceHeroId, MDL.HeroAwaken.GetIsHeroAwaken(viceHeroId)) end end function UIAssistanceFightPanel:RefreshPanel() UIUtils.SetActive(self.btn_ArrowLeft, self.selectFormationType ~= FormationType.First) UIUtils.SetActive(self.btn_ArrowRight, self.selectFormationType ~= FormationType.Back) UIUtils.SetActive(self.group_FirstFormation.img_Selected, self.selectFormationType == FormationType.First) UIUtils.SetActive(self.group_MiddleFormation.img_Selected, self.selectFormationType == FormationType.Middle) UIUtils.SetActive(self.group_BackFormation.img_Selected, self.selectFormationType == FormationType.Back) self.btn_OneKey:SetRedPoint(CTL.AssistanceFight.IsNeedOptimise()) local mainHeroId = MDL.Player.GetHeroLinUpIds()[self.selectFormationType * 2 - 1] local mainIndex = self.selectFormationType * 2 - 1 local powers = MDL.Player.GetHeroLinUpPower() if not powers[mainIndex] or powers[mainIndex] <= 0 then if mainHeroId < 0 then local arrayData = DataSheetManager.BattleArray:GetDataByArrayID(mainIndex) UIUtils.SetLabel(self.group_TeamPower.txt_PowerNumber, string.FormatByIdsId(Const_IDS[arrayData.UnlockDes], arrayData.UnlockConditionParam)) UIUtils.SetActive(self.group_TeamPower.img_PowerIcon, false) else UIUtils.SetLabel(self.group_TeamPower.txt_PowerNumber, 0) UIUtils.SetActive(self.group_TeamPower.img_PowerIcon, true) end else UIUtils.SetLabel(self.group_TeamPower.txt_PowerNumber, MDL.Player.GetFormationGS(self.selectFormationType)) UIUtils.SetActive(self.group_TeamPower.img_PowerIcon, true) end UTL.Item.SetAtlasSprite(self.group_TeamPower.img_TeamNumber, "UI_Array", string.format(FormationIconPath, self.selectFormationType)) UIUtils.SetLabelText(self.group_TeamPower.lab_Team1, Const_IDS[string.format(FormationStr, self.selectFormationType)]) self:SetAssistanceHero(mainHeroId) local showHorse = CTL.AssistanceFight.ShowAssistanceHorse(self.selectFormationType) UIUtils.SetActive(self.group_AssistanceHorse.gameObject, showHorse) if showHorse then self:SetAssistanceHorse(mainHeroId) end local showTreasure = CTL.AssistanceFight.ShowAssistanceTreasure(self.selectFormationType) UIUtils.SetActive(self.group_AssistanceTreasure.gameObject, showTreasure) if showTreasure then self:SetAssistanceTreasure(mainHeroId) end self.group_FirstFormation.btn:SetRedPoint(CTL.AssistanceFight.IsShowFormationRedPoint(1)) self.group_MiddleFormation.btn:SetRedPoint(CTL.AssistanceFight.IsShowFormationRedPoint(2)) self.group_BackFormation.btn:SetRedPoint(CTL.AssistanceFight.IsShowFormationRedPoint(3)) end function UIAssistanceFightPanel:ChangeFormationType(formationType) if self.selectFormationType == formationType then return end local checkIndex = 1 if formationType == FormationType.Middle then checkIndex = 3 elseif formationType == FormationType.Back then checkIndex = 5 end if not MDL.Array.IsArrayPositionUnlock(checkIndex) then local arrayData = DataSheetManager.BattleArray:GetDataByArrayID(checkIndex) local unLockParamVal = tonumber(arrayData.UnlockConditionParam) local isLevel = DataSheetManager.BarrierChosenData:GetDataByID(unLockParamVal) ~= nil if isLevel then local unLockIDS = DataSheetManager.BarrierChosenData:GetDataByID(unLockParamVal).BarrierNum local unLockInfo = UIUtils.GetLocalizedTxt(Const_IDS[unLockIDS]) CTL.Tips.AddTipsMsg(Const_IDS[arrayData.UnlockDes], unLockInfo) else CTL.Tips.AddTipsMsg(Const_IDS[arrayData.UnlockDes], arrayData.UnlockConditionParam) end return end self:MoveTargetFormation(formationType) self.selectFormationType = formationType self:RefreshPanel() end function UIAssistanceFightPanel:IsValidFormation(formationType) local mainHeroId = nil if formationType == FormationType.First then mainHeroId = MDL.Player.GetHeroLinUpIds()[1] elseif formationType == FormationType.Middle then mainHeroId = MDL.Player.GetHeroLinUpIds()[3] elseif formationType == FormationType.Back then mainHeroId = MDL.Player.GetHeroLinUpIds()[5] end return mainHeroId and mainHeroId > 0 end function UIAssistanceFightPanel:FormationIndex2Type(index) if index == 1 or index == 2 then return FormationType.First elseif index == 3 or index == 4 then return FormationType.Middle elseif index == 5 or index == 6 then return FormationType.Back end return 0 end function UIAssistanceFightPanel:PlayUnlockEft(slotId) for i, v in ipairs (self.group_Assistances) do local slotInfo = MDL.AssistanceFight.GetSlotInfo(self.selectFormationType, i) if slotInfo and slotInfo.slotId == slotId then v.effect_Success:PlayUIEffect() CTL.Sound.PlayGameSound("UI_breakout_02") return end end for i, v in ipairs (self.group_AssistanceHorse) do local slotInfo = MDL.AssistanceFight.GetSlotInfo(self.selectFormationType, i + 4) if slotInfo and slotInfo.slotId == slotId then v.effect_Success:PlayUIEffect() CTL.Sound.PlayGameSound("UI_breakout_02") return end end for i, v in ipairs (self.group_AssistanceTreasure) do local slotInfo = MDL.AssistanceFight.GetSlotInfo(self.selectFormationType, i + 6) if slotInfo and slotInfo.slotId == slotId then v.effect_Success:PlayUIEffect() CTL.Sound.PlayGameSound("UI_breakout_02") return end end end function UIAssistanceFightPanel:PlayOnHeroEft(slotId) for i, v in ipairs (self.group_Assistances) do local slotInfo = MDL.AssistanceFight.GetSlotInfo(self.selectFormationType, i) if slotInfo and slotInfo.slotId == slotId then v.effect_Success:PlayUIEffect() CTL.Sound.PlayGameSound("UI_breakout_02") return end end for i, v in ipairs (self.group_AssistanceHorse) do local slotInfo = MDL.AssistanceFight.GetSlotInfo(self.selectFormationType, i + 4) if slotInfo and slotInfo.slotId == slotId then v.effect_Success:PlayUIEffect() CTL.Sound.PlayGameSound("UI_breakout_02") return end end for i, v in ipairs (self.group_AssistanceTreasure) do local slotInfo = MDL.AssistanceFight.GetSlotInfo(self.selectFormationType, i + 6) if slotInfo and slotInfo.slotId == slotId then v.effect_Success:PlayUIEffect() CTL.Sound.PlayGameSound("UI_breakout_02") return end end end function UIAssistanceFightPanel:MoveTargetFormation(targetFormationType) if self.selectFormationType == targetFormationType then return end if targetFormationType == FormationType.First then self.ani_CameraMove = self:PlayUIAnimation(Ani_CameraLeftIn, true) elseif targetFormationType == FormationType.Middle then self.ani_CameraMove = self:PlayUIAnimation(Ani_CameraCenterIn, true) elseif targetFormationType == FormationType.Back then self.ani_CameraMove = self:PlayUIAnimation(Ani_CameraRightIn, true) end self.isPlayingCameraAni = true end function UIAssistanceFightPanel:OnClosed() UTL.UIRender.DisposeModelComponentData(self.modelComponentDataHandle) end ---@private 设置助阵武将信息 function UIAssistanceFightPanel:SetAssistanceHero(mainHeroId) for i, v in ipairs (self.group_Assistances) do local slotInfo = MDL.AssistanceFight.GetSlotInfo(self.selectFormationType, i) if slotInfo then local slotData = slotInfo.data local hasHero = slotData.heroId > 0 UIUtils.SetActive(v.img_HeroHead, hasHero) if hasHero then UTL.Item.SetHeroIconByHeroId(v.img_HeroHead, slotData.heroId, MDL.HeroAwaken.GetIsHeroAwaken(slotData.heroId)) end UIUtils.SetActive(v.img_Lock, slotData.slotState ~= 2) local triggerIsUnlock, itemIsUnlock = CTL.AssistanceFight.CheckSlotUnlockState(slotInfo) if slotData.slotState == 1 and triggerIsUnlock and itemIsUnlock then v.effect_Unlockable:PlayUIEffect() else v.effect_Unlockable:StopUIEffect() end local isShowRP = CTL.AssistanceFight.IsShowSlotRedPoint(slotInfo, mainHeroId) v.btn:SetRedPoint(isShowRP) UIUtils.SetActive(v.img_New, slotData.slotState == 2 and slotData.heroId == 0 and not isShowRP) if slotData.slotState == 2 and slotData.heroId == 0 and isShowRP then v.effect_AssistanceNew:PlayUIEffect() else v.effect_AssistanceNew:StopUIEffect() end UIUtils.SetActive(v.img_CEBg, hasHero) UIUtils.SetLabel(v.txt_CENum, slotData.gs) UIUtils.SetLabel(v.txt_AdditionPercentage, string.format(PercentStr, slotInfo.config.AssistanceGSProportion * 100)) end end end ---@private 助阵武将点击事件 function UIAssistanceFightPanel:AssistanceHeroButton(comp) for i, v in ipairs (self.group_Assistances) do if comp == v.btn then -- 助战位 local slotInfo = MDL.AssistanceFight.GetSlotInfo(self.selectFormationType, i) if slotInfo and slotInfo.data then local slotData = slotInfo.data if slotData.slotState == 0 or slotData.slotState == 1 then UIManager.OpenView(Const_UI_Lua.UIEnum.UIUnlockAssistanceHeroPanel, slotInfo) else if not self:IsValidFormation(self.selectFormationType) then -- 无效操作 CTL.Tips.AddTipsMsg(Const_IDS["IDS_AssistanceFight_ChooseHero_WrongHint"]) break end UIManager.OpenView(Const_UI_Lua.UIEnum.UICommonChangePanel, {slotInfo = slotInfo, assistanceType = MDL.AssistanceFight.AssistanceType.Hero}) end if slotData.slotState == 0 then CTL.Sound.PlayGameSound("UI_invalid") else CTL.Sound.PlayGameSound("UI_click_01") end end break end end end ---@private 设置助阵坐骑信息 function UIAssistanceFightPanel:SetAssistanceHorse(mainHeroId) for i, v in ipairs (self.group_AssistanceHorse) do local position = i + 4 local isShowItem = CTL.AssistanceFight.ShowAssistanceHorse(self.selectFormationType, position) UIUtils.SetActive(v.gameObject, isShowItem) if isShowItem then local slotInfo = MDL.AssistanceFight.GetSlotInfo(self.selectFormationType, position) if slotInfo then local slotData = slotInfo.data local hasHero = slotData.heroId > 0 UIUtils.SetActive(v.img_HeroHead, hasHero) if hasHero then local horseData = DataSheetManager.HorseData:GetDataByHorseID(slotData.heroId) UIUtils.SetImageByAssetBundle(v.img_HeroHead, horseData.HorseIcon) end UIUtils.SetActive(v.img_Lock, slotData.slotState ~= 2) local triggerIsUnlock, itemIsUnlock = CTL.AssistanceFight.CheckSlotUnlockState(slotInfo) if slotData.slotState == 1 and triggerIsUnlock and itemIsUnlock then v.effect_Unlockable:PlayUIEffect() else v.effect_Unlockable:StopUIEffect() end local isShowRP = CTL.AssistanceFight.IsShowSlotRedPoint(slotInfo, mainHeroId) v.btn:SetRedPoint(isShowRP) UIUtils.SetActive(v.img_New, slotData.slotState == 2 and slotData.heroId == 0 and not isShowRP) if slotData.slotState == 2 and slotData.heroId == 0 and isShowRP then v.effect_AssistanceNew:PlayUIEffect() else v.effect_AssistanceNew:StopUIEffect() end UIUtils.SetActive(v.img_CEBg, hasHero) UIUtils.SetLabel(v.txt_CENum, slotData.gs) UIUtils.SetLabel(v.txt_AdditionPercentage, string.format(PercentStr, slotInfo.config.AssistanceGSProportion * 100)) end end end end ---@private 助阵坐骑点击事件 function UIAssistanceFightPanel:AssistanceHorseButton(comp) for i, v in ipairs (self.group_AssistanceHorse) do if comp == v.btn then -- 助战位 local slotInfo = MDL.AssistanceFight.GetSlotInfo(self.selectFormationType, i + 4) if slotInfo and slotInfo.data then local slotData = slotInfo.data if slotData.slotState == 0 or slotData.slotState == 1 then UIManager.OpenView(Const_UI_Lua.UIEnum.UIUnlockAssistanceHeroPanel, slotInfo) else if not self:IsValidFormation(self.selectFormationType) then -- 无效操作 CTL.Tips.AddTipsMsg(Const_IDS["IDS_AssistanceFight_ChooseHero_WrongHint"]) break end UIManager.OpenView(Const_UI_Lua.UIEnum.UICommonChangePanel, {slotInfo = slotInfo, assistanceType = MDL.AssistanceFight.AssistanceType.Horse}) end if slotData.slotState == 0 then CTL.Sound.PlayGameSound("UI_invalid") else CTL.Sound.PlayGameSound("UI_click_01") end end break end end end ---@private 设置助阵宝物信息 function UIAssistanceFightPanel:SetAssistanceTreasure(mainHeroId) for i, v in ipairs (self.group_AssistanceTreasure) do local position = i + 6 local isShowItem = CTL.AssistanceFight.ShowAssistanceTreasure(self.selectFormationType, position) UIUtils.SetActive(v.gameObject, isShowItem) if isShowItem then local slotInfo = MDL.AssistanceFight.GetSlotInfo(self.selectFormationType, position) if slotInfo then local slotData = slotInfo.data local hasHero = slotData.heroId > 0 UIUtils.SetActive(v.img_HeroHead, hasHero) if hasHero then local treasureData = DataSheetManager.TreasureData:GetDataByTreasureID(slotData.heroId) UIUtils.SetImageByAssetBundle(v.img_HeroHead, treasureData.TreasureIcon) end UIUtils.SetActive(v.img_Lock, slotData.slotState ~= 2) local triggerIsUnlock, itemIsUnlock = CTL.AssistanceFight.CheckSlotUnlockState(slotInfo) if slotData.slotState == 1 and triggerIsUnlock and itemIsUnlock then v.effect_Unlockable:PlayUIEffect() else v.effect_Unlockable:StopUIEffect() end local isShowRP = CTL.AssistanceFight.IsShowSlotRedPoint(slotInfo, mainHeroId) v.btn:SetRedPoint(isShowRP) UIUtils.SetActive(v.img_New, slotData.slotState == 2 and slotData.heroId == 0 and not isShowRP) if slotData.slotState == 2 and slotData.heroId == 0 and isShowRP then v.effect_AssistanceNew:PlayUIEffect() else v.effect_AssistanceNew:StopUIEffect() end UIUtils.SetActive(v.img_CEBg, hasHero) UIUtils.SetLabel(v.txt_CENum, slotData.gs) UIUtils.SetLabel(v.txt_AdditionPercentage, string.format(PercentStr, slotInfo.config.AssistanceGSProportion * 100)) end end end end ---@private 助阵宝物点击事件 function UIAssistanceFightPanel:AssistanceTreasureButton(comp) for i, v in ipairs (self.group_AssistanceTreasure) do if comp == v.btn then -- 助战位 local slotInfo = MDL.AssistanceFight.GetSlotInfo(self.selectFormationType, i + 6) if slotInfo and slotInfo.data then local slotData = slotInfo.data if slotData.slotState == 0 or slotData.slotState == 1 then UIManager.OpenView(Const_UI_Lua.UIEnum.UIUnlockAssistanceHeroPanel, slotInfo) else if not self:IsValidFormation(self.selectFormationType) then -- 无效操作 CTL.Tips.AddTipsMsg(Const_IDS["IDS_AssistanceFight_ChooseHero_WrongHint"]) break end UIManager.OpenView(Const_UI_Lua.UIEnum.UICommonChangePanel, {slotInfo = slotInfo, assistanceType = MDL.AssistanceFight.AssistanceType.Treasure}) end if slotData.slotState == 0 then CTL.Sound.PlayGameSound("UI_invalid") else CTL.Sound.PlayGameSound("UI_click_01") end end break end end end function UIAssistanceFightPanel:LoadHeroModel(heroId, index) local appearanceID = MDL.HeroSelect.GetAppearanceIDByHeroID(heroId) local curWeaponAppearanceId = MDL.HeroSelect.GetWeaponAppearanceIDByID(heroId) local _, modelPath, modelScale = UTL.UIRender.GetBattleHeroData(heroId, 2, nil, 0, appearanceID) local dir, actorDir, prefab = string.match(modelPath, "(%S*)/(%S*)/(%S*)") local animCtrlPath = string.gsub(modelPath, prefab, actorDir .. "_ZhuCheng.controller") UTL.UIRender.LoadEntityArrayModel(self.modelComponentDataHandle, modelPath, nil, nil, modelScale, nil, nil, animCtrlPath) local heroInfo = MDL.HeroSelect.GetHeroInfo(heroId) UTL.UIRender.ChangeEntityWeapon(self.modelComponentDataHandle, heroId, curWeaponAppearanceId, heroInfo.magicWeaponLevel, heroInfo.isMagicWeaponActive, true, true) UTL.UIRender.SetRenderEntityModelEffect(self.modelComponentDataHandle, heroId, appearanceID, false) local partList = MDL.DyeAppearance.GetDyeAppearancePartList(appearanceID) if partList then UTL.UIRender.SetModelDye(self.modelComponentDataHandle, appearanceID, partList, 1) end UTL.UIRender.SetRenderEntityParent(self.modelComponentDataHandle, self.HeroShow:GetHeroModelTransform(index)) end return UIAssistanceFightPanel