// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System; using System.Collections.Generic; using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Game.Beatmaps; using osu.Game.Online.API.Requests.Responses; using osu.Game.Online.Leaderboards; using osu.Game.Overlays; using osu.Game.Online.Placeholders; using osu.Game.Rulesets.Osu.Mods; using osu.Game.Scoring; using osu.Game.Screens.Select.Leaderboards; using osu.Game.Users; using osuTK; namespace osu.Game.Tests.Visual.SongSelect { public class TestSceneBeatmapLeaderboard : OsuTestScene { public override IReadOnlyList RequiredTypes => new[] { typeof(Placeholder), typeof(MessagePlaceholder), typeof(RetrievalFailurePlaceholder), typeof(UserTopScoreContainer), typeof(Leaderboard), }; private readonly FailableLeaderboard leaderboard; [Cached] private readonly DialogOverlay dialogOverlay; public TestSceneBeatmapLeaderboard() { Add(dialogOverlay = new DialogOverlay { Depth = -1 }); Add(leaderboard = new FailableLeaderboard { Origin = Anchor.Centre, Anchor = Anchor.Centre, Size = new Vector2(550f, 450f), Scope = BeatmapLeaderboardScope.Global, }); AddStep(@"New Scores", newScores); AddStep(@"Show personal best", showPersonalBest); AddStep(@"Empty Scores", () => leaderboard.SetRetrievalState(PlaceholderState.NoScores)); AddStep(@"Network failure", () => leaderboard.SetRetrievalState(PlaceholderState.NetworkFailure)); AddStep(@"No supporter", () => leaderboard.SetRetrievalState(PlaceholderState.NotSupporter)); AddStep(@"Not logged in", () => leaderboard.SetRetrievalState(PlaceholderState.NotLoggedIn)); AddStep(@"Unavailable", () => leaderboard.SetRetrievalState(PlaceholderState.Unavailable)); AddStep(@"None selected", () => leaderboard.SetRetrievalState(PlaceholderState.NoneSelected)); foreach (BeatmapSetOnlineStatus status in Enum.GetValues(typeof(BeatmapSetOnlineStatus))) AddStep($"{status} beatmap", () => showBeatmapWithStatus(status)); AddStep("null personal best position", showPersonalBestWithNullPosition); } private void showPersonalBestWithNullPosition() { leaderboard.TopScore = new APILegacyUserTopScoreInfo { Position = null, Score = new APILegacyScoreInfo { Rank = ScoreRank.XH, Accuracy = 1, MaxCombo = 244, TotalScore = 1707827, Mods = new[] { new OsuModHidden().Acronym, new OsuModHardRock().Acronym, }, User = new User { Id = 6602580, Username = @"waaiiru", Country = new Country { FullName = @"Spain", FlagName = @"ES", }, }, } }; } private void showPersonalBest() { leaderboard.TopScore = new APILegacyUserTopScoreInfo { Position = 999, Score = new APILegacyScoreInfo { Rank = ScoreRank.XH, Accuracy = 1, MaxCombo = 244, TotalScore = 1707827, Mods = new[] { new OsuModHidden().Acronym, new OsuModHardRock().Acronym, }, User = new User { Id = 6602580, Username = @"waaiiru", Country = new Country { FullName = @"Spain", FlagName = @"ES", }, }, } }; } private void newScores() { var scores = new[] { new ScoreInfo { Rank = ScoreRank.XH, Accuracy = 1, MaxCombo = 244, TotalScore = 1707827, //Mods = new Mod[] { new OsuModHidden(), new OsuModHardRock(), }, User = new User { Id = 6602580, Username = @"waaiiru", Country = new Country { FullName = @"Spain", FlagName = @"ES", }, }, }, new ScoreInfo { Rank = ScoreRank.X, Accuracy = 1, MaxCombo = 244, TotalScore = 1707827, //Mods = new Mod[] { new OsuModHidden(), new OsuModHardRock(), }, User = new User { Id = 4608074, Username = @"Skycries", Country = new Country { FullName = @"Brazil", FlagName = @"BR", }, }, }, new ScoreInfo { Rank = ScoreRank.SH, Accuracy = 1, MaxCombo = 244, TotalScore = 1707827, //Mods = new Mod[] { new OsuModHidden(), new OsuModHardRock(), }, User = new User { Id = 1014222, Username = @"eLy", Country = new Country { FullName = @"Japan", FlagName = @"JP", }, }, }, new ScoreInfo { Rank = ScoreRank.S, Accuracy = 1, MaxCombo = 244, TotalScore = 1707827, //Mods = new Mod[] { new OsuModHidden(), new OsuModHardRock(), }, User = new User { Id = 1541390, Username = @"Toukai", Country = new Country { FullName = @"Canada", FlagName = @"CA", }, }, }, new ScoreInfo { Rank = ScoreRank.A, Accuracy = 1, MaxCombo = 244, TotalScore = 1707827, //Mods = new Mod[] { new OsuModHidden(), new OsuModHardRock(), }, User = new User { Id = 2243452, Username = @"Satoruu", Country = new Country { FullName = @"Venezuela", FlagName = @"VE", }, }, }, new ScoreInfo { Rank = ScoreRank.B, Accuracy = 0.9826, MaxCombo = 244, TotalScore = 1707827, //Mods = new Mod[] { new OsuModHidden(), new OsuModHardRock(), }, User = new User { Id = 2705430, Username = @"Mooha", Country = new Country { FullName = @"France", FlagName = @"FR", }, }, }, new ScoreInfo { Rank = ScoreRank.C, Accuracy = 0.9654, MaxCombo = 244, TotalScore = 1707827, //Mods = new Mod[] { new OsuModHidden(), new OsuModHardRock(), }, User = new User { Id = 7151382, Username = @"Mayuri Hana", Country = new Country { FullName = @"Thailand", FlagName = @"TH", }, }, }, new ScoreInfo { Rank = ScoreRank.D, Accuracy = 0.6025, MaxCombo = 244, TotalScore = 1707827, //Mods = new Mod[] { new OsuModHidden(), new OsuModHardRock(), }, User = new User { Id = 2051389, Username = @"FunOrange", Country = new Country { FullName = @"Canada", FlagName = @"CA", }, }, }, new ScoreInfo { Rank = ScoreRank.D, Accuracy = 0.5140, MaxCombo = 244, TotalScore = 1707827, //Mods = new Mod[] { new OsuModHidden(), new OsuModHardRock(), }, User = new User { Id = 6169483, Username = @"-Hebel-", Country = new Country { FullName = @"Mexico", FlagName = @"MX", }, }, }, new ScoreInfo { Rank = ScoreRank.D, Accuracy = 0.4222, MaxCombo = 244, TotalScore = 1707827, //Mods = new Mod[] { new OsuModHidden(), new OsuModHardRock(), }, User = new User { Id = 6702666, Username = @"prhtnsm", Country = new Country { FullName = @"Germany", FlagName = @"DE", }, }, }, }; leaderboard.Scores = scores; } private void showBeatmapWithStatus(BeatmapSetOnlineStatus status) { leaderboard.Beatmap = new BeatmapInfo { OnlineBeatmapID = 1113057, Status = status, }; } private class FailableLeaderboard : BeatmapLeaderboard { public void SetRetrievalState(PlaceholderState state) { PlaceholderState = state; } } } }