Exemplo n.º 1
0
        private void load(OsuConfigManager config, IAPIProvider api, CancellationToken cancellationToken)
        {
            scoringMode = config.GetBindable <ScoringMode>(OsuSetting.ScoreDisplayMode);

            foreach (var user in playingUsers)
            {
                var scoreProcessor = new SpectatorScoreProcessor(user.UserID);
                scoreProcessor.Mode.BindTo(scoringMode);
                scoreProcessor.TotalScore.BindValueChanged(_ => Scheduler.AddOnce(updateTotals));
                AddInternal(scoreProcessor);

                var trackedUser = new TrackedUserData(user, scoreProcessor);
                UserScores[user.UserID] = trackedUser;

                if (trackedUser.Team is int team && !TeamScores.ContainsKey(team))
                {
                    TeamScores.Add(team, new BindableLong());
                }
            }

            userLookupCache.GetUsersAsync(playingUsers.Select(u => u.UserID).ToArray(), cancellationToken)
            .ContinueWith(task =>
            {
                Schedule(() =>
                {
                    var users = task.GetResultSafely();

                    for (int i = 0; i < users.Length; i++)
                    {
                        var user = users[i] ?? new APIUser
                        {
                            Id       = playingUsers[i].UserID,
                            Username = "******",
                        };

                        var trackedUser = UserScores[user.Id];

                        var leaderboardScore = Add(user, user.Id == api.LocalUser.Value.Id);
                        leaderboardScore.Accuracy.BindTo(trackedUser.ScoreProcessor.Accuracy);
                        leaderboardScore.TotalScore.BindTo(trackedUser.ScoreProcessor.TotalScore);
                        leaderboardScore.Combo.BindTo(trackedUser.ScoreProcessor.Combo);
                        leaderboardScore.HasQuit.BindTo(trackedUser.UserQuit);
                    }
                });
            }, cancellationToken);
        }
Exemplo n.º 2
0
 public TrackedUserData(MultiplayerRoomUser user, SpectatorScoreProcessor scoreProcessor)
 {
     User           = user;
     ScoreProcessor = scoreProcessor;
 }