Exemple #1
0
        /// <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.");
 }