--[[ 冠军赛--决赛界面 ]] local UIHeroLightEffectTool = require "View/Common/UIHeroLightEffectTool" local UIHeroMatch1v1Stage5 = UIViewClass() local LEFT_HERO_RENDER_ID = 1000002 -- 只有武将的模型位置信息(左) local RIGHT_HERO_RENDER_ID = 1000003 -- 只有武将的模型位置信息(右) local Horse_RENDER_ID = 900001 -- 坐骑模型的位置信息 local OFFSET_RENDER_LEFT_POS = 5000 local OFFSET_RENDER_RIGHT_POS = 6000 local LightLeft = ConstAssetPathConfig.LightLeft local LightRight = ConstAssetPathConfig.LightRight local TimerString = string.FormatByIdsId(Const_IDS.IDS_HeroMatch1v1_StartInMinutes, "{0}:{1}:{2}") local BattleTimerString = UIUtils.GetLocalizedTxt(Const_IDS.IDS_HeroMatch1v1_SkipBattleTime).."{0}:{1}:{2}" function UIHeroMatch1v1Stage5:OnOpened(context) self:RegistSystemEvent(EventID.UI_HeroMatch1v1_RefreshPlayerInfo, self.SetFinalModal) -- 刷新选手信息 self.matchStageCfg = DataSheetManager.MatchStage:GetDataByID(MDL.HeroMatch1v1.Stage.match_2T1) self:SetFinalModal() end function UIHeroMatch1v1Stage5:OnCreated() self.heroLightEffectDatas = UIHeroLightEffectTool.CreateHeroLightEffectDatas(true) self.leftRenderModelHandle = UTL.UIRender.CreateModelComponentDatas(self.renderModel_Left) self.rightRenderModelHandle = UTL.UIRender.CreateModelComponentDatas(self.renderModel_Right) end function UIHeroMatch1v1Stage5:OnButtonClicked(comp) if comp == self.btn_WatchLeft then -- 左边观战 MDL.WatchBattle.WatchBattleRequest(self.leftPlayerInfo.groomId, MDL.WatchBattle.WatchBattleType.HeroMatch1v1, self.leftPlayerInfo.playerId, MDL.HeroMatch1v1.GetCurStageID()) elseif comp == self.btn_GuessLeft then -- 左边竞猜 MDL.HeroMatch1v1.HeroMatchBattleBetRequest(self.winnerInfo.stageId, self.groupInfo.groupId, self.leftPlayerInfo.acid) elseif comp == self.btn_WatchRight then -- 右边观战 MDL.WatchBattle.WatchBattleRequest(self.rightPlayerInfo.groomId, MDL.WatchBattle.WatchBattleType.HeroMatch1v1, self.rightPlayerInfo.playerId, MDL.HeroMatch1v1.GetCurStageID()) elseif comp == self.btn_GuessRight then -- 右边竞猜 MDL.HeroMatch1v1.HeroMatchBattleBetRequest(self.winnerInfo.stageId, self.groupInfo.groupId, self.rightPlayerInfo.acid) elseif comp == self.group_LeftHero.UIHeroHead.img_PlayerAvatarBg then -- 左边玩家信息 if self.leftPlayerInfo.acid ~= BattleDataGetter.GetAcID() then MDL.PlayerInteract.GetPlayerInteractiveInfoReq(self.leftPlayerInfo.acid) end elseif comp == self.group_RightHero.UIHeroHead.img_PlayerAvatarBg then -- 右边玩家信息 if self.rightPlayerInfo.acid ~= BattleDataGetter.GetAcID() then MDL.PlayerInteract.GetPlayerInteractiveInfoReq(self.rightPlayerInfo.acid) end end end function UIHeroMatch1v1Stage5:SetFinalModal() UIUtils.SetActive(self.renderModel_Left, false) UIUtils.SetActive(self.renderModel_Right, false) self.state_BtnLeft:SetState(2) self.state_BtnRight:SetState(2) self.winnerInfo = MDL.HeroMatch1v1.GetMatchStageInfo(MDL.HeroMatch1v1.Stage.match_2T1) self.groupInfo = self.winnerInfo.groupInfos[1] self.curTurn = self.groupInfo.turn self.leftPlayerInfo = self.groupInfo.playerInfos[1] self.rightPlayerInfo = self.groupInfo.playerInfos[2] self.leftHavePlayerInfo = self.leftPlayerInfo.acid ~= "" self.rightHavePlayerInfo = self.rightPlayerInfo.acid ~= "" -- 已竞猜 UIUtils.SetCanvasSortingOrderByMainCanvas(self.group_LeftHero.UIHeroHead.effectUpCanvas, self.group_LeftHero.canvas_Bet, CTL.Character.UpOrder.Common) UIUtils.SetCanvasSortingOrderByMainCanvas(self.group_RightHero.UIHeroHead.effectUpCanvas, self.group_RightHero.canvas_Bet, CTL.Character.UpOrder.Common) self.isLeftGuess = MDL.HeroMatch1v1.CheckIsGuessByGroupID_ACID(self.groupInfo.groupId, self.leftPlayerInfo.acid) UIUtils.SetActive(self.group_LeftHero.img_Bet, self.leftHavePlayerInfo and self.isLeftGuess or false) self.isRightGuess = MDL.HeroMatch1v1.CheckIsGuessByGroupID_ACID(self.groupInfo.groupId, self.rightPlayerInfo.acid) UIUtils.SetActive(self.group_RightHero.img_Bet, self.rightHavePlayerInfo and self.isRightGuess or false) self.cdTimer:EndTimer() if self.winnerInfo.state == MDL.HeroMatch1v1.Enum_State.Ready then -- 准备中 self:SetReadyInfo() elseif self.winnerInfo.state == MDL.HeroMatch1v1.Enum_State.Battle then -- 战斗中 if self.groupInfo.groupState == MDL.HeroMatch1v1.Enum_GroupState.Battle then self.state_BtnLeft:SetState(0) self.state_BtnRight:SetState(0) self.state_Match:SetState(1) self:SetStage5Score(self.group_ScoreFight[1], self.group_ScoreFight[2]) UIUtils.SetLabelText(self.txt_Round2, CTL.HeroMatch1v1.RoundTitle[self.winnerInfo.groupInfos[1].turn]) else if self.curTurn == 3 then self:SetFinishInfo() else self:SetReadyInfo(true) end end elseif self.winnerInfo.state == MDL.HeroMatch1v1.Enum_State.Matching then -- 匹配中 self:SetReadyInfo() else self:SetFinishInfo() end --左边是自己 self.group_LeftHero.state_Info:SetState(2) if self.leftHavePlayerInfo then UIUtils.SetActive(self.renderModel_Left, true) UIUtils.SetActive(self.state_BtnLeft, true) self.group_LeftHero.state_Info:SetState(0) local leftHeadInfo = MDL.HeroMatch1v1.GetPlayerInfoByACID(self.leftPlayerInfo.acid) if leftHeadInfo then CTL.HeroMatch1v1.SetHeroMatch1v1PlayerInfo(self.group_LeftHero, leftHeadInfo) -- 左边玩家 -- 加载左边模型 self:SetModel(leftHeadInfo, true) end else self.group_LeftHero.state_Info:SetState(1) end --右边是对方 self.group_RightHero.state_Info:SetState(2) if self.rightHavePlayerInfo then UIUtils.SetActive(self.renderModel_Right, true) UIUtils.SetActive(self.state_BtnRight, true) self.group_RightHero.state_Info:SetState(0) local rightHeadInfo = MDL.HeroMatch1v1.GetPlayerInfoByACID(self.rightPlayerInfo.acid) if rightHeadInfo then CTL.HeroMatch1v1.SetHeroMatch1v1PlayerInfo(self.group_RightHero, rightHeadInfo) -- 右边玩家 -- 加载右边模型 self:SetModel(rightHeadInfo, false) end else self.group_RightHero.state_Info:SetState(1) end end function UIHeroMatch1v1Stage5:SetReadyInfo(isBattleTips) if self.curTurn > 1 or self.isLeftGuess or not self.leftHavePlayerInfo then self.state_BtnLeft:SetState(2) else self.state_BtnLeft:SetState(isBattleTips and 2 or 1) end if self.curTurn > 1 or self.isRightGuess or not self.rightHavePlayerInfo then self.state_BtnRight:SetState(2) else self.state_BtnRight:SetState(isBattleTips and 2 or 1) end self.state_Match:SetState(0) self:SetCDTimer(isBattleTips) self:SetStage5Score(self.group_ScoreFight[1], self.group_ScoreFight[2]) end function UIHeroMatch1v1Stage5:SetCDTimer(isBattleTips) UIUtils.SetLabelText(self.txt_Round1, CTL.HeroMatch1v1.RoundTitle[self.winnerInfo.groupInfos[1].turn]) local timer = self.winnerInfo.stateEndTime - UTL.Time.GetServerTimestamp() if timer > 0 then if isBattleTips then self.cdTimer:ResetAndBeginCustomTimer(false, timer, 0, BattleTimerString) else self.cdTimer:ResetAndBeginCustomTimer(false, timer, 0, TimerString) end end end function UIHeroMatch1v1Stage5:SetFinishInfo() self.state_BtnLeft:SetState(2) self.state_BtnRight:SetState(2) self.state_Match:SetState(2) self:SetStage5Score(self.group_Score[1], self.group_Score[2]) end function UIHeroMatch1v1Stage5:SetStage5Score(WinLeftNum, WinRightNum) local left = self.leftPlayerInfo.winNum or 0 local right = self.rightPlayerInfo.winNum or 0 if self.leftHavePlayerInfo and self.rightHavePlayerInfo then local isLeftWin = left > right UIUtils.SetLabel(WinLeftNum, (isLeftWin and self.curTurn == 3) and UTL.Color.FormatTextByColor(MDL.HeroMatch1v1.WinColor, left) or UTL.Color.FormatWhiteColor(left)) UIUtils.SetLabel(WinRightNum, (not isLeftWin and self.curTurn == 3) and UTL.Color.FormatTextByColor(MDL.HeroMatch1v1.WinColor, right) or UTL.Color.FormatWhiteColor(right)) elseif self.leftHavePlayerInfo and not self.rightHavePlayerInfo then UIUtils.SetLabel(WinLeftNum, self.curTurn == 3 and UTL.Color.FormatTextByColor(MDL.HeroMatch1v1.WinColor, left) or UTL.Color.FormatWhiteColor(left)) UIUtils.SetLabel(WinRightNum, UTL.Color.FormatWhiteColor(0)) elseif self.rightHavePlayerInfo and not self.leftHavePlayerInfo then UIUtils.SetLabel(WinLeftNum, UTL.Color.FormatWhiteColor(0)) UIUtils.SetLabel(WinRightNum, self.curTurn == 3 and UTL.Color.FormatTextByColor(MDL.HeroMatch1v1.WinColor, right) or UTL.Color.FormatWhiteColor(right)) else UIUtils.SetLabel(WinLeftNum, UTL.Color.FormatWhiteColor(0)) UIUtils.SetLabel(WinRightNum, UTL.Color.FormatWhiteColor(0)) end end function UIHeroMatch1v1Stage5:SetModel(PlayerInfo, isLeft) local RenderModelHandle = isLeft and self.leftRenderModelHandle or self.rightRenderModelHandle local light = isLeft and LightLeft or LightRight local fpKey = isLeft and 1 or 2 -- 加载战骑 local horseData = {} local isRideHorse = true if PlayerInfo.horseAppearanceId > 0 then horseData = MDL.WarHorse.GetAppearanceInfoByID(PlayerInfo.horseAppearanceId) UTL.UIRender.CreateOtherHorseRenderTexture(RenderModelHandle, Horse_RENDER_ID, PlayerInfo) UTL.UIRender.StartRideHorse(RenderModelHandle, PlayerInfo.HorseID, PlayerInfo.HeroID, PlayerInfo) local isStandOnHorse = UTL.UIRender.GetOnHorseAnim(horseData) if not isStandOnHorse then UTL.UIRender.DriverEntityPlayAnim(RenderModelHandle, LuaConst.Animation_horseIdle) else UTL.UIRender.DriverEntityPlayAnim(RenderModelHandle, LuaConst.Animation_idle_loop) end elseif PlayerInfo.HorseID > 0 then horseData = DataSheetManager.HorseData:GetDataByHorseID(PlayerInfo.HorseID) UTL.UIRender.CreateOtherHorseRenderTexture(RenderModelHandle, Horse_RENDER_ID, PlayerInfo) UTL.UIRender.StartRideHorse(RenderModelHandle, PlayerInfo.HorseID, PlayerInfo.HeroID, PlayerInfo) local isStandOnHorse = UTL.UIRender.GetOnHorseAnim(horseData) if not isStandOnHorse then UTL.UIRender.DriverEntityPlayAnim(RenderModelHandle, LuaConst.Animation_horseIdle) else UTL.UIRender.DriverEntityPlayAnim(RenderModelHandle, LuaConst.Animation_idle_loop) end else isRideHorse = false local HERO_RENDER_ID = isLeft and LEFT_HERO_RENDER_ID or RIGHT_HERO_RENDER_ID UTL.UIRender.CreateHeroRenderTexture(RenderModelHandle, PlayerInfo.HeroID, PlayerInfo.HeroAppearanceID, HERO_RENDER_ID, light, true, PlayerInfo.dyeCurPartList) UTL.UIRender.HeroEquipMagicWeapon(RenderModelHandle, PlayerInfo.HeroID, PlayerInfo.WeaponAppearanceID, PlayerInfo.HeroBreakNums, PlayerInfo.IsActiveMagicWeapon, false) end --加载天命 local weaponSoul = CTL.DivineWeaponForgeSoul.GetWeaponSoulSkillByProtoMap(PlayerInfo.HeroID, PlayerInfo.weaponSoul) if weaponSoul then UTL.UIRender.LoadPlayerWeaponSoul(RenderModelHandle, weaponSoul) end -- 播放外观光效 if isRideHorse then if PlayerInfo.lightEffectIds and #PlayerInfo.lightEffectIds > 0 then for _, lightEffectID in ipairs(PlayerInfo.lightEffectIds) do UIHeroLightEffectTool.PlayHeroLightEffect(self.heroLightEffectDatas, self, 0, UIHeroLightEffectTool.PlayLightEffectFuncEnum.UI3DDriver, lightEffectID, fpKey) end end else if PlayerInfo.lightEffectIds and #PlayerInfo.lightEffectIds > 0 then for _, lightEffectID in ipairs(PlayerInfo.lightEffectIds) do UIHeroLightEffectTool.PlayHeroLightEffect(self.heroLightEffectDatas, self, 0, UIHeroLightEffectTool.PlayLightEffectFuncEnum.UI3DModel, lightEffectID, fpKey) end end end end function UIHeroMatch1v1Stage5:PlayModelEffect(index, effectPath) if index == LEFT_HERO_RENDER_ID then return UTL.UIRender.PlayDriverPsEffect(self.leftRenderModelHandle, effectPath) elseif index == RIGHT_HERO_RENDER_ID then return UTL.UIRender.PlayDriverPsEffect(self.rightRenderModelHandle, effectPath) end end function UIHeroMatch1v1Stage5:PlayDriverModelEffect(effectPath, fpKey) if fpKey == 1 then return UTL.UIRender.PlayDriverPsEffect(self.leftRenderModelHandle, effectPath) elseif fpKey == 2 then return UTL.UIRender.PlayDriverPsEffect(self.rightRenderModelHandle, effectPath) end end function UIHeroMatch1v1Stage5:PlayCharacterModelEffect(effectPath, fpKey) if fpKey == 1 then return UTL.UIRender.PlayPsEffect(self.leftRenderModelHandle, effectPath) elseif fpKey == 2 then return UTL.UIRender.PlayPsEffect(self.rightRenderModelHandle, effectPath) end end function UIHeroMatch1v1Stage5:OnClosed() UIHeroLightEffectTool.StopHeroLightEffect(self.heroLightEffectDatas) UTL.UIRender.DisposeModelComponentData(self.leftRenderModelHandle) UTL.UIRender.DisposeModelComponentData(self.rightRenderModelHandle) self.heroLightEffectDatas = nil end return UIHeroMatch1v1Stage5