// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System.Collections.Generic; using System.Linq; using osu.Framework.Allocation; using osu.Framework.Bindables; using osu.Framework.Graphics; using osu.Game.Beatmaps; using osu.Game.Extensions; using osu.Game.Online; using osu.Game.Scoring; using osu.Game.Screens.Ranking.Statistics.User; namespace osu.Game.Screens.Ranking.Statistics { public partial class UserStatisticsPanel : StatisticsPanel { private readonly ScoreInfo achievedScore; internal readonly Bindable DisplayedUserStatisticsUpdate = new Bindable(); private IBindable latestGlobalStatisticsUpdate = null!; public UserStatisticsPanel(ScoreInfo achievedScore) { this.achievedScore = achievedScore; } [BackgroundDependencyLoader] private void load(UserStatisticsWatcher? userStatisticsWatcher) { if (userStatisticsWatcher != null) { latestGlobalStatisticsUpdate = userStatisticsWatcher.LatestUpdate.GetBoundCopy(); latestGlobalStatisticsUpdate.BindValueChanged(update => { if (update.NewValue?.Score.MatchesOnlineID(achievedScore) == true) DisplayedUserStatisticsUpdate.Value = update.NewValue; }, true); } } protected override ICollection CreateStatisticItems(ScoreInfo newScore, IBeatmap playableBeatmap) { var items = base.CreateStatisticItems(newScore, playableBeatmap); if (newScore.UserID > 1 && newScore.UserID == achievedScore.UserID && newScore.OnlineID > 0 && newScore.OnlineID == achievedScore.OnlineID) { items = items.Append(new StatisticItem("Overall Ranking", () => new OverallRanking { RelativeSizeAxes = Axes.X, Anchor = Anchor.Centre, Origin = Anchor.Centre, StatisticsUpdate = { BindTarget = DisplayedUserStatisticsUpdate } })).ToArray(); } return items; } } }