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); }
public TrackedUserData(MultiplayerRoomUser user, SpectatorScoreProcessor scoreProcessor) { User = user; ScoreProcessor = scoreProcessor; }