--[[ 冠军赛--决赛界面 ]] local UIHeroLightEffectTool = require "View/Common/UIHeroLightEffectTool" local UIFairSoloTournamentStage5 = UIViewClass() local LEFT_HERO_RENDER_ID = 1000002 -- 只有武将的模型位置信息(左) local RIGHT_HERO_RENDER_ID = 1000003 -- 只有武将的模型位置信息(右) local Horse_RENDER_ID = 900001 -- 坐骑模型的位置信息 local OFFSET_RENDER_LEFT_POS = 1000 local OFFSET_RENDER_RIGHT_POS = 2000 local LightLeft = ConstAssetPathConfig.LightLeft local LightRight = ConstAssetPathConfig.LightRight function UIFairSoloTournamentStage5:OnCreated() self.heroLightEffectDatas = UIHeroLightEffectTool.CreateHeroLightEffectDatas(true) self.leftRenderModelHandle = UTL.UIRender.CreateModelComponentDatas(self.renderModel_Left) self.rightRenderModelHandle = UTL.UIRender.CreateModelComponentDatas(self.renderModel_Right) end function UIFairSoloTournamentStage5:OnOpened(context) self.matchStageCfg = DataSheetManager.FairMatchStage:GetDataByID(MDL.FairSoloTournament.ConfigStage.Finals_2T1) self.stageID = MDL.FairSoloTournament.ConfigStage.Finals_2T1 self:RegistSystemEvent(EventID.UI_FairSoloTournament_RefreshStageInfo, self.RefreshStageInfo) self:RegistSystemEvent(EventID.UI_FairSoloTournament_RefreshPlayerInfo, self.RefreshStageInfo) self:RegistSystemEvent(EventID.UI_FairSoloTournament_RefreshMyInfo, self.RefreshStageInfo) self:RefreshStageInfo() end function UIFairSoloTournamentStage5:RefreshStageInfo() local stageInfo = MDL.FairSoloTournament.GetStageInfo(self.stageID) if stageInfo == nil then MDL.FairSoloTournament.FairTournamentGetStageInfoReq(self.stageID) else self.stageInfo = stageInfo if MDL.FairSoloTournament.TryGetAllPlayerInfo(self.stageID) == false then self:SetFinalModal() end end end function UIFairSoloTournamentStage5:OnButtonClicked(comp) if comp == self.group_LeftHero.btn_LeftWatch then -- 左边观战 CTL.FairSoloTournament.WatchBattle(self.groupInfo, self.leftPlayerInfo.gRoomId, self.leftPlayerInfo.playerId, self.leftPlayerInfo.acid, self.stageID) elseif comp == self.group_LeftHero.btn_LeftGuess or comp == self.group_LeftHero.btn_LeftGuessMore then -- 左边竞猜 CTL.FairSoloTournament.OpenBetKeyBoard(self.groupInfo.groupId, self.leftPlayerInfo.acid, CTL.FairSoloTournament.ParseBetRate(self.leftPlayerInfo.multiplier), self.stageID, self.groupInfo.turn) elseif comp == self.group_RightHero.btn_RightWatch then -- 右边观战 CTL.FairSoloTournament.WatchBattle(self.groupInfo, self.rightPlayerInfo.gRoomId, self.rightPlayerInfo.playerId, self.rightPlayerInfo.acid, self.stageID) elseif comp == self.group_RightHero.btn_RightGuess or comp == self.group_RightHero.btn_RightGuessMore then -- 右边竞猜 CTL.FairSoloTournament.OpenBetKeyBoard(self.groupInfo.groupId, self.rightPlayerInfo.acid, CTL.FairSoloTournament.ParseBetRate(self.rightPlayerInfo.multiplier), self.stageID, self.groupInfo.turn) 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 UIFairSoloTournamentStage5:SetFinalModal() UIUtils.SetActive(self.renderModel_Left, false) UIUtils.SetActive(self.renderModel_Right, false) self.group_LeftHero.state_BtnLeft:SetState(2) self.group_RightHero.state_BtnRight:SetState(2) self.groupInfo = self.stageInfo.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 ~= "" -- 已竞猜 self.isLeftGuess = MDL.FairSoloTournament.CheckIsGuessByGroupID_ACID(self.groupInfo.groupId, self.leftPlayerInfo.acid, false) if self.isLeftGuess then self.group_LeftHero.state_BtnLeft:SetState(1) self.group_LeftHero.txt_MoreRate.text = string.FormatByIdsId(Const_IDS.IDS_FairTournament_PickRate, CTL.FairSoloTournament.ParseBetRate(self.leftPlayerInfo.multiplier)) else self.group_LeftHero.state_BtnLeft:SetState(0) self.group_LeftHero.txt_Rate.text = string.FormatByIdsId(Const_IDS.IDS_FairTournament_PickRate, CTL.FairSoloTournament.ParseBetRate(self.leftPlayerInfo.multiplier)) end self.isRightGuess = MDL.FairSoloTournament.CheckIsGuessByGroupID_ACID(self.groupInfo.groupId, self.rightPlayerInfo.acid, false) if self.isRightGuess then self.group_RightHero.state_BtnRight:SetState(1) self.group_RightHero.txt_MoreRate.text = string.FormatByIdsId(Const_IDS.IDS_FairTournament_PickRate, CTL.FairSoloTournament.ParseBetRate(self.rightPlayerInfo.multiplier)) else self.group_RightHero.state_BtnRight:SetState(0) self.group_RightHero.txt_Rate.text = string.FormatByIdsId(Const_IDS.IDS_FairTournament_PickRate, CTL.FairSoloTournament.ParseBetRate(self.rightPlayerInfo.multiplier)) end self.cdTimer:EndTimer() self.txt_NotStartedInfo.text = nil if self.stageInfo.state == MDL.FairSoloTournament.Enum_State.Ready or self.stageInfo.state == MDL.FairSoloTournament.Enum_State.Matching then -- 准备中 self:SetReadyInfo() elseif self.stageInfo.state == MDL.FairSoloTournament.Enum_State.Battle then -- 战斗中 if self.groupInfo.isBattleEnd == false then self.state_Match:SetState(2) self.txt_Score3.text = self.leftPlayerInfo.winNum .. " : " .. self.rightPlayerInfo.winNum else self:SetFinishInfo() end elseif self.stageInfo.state == MDL.FairSoloTournament.Enum_State.Roll then self.state_Match:SetState(1) self.txt_Score2.text = self.leftPlayerInfo.winNum .. " : " .. self.rightPlayerInfo.winNum elseif self.stageInfo.state == MDL.FairSoloTournament.Enum_State.BanPick then self.state_Match:SetState(2) self.txt_Score3.text = self.leftPlayerInfo.winNum .. " : " .. self.rightPlayerInfo.winNum elseif self.stageInfo.state == MDL.FairSoloTournament.Enum_State.Finish then self:SetFinishInfo() end --左边是自己 UIUtils.SetActive(self.group_LeftHero.btn_LeftWatch, true) self.group_LeftHero.state_Info:SetState(2) if self.leftHavePlayerInfo then UIUtils.SetActive(self.renderModel_Left, true) self.group_LeftHero.state_Info:SetState(0) local leftHeadInfo = MDL.FairSoloTournament.GetPlayerShowInfo(self.leftPlayerInfo.acid) if leftHeadInfo then CTL.FairSoloTournament.SetBattleCellInfo(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) self.group_RightHero.state_Info:SetState(0) local rightHeadInfo = MDL.FairSoloTournament.GetPlayerShowInfo(self.rightPlayerInfo.acid) if rightHeadInfo then CTL.FairSoloTournament.SetBattleCellInfo(self.group_RightHero, rightHeadInfo) -- 右边玩家 -- 加载右边模型 self:SetModel(rightHeadInfo, false) end else self.group_RightHero.state_Info:SetState(1) self.group_LeftHero.state_BtnLeft:SetState(2) UIUtils.SetActive(self.group_LeftHero.btn_LeftWatch, false) end end function UIFairSoloTournamentStage5:SetReadyInfo() self.state_Match:SetState(0) local timer = self.stageInfo.stateEndTime - UTL.Time.GetServerTimestamp() if timer > 0 then self.txt_NotStartedInfo.text = string.FormatByIdsId(Const_IDS.IDS_FairTournament_RoundStart, self.groupInfo.turn) self.cdTimer:ResetAndBeginCustomTimer(false, timer, 0, "{0}:{1}:{2}") end self.txt_Score1.text = self.leftPlayerInfo.winNum .. " : " .. self.rightPlayerInfo.winNum end function UIFairSoloTournamentStage5:SetFinishInfo() self.state_Match:SetState(3) self:SetStage5Score(self.txt_WinLeftNum, self.txt_WinRightNum) end function UIFairSoloTournamentStage5: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 UTL.Color.FormatTextByColor(MDL.HeroMatch1v1.WinColor, left) or UTL.Color.FormatWhiteColor(left)) UIUtils.SetLabel(WinRightNum, not isLeftWin and UTL.Color.FormatTextByColor(MDL.HeroMatch1v1.WinColor, right) or UTL.Color.FormatWhiteColor(right)) elseif self.leftHavePlayerInfo and not self.rightHavePlayerInfo then UIUtils.SetLabel(WinLeftNum, UTL.Color.FormatTextByColor(MDL.HeroMatch1v1.WinColor, 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, UTL.Color.FormatTextByColor(MDL.HeroMatch1v1.WinColor, right)) else UIUtils.SetLabel(WinLeftNum, UTL.Color.FormatWhiteColor(0)) UIUtils.SetLabel(WinRightNum, UTL.Color.FormatWhiteColor(0)) end end function UIFairSoloTournamentStage5: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 UIFairSoloTournamentStage5: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 UIFairSoloTournamentStage5: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 UIFairSoloTournamentStage5: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 UIFairSoloTournamentStage5:OnClosed() UIHeroLightEffectTool.StopHeroLightEffect(self.heroLightEffectDatas) UTL.UIRender.DisposeModelComponentData(self.leftRenderModelHandle) UTL.UIRender.DisposeModelComponentData(self.rightRenderModelHandle) self.heroLightEffectDatas = nil end return UIFairSoloTournamentStage5