public static GameStageInfo GetRelativeGameStageInfo(this GameStageInfo gameStageInfo, PlayerGroupInfo playerGroupInfo, string playerId) { var isCurrentTeamTeam1 = playerGroupInfo.GetTeamOfPlayer(playerId).TeamId == playerGroupInfo.Team1.TeamId; var relativePlayerGroupInfo = playerGroupInfo.GetRelativePlayerGroupInfo(playerId); var relativeGameStageInfo = (GameStageInfo)(gameStageInfo?.Clone()); if (relativeGameStageInfo.CurrentPlayer != null) { relativeGameStageInfo.CurrentPlayer = playerGroupInfo.GetRelativePlayerInfo(playerId, gameStageInfo.CurrentPlayer.PlayerId); } if (relativeGameStageInfo.CurrentBetActionList != null) { foreach (var betAction in relativeGameStageInfo.CurrentBetActionList) { betAction.PlayerInfo = playerGroupInfo.GetRelativePlayerInfo(playerId, betAction.PlayerInfo.PlayerId); } } if (relativeGameStageInfo?.CurrentBetResult?.BettingTeam != null) { relativeGameStageInfo.CurrentBetResult.BettingTeam = playerGroupInfo.GetRelativeTeamInfo(playerId, gameStageInfo.CurrentBetResult.BettingTeam.TeamId); } if (relativeGameStageInfo?.StickRoundInfoList != null) { foreach (var stickRoundInfo in relativeGameStageInfo.StickRoundInfoList) { if (stickRoundInfo?.PlayActionList != null) { foreach (var playAction in stickRoundInfo.PlayActionList) { playAction.PlayerInfo = playerGroupInfo.GetRelativePlayerInfo(playerId, playAction.PlayerInfo.PlayerId); } } if (stickRoundInfo?.StickResult?.Winner != null) { stickRoundInfo.StickResult.Winner = playerGroupInfo.GetRelativePlayerInfo(playerId, stickRoundInfo.StickResult.Winner.PlayerId); } } } if (relativeGameStageInfo?.CurrentPlayResult != null) { relativeGameStageInfo.CurrentPlayResult.PlayerGroupInfo = relativePlayerGroupInfo; if (!isCurrentTeamTeam1) { relativeGameStageInfo.CurrentPlayResult.Team1Score = gameStageInfo.CurrentPlayResult.Team2Score; relativeGameStageInfo.CurrentPlayResult.Team2Score = gameStageInfo.CurrentPlayResult.Team1Score; } } if (relativeGameStageInfo?.RoundResultList != null) { foreach (var roundResult in relativeGameStageInfo?.RoundResultList) { if (roundResult != null) { roundResult.PlayerGroupInfo = relativePlayerGroupInfo; roundResult.WinningTeam = playerGroupInfo.GetRelativeTeamInfo(playerId, roundResult.WinningTeam.TeamId); if (!isCurrentTeamTeam1) { var team1Score = roundResult.Team2FinalScore; var team2Score = roundResult.Team1FinalScore; roundResult.Team1FinalScore = team1Score; roundResult.Team2FinalScore = team2Score; } } } } if (relativeGameStageInfo?.GameResult != null) { relativeGameStageInfo.GameResult.PlayerGroupInfo = relativePlayerGroupInfo; relativeGameStageInfo.GameResult.WinningTeam = playerGroupInfo.GetRelativeTeamInfo(playerId, relativeGameStageInfo.GameResult.WinningTeam.TeamId); if (!isCurrentTeamTeam1) { var team1Score = relativeGameStageInfo.GameResult.Team2FinalScore; var team2Score = relativeGameStageInfo.GameResult.Team1FinalScore; relativeGameStageInfo.GameResult.Team1FinalScore = team1Score; relativeGameStageInfo.GameResult.Team2FinalScore = team2Score; } } return(relativeGameStageInfo); }