/// <summary> /// Gets the average rating of an individual team /// </summary> /// <param name="team"></param> /// <returns></returns> /// <exception cref="ArgumentOutOfRangeException"></exception> public double GetTeamAverage(MultiplayerTeam team) { List <ScoreboardUser> users; switch (team) { case MultiplayerTeam.Red: users = MultiplayerScores.FindAll(x => x.Scoreboard.Team == MultiplayerTeam.Red && !x.HasQuit); break; case MultiplayerTeam.Blue: users = MultiplayerScores.FindAll(x => x.Scoreboard.Team == MultiplayerTeam.Blue && !x.HasQuit); break; default: throw new ArgumentOutOfRangeException(nameof(team), team, null); } if (users.Count == 0) { return(0); } var sum = 0d; users.ForEach(x => { var rating = x.RatingProcessor.CalculateRating(x.Processor); if (x.Processor.MultiplayerProcessor.IsEliminated || x.Processor.MultiplayerProcessor.IsRegeneratingHealth) { rating = 0; } sum += rating; }); return(sum / users.Count); }
/// <inheritdoc /> /// <summary> /// </summary> internal Scoreboard(ScoreboardType type, IEnumerable <ScoreboardUser> users, MultiplayerTeam team = MultiplayerTeam.Red) { Type = type; Team = team; if (OnlineManager.CurrentGame != null) { OnlineManager.Client.OnGameJudgements += OnGameJudgements; OnlineManager.Client.OnPlayerBattleRoyaleEliminated += OnPlayerBattleRoyaleEliminated; if (OnlineManager.CurrentGame.Ruleset == MultiplayerGameRuleset.Battle_Royale) { BattleRoyalePlayersLeft = new Bindable <int>(0) { Value = MapManager.Selected.Value.Scores.Value.Count + 1 }; } } if (Type == ScoreboardType.Teams) { TeamBanner = new ScoreboardTeamBanner(this) { Parent = this, Y = 235, }; if (Team == MultiplayerTeam.Blue) { TeamBanner.X = WindowManager.Width - TeamBanner.Width; } } if (OnlineManager.CurrentGame?.Ruleset == MultiplayerGameRuleset.Battle_Royale) { BattleRoyaleBanner = new ScoreboardBattleRoyaleBanner(this) { Parent = this, Y = 235 }; } else if (OnlineManager.CurrentGame?.Ruleset == MultiplayerGameRuleset.Free_For_All && MapManager.Selected.Value.Scores.Value.Count == 1) { OneVsOneWinsBanner = new ScoreboardOneVsOneWins(this) { Parent = this, Y = 235 }; } Users = users.OrderBy(x => x.Processor.Health <= 0).ThenByDescending(x => x.RatingProcessor.CalculateRating(x.Processor.Accuracy)).ToList(); SetTargetYPositions(); Users.ForEach(x => { x.Scoreboard = this; x.Y = x.TargetYPosition; if (Team == MultiplayerTeam.Blue) { x.X = WindowManager.Width; } }); }
public static MultiplayerTeam EnemyOf(MultiplayerTeam team) { if (team == MultiplayerTeam.Red) { return MultiplayerTeam.Blue; } else if (team == MultiplayerTeam.Blue) { return MultiplayerTeam.Red; } throw new NotImplementedException("The specified team is not implemented."); }