--[[ 3V3 头像信息设置 ]] local PlayerHeadCell3V3Helper = {} local private = {} local EnumMatchState = { Ready = 1, -- 准备阶段 Matching = 2, -- 匹配阶段 Roll = 3, --掷骰子 BanPick = 4, --禁选武将 Battle = 5, -- 战斗阶段 Finish = 6, -- 活动结束 } --%s后开始 local ReadyTimerString = string.FormatByIdsId(Const_IDS.IDS_HeroMatch3v3_StartInMinutes, "{0}:{1}:{2}") --设置3v3格子的信息,左边一个队伍信息,右边一个队伍信息 function PlayerHeadCell3V3Helper.Set3V3MatchPlayerNormalCellInit(cellIndexStr, cellTable, cellData, matchStageInfo, isShowPlayerHead) local leftTeamInfo, rightTeamInfo = cellData.teamInfos[1], cellData.teamInfos[2] if cellTable.txt_Group then UIUtils.SetLabel(cellTable.txt_Group, cellIndexStr) end private.SetGroupView(matchStageInfo.stageId, cellTable.groupLeft, cellData.matchGroupId, leftTeamInfo, isShowPlayerHead) private.SetGroupView(matchStageInfo.stageId, cellTable.groupRight, cellData.matchGroupId, rightTeamInfo, isShowPlayerHead) private.SetGroupMatchState(cellTable, cellData, matchStageInfo, leftTeamInfo, rightTeamInfo) end function private.SetGroupMatchState(cellTable, cellData, matchStageInfo, leftTeamInfo, rightTeamInfo) local leftHaveTeamInfo, rightHaveTeamInfo = not string.isNilOrEmpty(leftTeamInfo.teamId), not string.isNilOrEmpty(rightTeamInfo.teamId) if leftHaveTeamInfo and rightHaveTeamInfo then UIUtils.SetLabel(cellTable.txt_Round, string.FormatByIdsKey("IDS_HeroMatch1v1_Round5", matchStageInfo.turn)) local matchStage = matchStageInfo.state if leftTeamInfo.winNum-rightTeamInfo.winNum>=2 or rightTeamInfo.winNum-leftTeamInfo.winNum>=2 then matchStage = EnumMatchState.Finish end if matchStage == EnumMatchState.Ready or matchStage == EnumMatchState.Matching then private.SetWinState(cellTable, leftTeamInfo.winNum, rightTeamInfo.winNum, 1, false, false) cellTable.state_Match:SetState(0) private.SetReadyState(cellTable, matchStageInfo, ReadyTimerString) elseif matchStage == EnumMatchState.Roll then private.SetWinState(cellTable, leftTeamInfo.winNum, rightTeamInfo.winNum, 1, false, false) cellTable.state_Match:SetState(1) elseif matchStage == EnumMatchState.BanPick then private.SetWinState(cellTable, leftTeamInfo.winNum, rightTeamInfo.winNum, 1, false, false) cellTable.state_Match:SetState(1) elseif matchStage == EnumMatchState.Battle then if cellData.isBattleEnd then private.SetWinState(cellTable, leftTeamInfo.winNum, rightTeamInfo.winNum, 1, false, true) cellTable.state_Match:SetState(2) else private.SetWinState(cellTable, leftTeamInfo.winNum, rightTeamInfo.winNum, 1, false, false) cellTable.state_Match:SetState(1) end elseif matchStage == EnumMatchState.Finish then private.SetWinState(cellTable, leftTeamInfo.winNum, rightTeamInfo.winNum, 1, false, true) cellTable.state_Match:SetState(2) end else if leftHaveTeamInfo then cellTable.groupLeft.state_Btn:SetState(2) cellTable.state_Match:SetState(2) private.SetWinState(cellTable, leftTeamInfo.winNum, 0, 1, false, leftTeamInfo.winNum>0) elseif rightHaveTeamInfo then cellTable.groupRight.state_Btn:SetState(2) cellTable.state_Match:SetState(2) private.SetWinState(cellTable, 0, rightTeamInfo.winNum, 1, false, rightTeamInfo.winNum>0) end end end function private.SetGroupView(matchStageId, viewComp, matchGroupId, viewData, isSetPlayerDetail) local isHasViewData = not string.isNilOrEmpty(viewData.teamId) if isHasViewData then UIUtils.SetActive(viewComp.btn_Watch, true) viewComp.state_Info:SetState(0) if CTL.TeamFairChampionship.IsFilterMatchStageByStageId(matchStageId) then viewComp.state_Btn:SetState(2) else local betRate = CTL.TeamFairChampionship.ParseBetRate(viewData.Multiplier) if MDL.TeamFairChampionship.GetMatchGroupTeamBetInfo(matchStageId, matchGroupId, viewData.teamId) then viewComp.state_Btn:SetState(1) UIUtils.SetLabel(viewComp.txt_MoreRate, betRate) else viewComp.state_Btn:SetState(0) UIUtils.SetLabel(viewComp.txt_Rate, betRate) end end UIUtils.SetLabel(viewComp.txt_TeamName, UTL.Color.FormatTextByColor("fff08b", viewData.teamName)) UIUtils.SetActive(viewComp.img_Self, viewData.teamId == MDL.SpecialTeam.GetMyTeamId()) if isSetPlayerDetail then private.SetGroupPlayerInfo(viewComp, viewData) end private.SetContractFlag(viewComp.lab_Type, viewComp.state_Type, matchStageId, matchGroupId, viewData) else UIUtils.SetActive(viewComp.btn_Watch, false) viewComp.state_Btn:SetState(2) viewComp.state_Info:SetState(1) end viewComp.state_Win:SetState(3) end --优先显示同势力,再同服,再同战区 function private.SetContractFlag(lab_Type, state_Type, matchStageId, matchGroupId, teamInfo) if teamInfo.teamId == MDL.SpecialTeam.GetMyTeamId() then state_Type:SetState(5) return end --小组赛竞猜标识,只在小组赛显示 if MDL.TeamFairChampionship.GetMatchGroupTeamBetInfo(matchStageId, matchGroupId, teamInfo.teamId) then state_Type:SetState(4) UIUtils.SetLabelText(lab_Type, Const_IDS.IDS_HeroMatch3v3_AlreadyPick) return end local teamRecommandData = CTL.TeamFairChampionship.GetTeamRecommandData(teamInfo) --同势力 if teamRecommandData.isHasSameGuild then state_Type:SetState(0) UIUtils.SetLabelText(lab_Type, Const_IDS.IDS_FairTournament_SameGuild) return end --同服 if teamRecommandData.isHasSameServer then state_Type:SetState(1) UIUtils.SetLabelText(lab_Type, Const_IDS.IDS_FairTournament_SameServer) return end --同战区 if teamRecommandData.IsHasSameWarZone then state_Type:SetState(2) UIUtils.SetLabelText(lab_Type, Const_IDS.IDS_FairTournament_SameZone) return end --热门 if teamRecommandData.isHasHotMatch then state_Type:SetState(3) UIUtils.SetLabelText(lab_Type, Const_IDS.IDS_FairTournament_HotHot) return end state_Type:SetState(5) end function private.SetGroupPlayerInfo(comp, info) for i=1 ,3 do local headInfo = MDL.TeamFairChampionship.GetPlayerInfoByACID(info.memberAcids[i]) private.SetSinglePlayerInfo(headInfo, comp.playerHeads[i], comp.playerNames[i].txt_Name, comp.playerNames[i], comp) end end function private.SetSinglePlayerInfo(showInfo, headComp, nameTxt, nameGroup, comp) if showInfo then UIUtils.SetActive(headComp.gameObject, true) UIUtils.SetActive(nameGroup.gameObject, true) if showInfo.acid == BattleDataGetter.GetAcID() then UIUtils.SetLabel(nameTxt, UTL.Color.FormatTextByColor("fff08b", showInfo.name)) else UIUtils.SetLabel(nameTxt, UTL.Color.FormatWhiteColor(showInfo.name)) end CTL.Character.SetPortraitAndFrame(headComp, showInfo.PortraitId, showInfo.FrameId) UIUtils.SetCanvasSortingOrderByMainCanvas(headComp.effectUpCanvas, comp.group_Top, CTL.Character.UpOrder.Common) else UIUtils.SetActive(headComp.gameObject, false) nameTxt.text = nil UIUtils.SetActive(nameGroup.gameObject, false) end end function private.SetWinState(cellTable, leftScore, rightScore, winNumState, isRankCell, isBattleFinsh) local leftScoreStr, rightScoreStr = nil, nil if leftScore >= rightScore then if isBattleFinsh then leftScoreStr = UTL.Color.FormatTextByColor(MDL.HeroMatch3v3.WinColor, leftScore) else leftScoreStr = leftScore end rightScoreStr = rightScore else leftScoreStr = leftScore if isBattleFinsh then rightScoreStr = UTL.Color.FormatTextByColor(MDL.HeroMatch3v3.WinColor, rightScore) else rightScoreStr = rightScore end end if isRankCell then UIUtils.SetLabel(cellTable.groupLeft.txt_WinNum, leftScoreStr) UIUtils.SetLabel(cellTable.groupRight.txt_WinNum, rightScoreStr) else UIUtils.SetLabel(cellTable.txt_LeftWinNum, leftScoreStr) UIUtils.SetLabel(cellTable.txt_RightWinNum, rightScoreStr) end cellTable.groupLeft.state_Win:SetState(winNumState) cellTable.groupRight.state_Win:SetState(winNumState) end function private.SetReadyState(cellTable, matchStageInfo, showStr) cellTable.cdTimer:ResetAndBeginCustomTimer(false, matchStageInfo.stateEndTime - UTL.Time.GetServerTimestamp(), 0, showStr) end function PlayerHeadCell3V3Helper.On3V3MatchPlayerCellClick(cellTable, cellData, target, matchStageInfo) if target == cellTable.groupLeft.btn_Watch then CTL.TeamFairChampionship.TryWatchBattle(matchStageInfo.stageId, cellData, cellData.teamInfos[1].teamId) elseif target == cellTable.groupLeft.btn_Guess or target == cellTable.groupLeft.btn_GuessMore then CTL.TeamFairChampionship.OpenBetKeyBoard(cellData.matchGroupId, cellData.groupId, cellData.teamInfos[1], matchStageInfo.stageId, matchStageInfo.turn) elseif target == cellTable.groupRight.btn_Watch then CTL.TeamFairChampionship.TryWatchBattle(matchStageInfo.stageId, cellData, cellData.teamInfos[2].teamId) elseif target == cellTable.groupRight.btn_Guess or target == cellTable.groupRight.btn_GuessMore then CTL.TeamFairChampionship.OpenBetKeyBoard(cellData.matchGroupId, cellData.groupId, cellData.teamInfos[2], matchStageInfo.stageId, matchStageInfo.turn) else for index, playerHead in ipairs(cellTable.groupLeft.playerHeads) do if target == playerHead.img_PlayerAvatarBg then MDL.PlayerInteract.GetPlayerInteractiveInfoReq(cellData.teamInfos[1].memberAcids[index]) return end end for index, playerHead in ipairs(cellTable.groupRight.playerHeads) do if target == playerHead.img_PlayerAvatarBg then MDL.PlayerInteract.GetPlayerInteractiveInfoReq(cellData.teamInfos[2].memberAcids[index]) return end end end end --设置8进4的格子信息 function PlayerHeadCell3V3Helper.Set3V3MatchPlayerRankCellInit(leftFlagIndex, cellIndex, cellTable, resultLineStateComp, cellData, matchStageInfo) local leftTeamInfo, rightTeamInfo = cellData.teamInfos[1], cellData.teamInfos[2] local isLeftGroup = cellIndex<=leftFlagIndex private.SetRankBattleGroup(matchStageInfo.stageId, isLeftGroup, cellTable[1], cellData, leftTeamInfo, false) private.SetRankBattleGroup(matchStageInfo.stageId, isLeftGroup, cellTable[2], cellData, rightTeamInfo, false) private.SetRankBattleGroup(matchStageInfo.stageId, isLeftGroup, cellTable[3], cellData, leftTeamInfo, true) UIUtils.SetActive(cellTable[3].groupLeft.gameObject, false) UIUtils.SetActive(cellTable[3].groupRight.gameObject, false) private.SetBattleGroupMatchState(isLeftGroup, cellTable, cellData, matchStageInfo, leftTeamInfo, rightTeamInfo, resultLineStateComp) end function private.SetRankBattleGroup(matchStageId, isLeft, groupCell, groupData, teamInfo, isResultCell) local targetGroup = nil if isLeft then UIUtils.SetActive(groupCell.groupLeft.gameObject, true) UIUtils.SetActive(groupCell.groupRight.gameObject, false) targetGroup = groupCell.groupLeft else UIUtils.SetActive(groupCell.groupLeft.gameObject, false) UIUtils.SetActive(groupCell.groupRight.gameObject, true) targetGroup = groupCell.groupRight end private.SetGroupView(matchStageId, targetGroup, groupData.matchGroupId, teamInfo, false) targetGroup.state_Win:SetState(3) groupCell.state_Match:SetState(2) if isResultCell then targetGroup.state_Btn:SetState(2) end end --前两个是对战的格子,后一个是显示结果或者比赛状态的格子 function private.SetBattleGroupMatchState(isLeft, cellTableArr, cellData, matchStageInfo, leftTeamInfo, rightTeamInfo, resultLineStateComp) local leftHaveTeamInfo, rightHaveTeamInfo = not string.isNilOrEmpty(leftTeamInfo.teamId), not string.isNilOrEmpty(rightTeamInfo.teamId) if leftHaveTeamInfo and rightHaveTeamInfo then UIUtils.SetLabel(cellTableArr[3].txt_Round, string.FormatByIdsKey("IDS_HeroMatch1v1_Round5", matchStageInfo.turn)) local matchStage = matchStageInfo.state if leftTeamInfo.winNum-rightTeamInfo.winNum>=2 or rightTeamInfo.winNum-leftTeamInfo.winNum>=2 then matchStage = EnumMatchState.Finish end if matchStage == EnumMatchState.Ready or matchStage == EnumMatchState.Matching then private.SetRankWinNum(isLeft, cellTableArr, cellData, matchStageInfo, leftTeamInfo, rightTeamInfo, false) cellTableArr[3].state_Match:SetState(0) resultLineStateComp:SetState(0) private.SetReadyState(cellTableArr[3], matchStageInfo, ReadyTimerString) elseif matchStage == EnumMatchState.Roll then private.SetRankWinNum(isLeft, cellTableArr, cellData, matchStageInfo, leftTeamInfo, rightTeamInfo, false) cellTableArr[3].state_Match:SetState(1) resultLineStateComp:SetState(0) elseif matchStage == EnumMatchState.BanPick then private.SetRankWinNum(isLeft, cellTableArr, cellData, matchStageInfo, leftTeamInfo, rightTeamInfo, false) cellTableArr[3].state_Match:SetState(1) resultLineStateComp:SetState(0) elseif matchStage == EnumMatchState.Battle then if cellData.isBattleEnd then cellTableArr[3].state_Match:SetState(2) private.SetRankWinNum(isLeft, cellTableArr, cellData, matchStageInfo, leftTeamInfo, rightTeamInfo, true) resultLineStateComp:SetState(0) else cellTableArr[3].state_Match:SetState(1) private.SetRankWinNum(isLeft, cellTableArr, cellData, matchStageInfo, leftTeamInfo, rightTeamInfo, false) resultLineStateComp:SetState(0) end elseif matchStage == EnumMatchState.Finish then cellTableArr[3].state_Match:SetState(2) private.SetRankWinNum(isLeft, cellTableArr, cellData, matchStageInfo, leftTeamInfo, rightTeamInfo, true) private.SetRankWinState(isLeft, cellTableArr, cellData, matchStageInfo, leftTeamInfo, rightTeamInfo, resultLineStateComp) end else if leftHaveTeamInfo then cellTableArr[1].groupLeft.state_Btn:SetState(2) cellTableArr[1].groupRight.state_Btn:SetState(2) cellTableArr[3].state_Match:SetState(2) private.SetRankWinNum(isLeft, cellTableArr, cellData, matchStageInfo, leftTeamInfo, rightTeamInfo, leftTeamInfo.winNum>0) private.SetRankWinState(isLeft, cellTableArr, cellData, matchStageInfo, leftTeamInfo, rightTeamInfo, resultLineStateComp) elseif rightHaveTeamInfo then cellTableArr[2].groupLeft.state_Btn:SetState(2) cellTableArr[2].groupRight.state_Btn:SetState(2) cellTableArr[3].state_Match:SetState(2) private.SetRankWinNum(isLeft, cellTableArr, cellData, matchStageInfo, leftTeamInfo, rightTeamInfo, rightTeamInfo.winNum>0) private.SetRankWinState(isLeft, cellTableArr, cellData, matchStageInfo, leftTeamInfo, rightTeamInfo, resultLineStateComp) else cellTableArr[3].state_Match:SetState(2) resultLineStateComp:SetState(0) private.SetRankBattleGroup(matchStageInfo.stageId, isLeft, cellTableArr[3], cellData, leftTeamInfo, true) end end end function private.SetRankWinNum(isLeft, cellTableArr, cellData, matchStageInfo, leftTeamInfo, rightTeamInfo, isBattleFinsh) if matchStageId == MDL.TeamFairChampionship.Stage.match_4T2 then if isLeft then private.SetWinState(cellTableArr[1], leftTeamInfo.winNum, rightTeamInfo.winNum, 2, true, isBattleFinsh) private.SetWinState(cellTableArr[2], rightTeamInfo.winNum, leftTeamInfo.winNum, 2, true, isBattleFinsh) else private.SetWinState(cellTableArr[1], rightTeamInfo.winNum, leftTeamInfo.winNum, 2, true, isBattleFinsh) private.SetWinState(cellTableArr[2], leftTeamInfo.winNum, rightTeamInfo.winNum, 2, true, isBattleFinsh) end else if isLeft then private.SetWinState(cellTableArr[1], leftTeamInfo.winNum, rightTeamInfo.winNum, 0, true, isBattleFinsh) private.SetWinState(cellTableArr[2], rightTeamInfo.winNum, leftTeamInfo.winNum, 1, true, isBattleFinsh) else private.SetWinState(cellTableArr[1], rightTeamInfo.winNum, leftTeamInfo.winNum, 0, true, isBattleFinsh) private.SetWinState(cellTableArr[2], leftTeamInfo.winNum, rightTeamInfo.winNum, 1, true, isBattleFinsh) end end end function private.SetRankWinState(isLeft, cellTableArr, cellData, matchStageInfo, leftTeamInfo, rightTeamInfo, resultLineStateComp) if leftTeamInfo.winNum>=rightTeamInfo.winNum then resultLineStateComp:SetState(1) private.SetRankBattleGroup(matchStageInfo.stageId, isLeft, cellTableArr[3], cellData, leftTeamInfo, true) else resultLineStateComp:SetState(2) private.SetRankBattleGroup(matchStageInfo.stageId, isLeft, cellTableArr[3], cellData, rightTeamInfo, true) end end return PlayerHeadCell3V3Helper