local UIHeroLightEffectTool = require "View/Common/UIHeroLightEffectTool" local UICharacterContrastPopUp = UIViewClass() local HERO_RENDER_ID = 1000002 local GRAY_FONT_COLOR = "92959A" local YELLOW_FONT_COLOR = "e8d588" local LightLeft = ConstAssetPathConfig.LightLeft local LightRight = ConstAssetPathConfig.LightRight local LEFT_RENDER_CAMERA_ID = 1 local RIGHT_RENDER_CAMERA_ID = 2 function UICharacterContrastPopUp:OnOpened(context) self.foldOutTypeDic = context.foldOutTypeDic or {} --展开的大类 self.lastSelectIndex = self.context.lastSelectIndex UIUtils.SetLabelText(self.UICommonPopUp.txt_Title, Const_IDS.IDS_PowerContrast_PowerContras) self:UpdateInfo(context) end function UICharacterContrastPopUp:OnCreated() self.heroLightEffectDatas = UIHeroLightEffectTool.CreateHeroLightEffectDatas(true) self.leftModelComponentHandle = UTL.UIRender.CreateModelComponentDatas(self.newRenderModel_Left) self.rightModelComponentHandle = UTL.UIRender.CreateModelComponentDatas(self.newRenderModel_Right) end function UICharacterContrastPopUp:UpdateInfo(info) self.sourceType2GsListDic = info.sourceType2GsListDic self.sourceTypeList = info.sourceTypeList --左边是自己 local leftHeroPortraitId = MDL.Character.GetCurWearPortrait() local leftHeroFrameId = MDL.Character.GetCurWearFrame() local leftHeroId = MDL.Player.GetCurShowId() self:SetPlayerInfo(self.group_LeftHero, leftHeroPortraitId, leftHeroFrameId, MDL.HeroSelect.GetTeamLevel(), BattleDataGetter.GetPlayerName(), info.leftTotalGS, MDL.Player.GetSelfGender(), info.leftTotalGS - info.rightTotalGS ) self:StopHeroLightEffect() local heroInfo = MDL.HeroSelect.GetHeroInfo(leftHeroId) local dyePartList = MDL.DyeAppearance.GetDyeAppearancePartList(heroInfo.curAppearanceId) UTL.UIRender.CreateHeroRenderTexture(self.leftModelComponentHandle, leftHeroId, heroInfo.curAppearanceId, HERO_RENDER_ID, LightLeft, true, dyePartList) UTL.UIRender.HeroEquipMagicWeapon(self.leftModelComponentHandle, leftHeroId, heroInfo.curWeaponAppearanceId, heroInfo.magicWeaponLevel, heroInfo.isMagicWeaponActive, false) if MDL.DivineWeaponForgeSoul.IsWeaponSoulActive(leftHeroId) then UTL.UIRender.LoadPlayerWeaponSoul(self.leftModelComponentHandle, MDL.DivineWeaponForgeSoul.GetWeaponForgeSoulSkillsLv(leftHeroId)) end local heroLightEffects = MDL.LightEffect.GetHeroWearLightEffectIDList(leftHeroId) self:BeginHeroLightEffect(self.newRenderModel_Left, heroLightEffects) --右边是对方 local headInfo = self.context.comparePlayerShowInfo self:SetPlayerInfo(self.group_RightHero, headInfo.PortraitId, headInfo.FrameId, headInfo.level, headInfo.name, info.rightTotalGS, headInfo.sex, info.rightTotalGS - info.leftTotalGS ) UTL.UIRender.CreateHeroRenderTexture(self.rightModelComponentHandle, headInfo.HeroID, headInfo.HeroAppearanceID, HERO_RENDER_ID, LightRight, true, headInfo.dyeCurPartList) UTL.UIRender.HeroEquipMagicWeapon(self.rightModelComponentHandle, headInfo.HeroID, headInfo.WeaponAppearanceID, headInfo.MagicWeaponBreak, headInfo.IsActiveMagicWeapon, false) local weaponSoul = CTL.DivineWeaponForgeSoul.GetWeaponSoulSkillByProtoMap(headInfo.HeroID, headInfo.weaponSoul) if weaponSoul then UTL.UIRender.LoadPlayerWeaponSoul(self.rightModelComponentHandle, weaponSoul) end self:BeginHeroLightEffect(self.newRenderModel_Right, headInfo.lightEffectIds) --对比数据 for _, v in ipairs(self.sourceTypeList) do self.loop_Contrast:AddData(v, 0) end --反向遍历,插入上次展开的条目 for i = #self.sourceTypeList, 1, -1 do local info = self.sourceTypeList[i] if self.foldOutTypeDic[info.sourceType] then self.foldOutTypeDic[info.sourceType] = nil self.loop_Contrast:SelectIndex(i - 1, true) end end if self.lastSelectIndex then self.loop_Contrast:MoveIndex(self.lastSelectIndex) end end function UICharacterContrastPopUp:SetPlayerInfo(comp, portraitId, frameId, level, name, totalGS, sex, offset) CTL.Character.SetPortraitAndFrame(comp.UIHeroHead150, portraitId, frameId, level) CTL.Player.OperateGenderImage(comp.image_Gender, sex) comp.txt_Name.text = name comp.txt_Num.text = totalGS if offset > 0 then comp.obj_state:SetState(1) UIUtils.SetActive(comp.group_Win, true) if comp.loc_icon.CurState == 1 then UIUtils.SetLabelText(comp.txt_result, Const_IDS.IDS_GuildWar_Win) comp.state_Color:SetState(0) else UIUtils.SetLocalizationImage(comp.img_Win, "1v1_msz_s.png") end elseif offset == 0 then comp.obj_state:SetState(1) UIUtils.SetActive(comp.group_Win, false) else comp.obj_state:SetState(0) UIUtils.SetActive(comp.group_Win, true) if comp.loc_icon.CurState == 1 then UIUtils.SetLabelText(comp.txt_result, Const_IDS.IDS_GuildWar_Lose) comp.state_Color:SetState(1) else UIUtils.SetLocalizationImage(comp.img_Win, "1v1_msz_b.png") end end end function UICharacterContrastPopUp:OnButtonClicked(comp) if comp == self.UICommonPopUp.btn_Close then self:CloseView(true) end end function UICharacterContrastPopUp:OnCellInit(scrollRect, index, cellTable, data) if data.sourceType and data.sourceType > 0 then UIUtils.SetActive(cellTable.btn_Info, data.gsTypeNum > 1) UIUtils.SetLabelText(cellTable.lab_Title, Const_IDS[data.ids]) cellTable.txt_LeftNum.text = data.leftSumGs >= data.rightSumGs and UTL.Color.FormatTextByColor(YELLOW_FONT_COLOR, data.leftSumGs) or UTL.Color.FormatTextByColor(GRAY_FONT_COLOR, data.leftSumGs) cellTable.txt_RightNum.text = data.rightSumGs >= data.leftSumGs and UTL.Color.FormatTextByColor(YELLOW_FONT_COLOR, data.rightSumGs) or UTL.Color.FormatTextByColor(GRAY_FONT_COLOR, data.rightSumGs) if self.foldOutTypeDic[data.sourceType] then cellTable.arrow_state:SetState(1) else cellTable.arrow_state:SetState(0) --向下 end else UIUtils.SetLabelText(cellTable.lab_Title, Const_IDS[data.gsConfig.ContrastIDS]) cellTable.txt_LeftNum.text = (data.gsLeft > 0 and data.gsLeft >= data.gsRight) and UTL.Color.FormatTextByColor(YELLOW_FONT_COLOR, data.gsLeft) or UTL.Color.FormatTextByColor(GRAY_FONT_COLOR, data.gsLeft) cellTable.txt_RightNum.text = (data.gsRight > 0 and data.gsRight >= data.gsLeft) and UTL.Color.FormatTextByColor(YELLOW_FONT_COLOR, data.gsRight) or UTL.Color.FormatTextByColor(GRAY_FONT_COLOR, data.gsRight) end end function UICharacterContrastPopUp:OnCellClicked(scrollRect, index, cellTable, target, data) if data.sourceType and data.sourceType > 0 then if self.foldOutTypeDic[data.sourceType] then --收起 self:OnFoldIn(cellTable, data, index) else --展开 self:OnFoldOut(cellTable, data, index) end else --跳转 local functionId = data.gsConfig.TurnID if functionId > 0 then self.context.foldOutTypeDic = self.foldOutTypeDic self.context.lastSelectIndex = self:GetSourceTypeItemIndex(index, data) CTL.ItemSources.ExecuteSourceFunctionById(functionId) end end end --算出小类所在大类的index function UICharacterContrastPopUp:GetSourceTypeItemIndex(cellIndex, data) local infoList = self.sourceType2GsListDic[data.gsConfig.typeSource] local index = cellIndex for i, v in ipairs(infoList) do if v == data then index = cellIndex - i break end end return index end function UICharacterContrastPopUp:OnFoldIn(cellTable, data, index) local infoList = self.sourceType2GsListDic[data.sourceType] cellTable.arrow_state:SetState(0) self.foldOutTypeDic[data.sourceType] = nil for i = index + #infoList, index + 1, -1 do self.loop_Contrast:RemoveIndex(i) end end function UICharacterContrastPopUp:OnFoldOut(cellTable, data, index) local infoList = self.sourceType2GsListDic[data.sourceType] cellTable.arrow_state:SetState(1) self.foldOutTypeDic[data.sourceType] = 1 if index == self.loop_Contrast.Count - 1 then for i, v in ipairs(infoList) do self.loop_Contrast:AddData(v, 1) end self.loop_Contrast:MoveEnd() else for i, v in ipairs(infoList) do self.loop_Contrast:InsertData(index + i, v, 1) end end end function UICharacterContrastPopUp:OnClosed() self:StopHeroLightEffect(true) UTL.UIRender.DisposeModelComponentData(self.leftModelComponentHandle) UTL.UIRender.DisposeModelComponentData(self.rightModelComponentHandle) end function UICharacterContrastPopUp:StopHeroLightEffect(isDispose) UIHeroLightEffectTool.StopHeroLightEffect(self.heroLightEffectDatas) if isDispose then self.heroLightEffectDatas = nil end end function UICharacterContrastPopUp:BeginHeroLightEffect(renderComp, heroLightEffects) if heroLightEffects then local datas = self.heroLightEffectDatas if renderComp == self.newRenderModel_Left then for _, lightEffectID in ipairs(heroLightEffects) do UIHeroLightEffectTool.PlayHeroLightEffect(datas, self, LEFT_RENDER_CAMERA_ID, UIHeroLightEffectTool.PlayLightEffectFuncEnum.PlayerModel,lightEffectID, LEFT_RENDER_CAMERA_ID) -- 当左右玩家装备的光效是同一个时需要用最后一个参数做一下区别 end elseif renderComp == self.newRenderModel_Right then for _, lightEffectID in ipairs(heroLightEffects) do UIHeroLightEffectTool.PlayHeroLightEffect(datas, self, RIGHT_RENDER_CAMERA_ID, UIHeroLightEffectTool.PlayLightEffectFuncEnum.PlayerModel,lightEffectID, RIGHT_RENDER_CAMERA_ID) end end end end function UICharacterContrastPopUp:PlayModelEffect(index, effectPath) if index == LEFT_RENDER_CAMERA_ID then return UTL.UIRender.PlayPsEffect(self.leftModelComponentHandle, effectPath) elseif index == RIGHT_RENDER_CAMERA_ID then return UTL.UIRender.PlayPsEffect(self.rightModelComponentHandle, effectPath) end end return UICharacterContrastPopUp