diff --git a/osu.Game.Tests/Visual/Background/TestSceneUserDimBackgrounds.cs b/osu.Game.Tests/Visual/Background/TestSceneUserDimBackgrounds.cs
index 06a155e78b..b51555db3e 100644
--- a/osu.Game.Tests/Visual/Background/TestSceneUserDimBackgrounds.cs
+++ b/osu.Game.Tests/Visual/Background/TestSceneUserDimBackgrounds.cs
@@ -27,6 +27,7 @@ using osu.Game.Screens;
using osu.Game.Screens.Backgrounds;
using osu.Game.Screens.Play;
using osu.Game.Screens.Play.PlayerSettings;
+using osu.Game.Screens.Ranking;
using osu.Game.Screens.Select;
using osu.Game.Tests.Resources;
using osu.Game.Users;
@@ -203,7 +204,7 @@ namespace osu.Game.Tests.Visual.Background
}
///
- /// Check if the visual settings container removes user dim when suspending for
+ /// Check if the visual settings container removes user dim when suspending for
///
[Test]
public void TransitionTest()
@@ -335,7 +336,7 @@ namespace osu.Game.Tests.Visual.Background
public bool IsBackgroundCurrent() => ((FadeAccessibleBackground)Background).IsCurrentScreen();
}
- private class FadeAccessibleResults : SoloResults
+ private class FadeAccessibleResults : ResultsScreen
{
public FadeAccessibleResults(ScoreInfo score)
: base(score)
diff --git a/osu.Game.Tests/Visual/Gameplay/TestSceneReplayDownloadButton.cs b/osu.Game.Tests/Visual/Gameplay/TestSceneReplayDownloadButton.cs
index 8cb44de8cb..c9561a70fa 100644
--- a/osu.Game.Tests/Visual/Gameplay/TestSceneReplayDownloadButton.cs
+++ b/osu.Game.Tests/Visual/Gameplay/TestSceneReplayDownloadButton.cs
@@ -11,7 +11,7 @@ using System;
using System.Collections.Generic;
using osu.Framework.Allocation;
using osu.Game.Rulesets;
-using osu.Game.Screens.Ranking.Pages;
+using osu.Game.Screens.Ranking;
namespace osu.Game.Tests.Visual.Gameplay
{
diff --git a/osu.Game.Tests/Visual/Multiplayer/TestSceneMatchResults.cs b/osu.Game.Tests/Visual/Multiplayer/TestSceneMatchResults.cs
deleted file mode 100644
index 58e9240026..0000000000
--- a/osu.Game.Tests/Visual/Multiplayer/TestSceneMatchResults.cs
+++ /dev/null
@@ -1,106 +0,0 @@
-// 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 System.Linq;
-using osu.Framework.Allocation;
-using osu.Game.Beatmaps;
-using osu.Game.Online.API;
-using osu.Game.Online.API.Requests.Responses;
-using osu.Game.Scoring;
-using osu.Game.Screens.Multi.Match.Components;
-using osu.Game.Screens.Multi.Ranking;
-using osu.Game.Screens.Multi.Ranking.Pages;
-using osu.Game.Screens.Multi.Ranking.Types;
-using osu.Game.Screens.Ranking;
-using osu.Game.Users;
-
-namespace osu.Game.Tests.Visual.Multiplayer
-{
- public class TestSceneMatchResults : MultiplayerTestScene
- {
- public override IReadOnlyList RequiredTypes => new[]
- {
- typeof(MatchResults),
- typeof(RoomLeaderboardPageInfo),
- typeof(RoomLeaderboardPage)
- };
-
- [Resolved]
- private BeatmapManager beatmaps { get; set; }
-
- [BackgroundDependencyLoader]
- private void load()
- {
- var beatmapInfo = beatmaps.QueryBeatmap(b => b.RulesetID == 0);
- if (beatmapInfo != null)
- Beatmap.Value = beatmaps.GetWorkingBeatmap(beatmapInfo);
-
- Room.RoomID.Value = 1;
- Room.Name.Value = "an awesome room";
-
- LoadScreen(new TestMatchResults(new ScoreInfo
- {
- User = new User { Id = 10 },
- }));
- }
-
- private class TestMatchResults : MatchResults
- {
- public TestMatchResults(ScoreInfo score)
- : base(score)
- {
- }
-
- protected override IEnumerable CreateResultPages() => new[] { new TestRoomLeaderboardPageInfo(Score, Beatmap.Value) };
- }
-
- private class TestRoomLeaderboardPageInfo : RoomLeaderboardPageInfo
- {
- private readonly ScoreInfo score;
- private readonly WorkingBeatmap beatmap;
-
- public TestRoomLeaderboardPageInfo(ScoreInfo score, WorkingBeatmap beatmap)
- : base(score, beatmap)
- {
- this.score = score;
- this.beatmap = beatmap;
- }
-
- public override ResultsPage CreatePage() => new TestRoomLeaderboardPage(score, beatmap);
- }
-
- private class TestRoomLeaderboardPage : RoomLeaderboardPage
- {
- public TestRoomLeaderboardPage(ScoreInfo score, WorkingBeatmap beatmap)
- : base(score, beatmap)
- {
- }
-
- protected override MatchLeaderboard CreateLeaderboard() => new TestMatchLeaderboard();
- }
-
- private class TestMatchLeaderboard : RoomLeaderboardPage.ResultsMatchLeaderboard
- {
- protected override APIRequest FetchScores(Action> scoresCallback)
- {
- var scores = Enumerable.Range(0, 50).Select(createRoomScore).ToArray();
-
- scoresCallback?.Invoke(scores);
- ScoresLoaded?.Invoke(scores);
-
- return null;
- }
-
- private APIUserScoreAggregate createRoomScore(int id) => new APIUserScoreAggregate
- {
- User = new User { Id = id, Username = $"User {id}" },
- Accuracy = 0.98,
- TotalScore = 987654,
- TotalAttempts = 13,
- CompletedBeatmaps = 5
- };
- }
- }
-}
diff --git a/osu.Game.Tests/Visual/Gameplay/TestSceneResults.cs b/osu.Game.Tests/Visual/Ranking/TestSceneResultsScreen.cs
similarity index 91%
rename from osu.Game.Tests/Visual/Gameplay/TestSceneResults.cs
rename to osu.Game.Tests/Visual/Ranking/TestSceneResultsScreen.cs
index 2b7a32ba17..bd5b039bc1 100644
--- a/osu.Game.Tests/Visual/Gameplay/TestSceneResults.cs
+++ b/osu.Game.Tests/Visual/Ranking/TestSceneResultsScreen.cs
@@ -10,29 +10,27 @@ using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Screens;
using osu.Game.Beatmaps;
+using osu.Game.Rulesets.Osu;
using osu.Game.Rulesets.Scoring;
using osu.Game.Scoring;
using osu.Game.Screens;
using osu.Game.Screens.Play;
using osu.Game.Screens.Ranking;
-using osu.Game.Screens.Ranking.Pages;
+using osu.Game.Tests.Beatmaps;
using osu.Game.Users;
-namespace osu.Game.Tests.Visual.Gameplay
+namespace osu.Game.Tests.Visual.Ranking
{
[TestFixture]
- public class TestSceneResults : ScreenTestScene
+ public class TestSceneResultsScreen : ScreenTestScene
{
private BeatmapManager beatmaps;
public override IReadOnlyList RequiredTypes => new[]
{
- typeof(Results),
- typeof(ResultsPage),
- typeof(ScoreResultsPage),
+ typeof(ResultsScreen),
typeof(RetryButton),
typeof(ReplayDownloadButton),
- typeof(LocalLeaderboardPage),
typeof(TestPlayer)
};
@@ -65,6 +63,7 @@ namespace osu.Game.Tests.Visual.Gameplay
{ HitResult.Meh, 50 },
{ HitResult.Miss, 1 }
},
+ Beatmap = new TestBeatmap(new OsuRuleset().RulesetInfo).BeatmapInfo,
User = new User
{
Username = "peppy",
@@ -119,7 +118,7 @@ namespace osu.Game.Tests.Visual.Gameplay
}
}
- private class TestSoloResults : SoloResults
+ private class TestSoloResults : ResultsScreen
{
public HotkeyRetryOverlay RetryOverlay;
diff --git a/osu.Game/Screens/Multi/Play/TimeshiftPlayer.cs b/osu.Game/Screens/Multi/Play/TimeshiftPlayer.cs
index 3afacf2f31..7f58de29fb 100644
--- a/osu.Game/Screens/Multi/Play/TimeshiftPlayer.cs
+++ b/osu.Game/Screens/Multi/Play/TimeshiftPlayer.cs
@@ -14,9 +14,7 @@ using osu.Game.Online.API.Requests;
using osu.Game.Online.Multiplayer;
using osu.Game.Rulesets;
using osu.Game.Scoring;
-using osu.Game.Screens.Multi.Ranking;
using osu.Game.Screens.Play;
-using osu.Game.Screens.Ranking;
namespace osu.Game.Screens.Multi.Play
{
@@ -115,7 +113,5 @@ namespace osu.Game.Screens.Multi.Play
Exited = null;
}
-
- protected override Results CreateResults(ScoreInfo score) => new MatchResults(score);
}
}
diff --git a/osu.Game/Screens/Multi/Ranking/MatchResults.cs b/osu.Game/Screens/Multi/Ranking/MatchResults.cs
deleted file mode 100644
index fe68d7e849..0000000000
--- a/osu.Game/Screens/Multi/Ranking/MatchResults.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-// 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 osu.Game.Scoring;
-using osu.Game.Screens.Multi.Ranking.Types;
-using osu.Game.Screens.Ranking;
-using osu.Game.Screens.Ranking.Types;
-
-namespace osu.Game.Screens.Multi.Ranking
-{
- public class MatchResults : Results
- {
- public MatchResults(ScoreInfo score)
- : base(score)
- {
- }
-
- protected override IEnumerable CreateResultPages() => new IResultPageInfo[]
- {
- new ScoreOverviewPageInfo(Score, Beatmap.Value),
- new LocalLeaderboardPageInfo(Score, Beatmap.Value),
- new RoomLeaderboardPageInfo(Score, Beatmap.Value),
- };
- }
-}
diff --git a/osu.Game/Screens/Multi/Ranking/Pages/RoomLeaderboardPage.cs b/osu.Game/Screens/Multi/Ranking/Pages/RoomLeaderboardPage.cs
deleted file mode 100644
index 0d31805774..0000000000
--- a/osu.Game/Screens/Multi/Ranking/Pages/RoomLeaderboardPage.cs
+++ /dev/null
@@ -1,135 +0,0 @@
-// 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 Microsoft.EntityFrameworkCore.Internal;
-using osu.Framework.Allocation;
-using osu.Framework.Bindables;
-using osu.Framework.Graphics;
-using osu.Framework.Graphics.Containers;
-using osu.Framework.Graphics.Shapes;
-using osu.Framework.Graphics.Sprites;
-using osu.Framework.Lists;
-using osu.Game.Beatmaps;
-using osu.Game.Graphics;
-using osu.Game.Online.API.Requests.Responses;
-using osu.Game.Online.Leaderboards;
-using osu.Game.Online.Multiplayer;
-using osu.Game.Scoring;
-using osu.Game.Screens.Multi.Match.Components;
-using osu.Game.Screens.Ranking;
-
-namespace osu.Game.Screens.Multi.Ranking.Pages
-{
- public class RoomLeaderboardPage : ResultsPage
- {
- [Resolved]
- private OsuColour colours { get; set; }
-
- private TextFlowContainer rankText;
-
- [Resolved(typeof(Room), nameof(Room.Name))]
- private Bindable name { get; set; }
-
- public RoomLeaderboardPage(ScoreInfo score, WorkingBeatmap beatmap)
- : base(score, beatmap)
- {
- }
-
- [BackgroundDependencyLoader]
- private void load()
- {
- MatchLeaderboard leaderboard;
-
- Children = new Drawable[]
- {
- new Box
- {
- Colour = colours.Gray6,
- RelativeSizeAxes = Axes.Both,
- },
- new BufferedContainer
- {
- RelativeSizeAxes = Axes.Both,
- BackgroundColour = colours.Gray6,
- Child = leaderboard = CreateLeaderboard()
- },
- rankText = new TextFlowContainer
- {
- Anchor = Anchor.TopCentre,
- Origin = Anchor.TopCentre,
- RelativeSizeAxes = Axes.X,
- Width = 0.5f,
- AutoSizeAxes = Axes.Y,
- Y = 50,
- TextAnchor = Anchor.TopCentre
- },
- };
-
- leaderboard.Origin = Anchor.Centre;
- leaderboard.Anchor = Anchor.Centre;
- leaderboard.RelativeSizeAxes = Axes.Both;
- leaderboard.Height = 0.8f;
- leaderboard.Y = 55;
- leaderboard.ScoresLoaded = scoresLoaded;
- }
-
- private void scoresLoaded(IEnumerable scores)
- {
- void gray(SpriteText s) => s.Colour = colours.GrayC;
-
- void white(SpriteText s)
- {
- s.Font = s.Font.With(size: s.Font.Size * 1.4f);
- s.Colour = colours.GrayF;
- }
-
- rankText.AddText(name + "\n", white);
- rankText.AddText("You are placed ", gray);
-
- int index = scores.IndexOf(new APIUserScoreAggregate { User = Score.User }, new FuncEqualityComparer((s1, s2) => s1.User.Id.Equals(s2.User.Id)));
-
- rankText.AddText($"#{index + 1} ", s =>
- {
- s.Font = s.Font.With(Typeface.Torus, weight: FontWeight.Bold);
- s.Colour = colours.YellowDark;
- });
-
- rankText.AddText("in the room!", gray);
- }
-
- protected virtual MatchLeaderboard CreateLeaderboard() => new ResultsMatchLeaderboard();
-
- public class ResultsMatchLeaderboard : MatchLeaderboard
- {
- protected override bool FadeTop => true;
-
- protected override LeaderboardScore CreateDrawableScore(APIUserScoreAggregate model, int index)
- => new ResultsMatchLeaderboardScore(model, index);
-
- protected override FillFlowContainer CreateScoreFlow()
- {
- var flow = base.CreateScoreFlow();
- flow.Padding = new MarginPadding
- {
- Top = LeaderboardScore.HEIGHT * 2,
- Bottom = LeaderboardScore.HEIGHT * 3,
- };
- return flow;
- }
-
- private class ResultsMatchLeaderboardScore : MatchLeaderboardScore
- {
- public ResultsMatchLeaderboardScore(APIUserScoreAggregate score, int rank)
- : base(score, rank)
- {
- }
-
- [BackgroundDependencyLoader]
- private void load()
- {
- }
- }
- }
- }
-}
diff --git a/osu.Game/Screens/Multi/Ranking/Types/RoomLeaderboardPageInfo.cs b/osu.Game/Screens/Multi/Ranking/Types/RoomLeaderboardPageInfo.cs
deleted file mode 100644
index dcfad8458f..0000000000
--- a/osu.Game/Screens/Multi/Ranking/Types/RoomLeaderboardPageInfo.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
-// See the LICENCE file in the repository root for full licence text.
-
-using osu.Framework.Graphics.Sprites;
-using osu.Game.Beatmaps;
-using osu.Game.Scoring;
-using osu.Game.Screens.Multi.Ranking.Pages;
-using osu.Game.Screens.Ranking;
-
-namespace osu.Game.Screens.Multi.Ranking.Types
-{
- public class RoomLeaderboardPageInfo : IResultPageInfo
- {
- private readonly ScoreInfo score;
- private readonly WorkingBeatmap beatmap;
-
- public RoomLeaderboardPageInfo(ScoreInfo score, WorkingBeatmap beatmap)
- {
- this.score = score;
- this.beatmap = beatmap;
- }
-
- public IconUsage Icon => FontAwesome.Solid.Users;
-
- public string Name => "Room Leaderboard";
-
- public virtual ResultsPage CreatePage() => new RoomLeaderboardPage(score, beatmap);
- }
-}
diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs
index 79f92c3762..32261efd4e 100644
--- a/osu.Game/Screens/Play/Player.cs
+++ b/osu.Game/Screens/Play/Player.cs
@@ -420,7 +420,7 @@ namespace osu.Game.Screens.Play
protected override bool OnScroll(ScrollEvent e) => mouseWheelDisabled.Value && !GameplayClockContainer.IsPaused.Value;
- protected virtual Results CreateResults(ScoreInfo score) => new SoloResults(score);
+ protected virtual ResultsScreen CreateResults(ScoreInfo score) => new ResultsScreen(score);
#region Fail Logic
diff --git a/osu.Game/Screens/Play/SoloResults.cs b/osu.Game/Screens/Play/SoloResults.cs
deleted file mode 100644
index 2b9aec257c..0000000000
--- a/osu.Game/Screens/Play/SoloResults.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-// 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 osu.Game.Scoring;
-using osu.Game.Screens.Ranking;
-using osu.Game.Screens.Ranking.Types;
-
-namespace osu.Game.Screens.Play
-{
- public class SoloResults : Results
- {
- public SoloResults(ScoreInfo score)
- : base(score)
- {
- }
-
- protected override IEnumerable CreateResultPages() => new IResultPageInfo[]
- {
- new ScoreOverviewPageInfo(Score, Beatmap.Value),
- new LocalLeaderboardPageInfo(Score, Beatmap.Value)
- };
- }
-}
diff --git a/osu.Game/Screens/Ranking/Expanded/ExpandedPanelMiddleContent.cs b/osu.Game/Screens/Ranking/Expanded/ExpandedPanelMiddleContent.cs
index 6d5d7e0d95..6b7e4c9cb4 100644
--- a/osu.Game/Screens/Ranking/Expanded/ExpandedPanelMiddleContent.cs
+++ b/osu.Game/Screens/Ranking/Expanded/ExpandedPanelMiddleContent.cs
@@ -4,10 +4,12 @@
using System.Collections.Generic;
using System.Linq;
using osu.Framework.Allocation;
+using osu.Framework.Bindables;
using osu.Framework.Extensions;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Localisation;
+using osu.Game.Beatmaps;
using osu.Game.Graphics;
using osu.Game.Graphics.Containers;
using osu.Game.Graphics.Sprites;
@@ -45,8 +47,11 @@ namespace osu.Game.Screens.Ranking.Expanded
}
[BackgroundDependencyLoader]
- private void load()
+ private void load(Bindable working)
{
+ var beatmap = working.Value.BeatmapInfo;
+ var metadata = beatmap.Metadata;
+
var topStatistics = new List
{
new AccuracyStatistic(score.Accuracy),
@@ -81,14 +86,14 @@ namespace osu.Game.Screens.Ranking.Expanded
{
Anchor = Anchor.TopCentre,
Origin = Anchor.TopCentre,
- Text = new LocalisedString((score.Beatmap.Metadata.Title, score.Beatmap.Metadata.TitleUnicode)),
+ Text = new LocalisedString((metadata.Title, metadata.TitleUnicode)),
Font = OsuFont.Torus.With(size: 20, weight: FontWeight.SemiBold),
},
new OsuSpriteText
{
Anchor = Anchor.TopCentre,
Origin = Anchor.TopCentre,
- Text = new LocalisedString((score.Beatmap.Metadata.Artist, score.Beatmap.Metadata.ArtistUnicode)),
+ Text = new LocalisedString((metadata.Artist, metadata.ArtistUnicode)),
Font = OsuFont.Torus.With(size: 14, weight: FontWeight.SemiBold)
},
new Container
@@ -120,7 +125,7 @@ namespace osu.Game.Screens.Ranking.Expanded
AutoSizeAxes = Axes.Both,
Children = new Drawable[]
{
- new StarRatingDisplay(score.Beatmap)
+ new StarRatingDisplay(beatmap)
{
Anchor = Anchor.CentreLeft,
Origin = Anchor.CentreLeft
@@ -148,7 +153,7 @@ namespace osu.Game.Screens.Ranking.Expanded
{
Anchor = Anchor.TopCentre,
Origin = Anchor.TopCentre,
- Text = score.Beatmap.Version,
+ Text = beatmap.Version,
Font = OsuFont.Torus.With(size: 16, weight: FontWeight.SemiBold),
},
new OsuTextFlowContainer(s => s.Font = OsuFont.Torus.With(size: 12))
diff --git a/osu.Game/Screens/Ranking/IResultPageInfo.cs b/osu.Game/Screens/Ranking/IResultPageInfo.cs
deleted file mode 100644
index cc86e7441a..0000000000
--- a/osu.Game/Screens/Ranking/IResultPageInfo.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
-// See the LICENCE file in the repository root for full licence text.
-
-using osu.Framework.Graphics.Sprites;
-
-namespace osu.Game.Screens.Ranking
-{
- public interface IResultPageInfo
- {
- IconUsage Icon { get; }
-
- string Name { get; }
-
- ResultsPage CreatePage();
- }
-}
diff --git a/osu.Game/Screens/Ranking/Pages/LocalLeaderboardPage.cs b/osu.Game/Screens/Ranking/Pages/LocalLeaderboardPage.cs
deleted file mode 100644
index c997dd6d30..0000000000
--- a/osu.Game/Screens/Ranking/Pages/LocalLeaderboardPage.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
-// See the LICENCE file in the repository root for full licence text.
-
-using osu.Framework.Allocation;
-using osu.Framework.Graphics;
-using osu.Framework.Graphics.Shapes;
-using osu.Game.Beatmaps;
-using osu.Game.Graphics;
-using osu.Game.Scoring;
-using osu.Game.Screens.Select.Leaderboards;
-using osuTK;
-
-namespace osu.Game.Screens.Ranking.Pages
-{
- public class LocalLeaderboardPage : ResultsPage
- {
- public LocalLeaderboardPage(ScoreInfo score, WorkingBeatmap beatmap = null)
- : base(score, beatmap)
- {
- }
-
- [BackgroundDependencyLoader]
- private void load(OsuColour colours)
- {
- Children = new Drawable[]
- {
- new Box
- {
- Colour = colours.Gray6,
- RelativeSizeAxes = Axes.Both,
- },
- new BeatmapLeaderboard
- {
- Origin = Anchor.Centre,
- Anchor = Anchor.Centre,
- RelativeSizeAxes = Axes.Both,
- Beatmap = Beatmap.BeatmapInfo ?? Score.Beatmap,
- Scale = new Vector2(0.7f)
- }
- };
- }
- }
-}
diff --git a/osu.Game/Screens/Ranking/Pages/ScoreResultsPage.cs b/osu.Game/Screens/Ranking/Pages/ScoreResultsPage.cs
deleted file mode 100644
index 0aab067de1..0000000000
--- a/osu.Game/Screens/Ranking/Pages/ScoreResultsPage.cs
+++ /dev/null
@@ -1,428 +0,0 @@
-// 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 System.Linq;
-using osu.Framework.Allocation;
-using osu.Framework.Extensions;
-using osu.Framework.Extensions.Color4Extensions;
-using osu.Framework.Graphics;
-using osu.Framework.Graphics.Colour;
-using osu.Framework.Graphics.Containers;
-using osu.Framework.Graphics.Shapes;
-using osu.Framework.Graphics.Sprites;
-using osu.Framework.Graphics.Textures;
-using osu.Framework.Localisation;
-using osu.Game.Beatmaps;
-using osu.Game.Graphics;
-using osu.Game.Graphics.Sprites;
-using osu.Game.Graphics.UserInterface;
-using osu.Game.Online.Leaderboards;
-using osu.Game.Rulesets.Scoring;
-using osu.Game.Scoring;
-using osu.Game.Screens.Play;
-using osu.Game.Users;
-using osuTK;
-using osuTK.Graphics;
-
-namespace osu.Game.Screens.Ranking.Pages
-{
- public class ScoreResultsPage : ResultsPage
- {
- private Container scoreContainer;
- private ScoreCounter scoreCounter;
-
- private readonly ScoreInfo score;
-
- public ScoreResultsPage(ScoreInfo score, WorkingBeatmap beatmap)
- : base(score, beatmap)
- {
- this.score = score;
- }
-
- private FillFlowContainer statisticsContainer;
-
- [BackgroundDependencyLoader]
- private void load(OsuColour colours)
- {
- const float user_header_height = 120;
-
- Children = new Drawable[]
- {
- new Container
- {
- RelativeSizeAxes = Axes.Both,
- Padding = new MarginPadding { Top = user_header_height },
- Children = new Drawable[]
- {
- new Box
- {
- RelativeSizeAxes = Axes.Both,
- Colour = Color4.White,
- },
- }
- },
- new FillFlowContainer
- {
- RelativeSizeAxes = Axes.X,
- AutoSizeAxes = Axes.Y,
- Direction = FillDirection.Vertical,
- Children = new Drawable[]
- {
- new DelayedLoadWrapper(new UserHeader(Score.User)
- {
- RelativeSizeAxes = Axes.Both,
- })
- {
- Anchor = Anchor.TopCentre,
- Origin = Anchor.TopCentre,
- RelativeSizeAxes = Axes.X,
- Height = user_header_height,
- },
- new UpdateableRank(Score.Rank)
- {
- Anchor = Anchor.TopCentre,
- Origin = Anchor.TopCentre,
- Size = new Vector2(150, 60),
- Margin = new MarginPadding(20),
- },
- scoreContainer = new Container
- {
- Anchor = Anchor.TopCentre,
- Origin = Anchor.TopCentre,
- RelativeSizeAxes = Axes.X,
- Height = 60,
- Children = new Drawable[]
- {
- new SongProgressGraph
- {
- RelativeSizeAxes = Axes.Both,
- Alpha = 0.5f,
- Objects = Beatmap.Beatmap.HitObjects,
- },
- scoreCounter = new SlowScoreCounter(6)
- {
- Anchor = Anchor.Centre,
- Origin = Anchor.Centre,
- Colour = colours.PinkDarker,
- Y = 10,
- TextSize = 56,
- },
- }
- },
- new OsuSpriteText
- {
- Anchor = Anchor.TopCentre,
- Origin = Anchor.TopCentre,
- Colour = colours.PinkDarker,
- Shadow = false,
- Font = OsuFont.GetFont(weight: FontWeight.Bold),
- Text = "total score",
- Margin = new MarginPadding { Bottom = 15 },
- },
- new BeatmapDetails(Beatmap.BeatmapInfo)
- {
- Anchor = Anchor.TopCentre,
- Origin = Anchor.TopCentre,
- Margin = new MarginPadding { Bottom = 10 },
- },
- new DateTimeDisplay(Score.Date.LocalDateTime)
- {
- Anchor = Anchor.TopCentre,
- Origin = Anchor.TopCentre,
- },
- new Container
- {
- RelativeSizeAxes = Axes.X,
- Size = new Vector2(0.75f, 1),
- Anchor = Anchor.TopCentre,
- Origin = Anchor.TopCentre,
- Margin = new MarginPadding { Top = 10, Bottom = 10 },
- Children = new Drawable[]
- {
- new Box
- {
- Colour = ColourInfo.GradientHorizontal(
- colours.GrayC.Opacity(0),
- colours.GrayC.Opacity(0.9f)),
- RelativeSizeAxes = Axes.Both,
- Size = new Vector2(0.5f, 1),
- },
- new Box
- {
- Anchor = Anchor.TopRight,
- Origin = Anchor.TopRight,
- Colour = ColourInfo.GradientHorizontal(
- colours.GrayC.Opacity(0.9f),
- colours.GrayC.Opacity(0)),
- RelativeSizeAxes = Axes.Both,
- Size = new Vector2(0.5f, 1),
- },
- }
- },
- statisticsContainer = new FillFlowContainer
- {
- AutoSizeAxes = Axes.Both,
- Anchor = Anchor.TopCentre,
- Origin = Anchor.TopCentre,
- Direction = FillDirection.Horizontal,
- LayoutDuration = 200,
- LayoutEasing = Easing.OutQuint
- },
- },
- },
- new FillFlowContainer
- {
- Anchor = Anchor.BottomCentre,
- Origin = Anchor.BottomCentre,
- Margin = new MarginPadding { Bottom = 10 },
- Spacing = new Vector2(5),
- AutoSizeAxes = Axes.Both,
- Direction = FillDirection.Horizontal,
- Children = new Drawable[]
- {
- new ReplayDownloadButton(score),
- new RetryButton()
- }
- },
- };
-
- statisticsContainer.ChildrenEnumerable = Score.SortedStatistics.Select(s => new DrawableScoreStatistic(s));
- }
-
- protected override void LoadComplete()
- {
- base.LoadComplete();
-
- Schedule(() =>
- {
- scoreCounter.Increment(Score.TotalScore);
-
- int delay = 0;
-
- foreach (var s in statisticsContainer.Children)
- {
- s.FadeOut()
- .Then(delay += 200)
- .FadeIn(300 + delay, Easing.Out);
- }
- });
- }
-
- protected override void UpdateAfterChildren()
- {
- base.UpdateAfterChildren();
-
- scoreCounter.Scale = new Vector2(Math.Min(1f, (scoreContainer.DrawWidth - 20) / scoreCounter.DrawWidth));
- }
-
- private class DrawableScoreStatistic : Container
- {
- private readonly KeyValuePair statistic;
-
- public DrawableScoreStatistic(KeyValuePair statistic)
- {
- this.statistic = statistic;
-
- AutoSizeAxes = Axes.Both;
- Margin = new MarginPadding { Left = 5, Right = 5 };
- }
-
- [BackgroundDependencyLoader]
- private void load(OsuColour colours)
- {
- Children = new Drawable[]
- {
- new OsuSpriteText
- {
- Text = statistic.Value.ToString().PadLeft(4, '0'),
- Colour = colours.Gray7,
- Font = OsuFont.GetFont(size: 30),
- Anchor = Anchor.TopCentre,
- Origin = Anchor.TopCentre,
- },
- new OsuSpriteText
- {
- Text = statistic.Key.GetDescription(),
- Colour = colours.Gray7,
- Font = OsuFont.GetFont(weight: FontWeight.Bold),
- Y = 26,
- Anchor = Anchor.TopCentre,
- Origin = Anchor.TopCentre,
- },
- };
- }
- }
-
- private class DateTimeDisplay : Container
- {
- private readonly DateTime date;
-
- public DateTimeDisplay(DateTime date)
- {
- this.date = date;
-
- AutoSizeAxes = Axes.Both;
-
- Masking = true;
- CornerRadius = 5;
- }
-
- [BackgroundDependencyLoader]
- private void load(OsuColour colours)
- {
- Children = new Drawable[]
- {
- new Box
- {
- RelativeSizeAxes = Axes.Both,
- Colour = colours.Gray6,
- },
- new FillFlowContainer
- {
- AutoSizeAxes = Axes.Both,
- Direction = FillDirection.Horizontal,
- Padding = new MarginPadding { Horizontal = 10, Vertical = 5 },
- Spacing = new Vector2(10),
- Children = new[]
- {
- new OsuSpriteText
- {
- Text = date.ToShortDateString(),
- Colour = Color4.White,
- },
- new OsuSpriteText
- {
- Text = date.ToShortTimeString(),
- Colour = Color4.White,
- }
- }
- },
- };
- }
- }
-
- private class BeatmapDetails : Container
- {
- private readonly BeatmapInfo beatmap;
-
- private readonly OsuSpriteText title;
- private readonly OsuSpriteText artist;
- private readonly OsuSpriteText versionMapper;
-
- public BeatmapDetails(BeatmapInfo beatmap)
- {
- this.beatmap = beatmap;
-
- AutoSizeAxes = Axes.Both;
-
- Children = new Drawable[]
- {
- new FillFlowContainer
- {
- Direction = FillDirection.Vertical,
- RelativeSizeAxes = Axes.X,
- AutoSizeAxes = Axes.Y,
- Children = new Drawable[]
- {
- title = new OsuSpriteText
- {
- Anchor = Anchor.TopCentre,
- Origin = Anchor.TopCentre,
- Shadow = false,
- Font = OsuFont.GetFont(weight: FontWeight.Bold, size: 24, italics: true),
- },
- artist = new OsuSpriteText
- {
- Anchor = Anchor.TopCentre,
- Origin = Anchor.TopCentre,
- Shadow = false,
- Font = OsuFont.GetFont(weight: FontWeight.Bold, size: 20, italics: true),
- },
- versionMapper = new OsuSpriteText
- {
- Anchor = Anchor.TopCentre,
- Origin = Anchor.TopCentre,
- Shadow = false,
- Font = OsuFont.GetFont(weight: FontWeight.Bold),
- },
- }
- }
- };
- }
-
- [BackgroundDependencyLoader]
- private void load(OsuColour colours)
- {
- title.Colour = artist.Colour = colours.BlueDarker;
- versionMapper.Colour = colours.Gray8;
-
- var creator = beatmap.Metadata.Author?.Username;
-
- if (!string.IsNullOrEmpty(creator))
- {
- versionMapper.Text = $"mapped by {creator}";
-
- if (!string.IsNullOrEmpty(beatmap.Version))
- versionMapper.Text = $"{beatmap.Version} - " + versionMapper.Text;
- }
-
- title.Text = new LocalisedString((beatmap.Metadata.TitleUnicode, beatmap.Metadata.Title));
- artist.Text = new LocalisedString((beatmap.Metadata.ArtistUnicode, beatmap.Metadata.Artist));
- }
- }
-
- [LongRunningLoad]
- private class UserHeader : Container
- {
- private readonly User user;
- private readonly Sprite cover;
-
- public UserHeader(User user)
- {
- this.user = user;
- Children = new Drawable[]
- {
- cover = new Sprite
- {
- RelativeSizeAxes = Axes.Both,
- FillMode = FillMode.Fill,
- Anchor = Anchor.Centre,
- Origin = Anchor.Centre,
- },
- new OsuSpriteText
- {
- Anchor = Anchor.BottomCentre,
- Origin = Anchor.BottomCentre,
- Text = user.Username,
- Font = OsuFont.GetFont(size: 30, weight: FontWeight.Regular, italics: true),
- Padding = new MarginPadding { Bottom = 10 },
- }
- };
- }
-
- [BackgroundDependencyLoader]
- private void load(LargeTextureStore textures)
- {
- if (!string.IsNullOrEmpty(user.CoverUrl))
- cover.Texture = textures.Get(user.CoverUrl);
- }
- }
-
- private class SlowScoreCounter : ScoreCounter
- {
- protected override double RollingDuration => 3000;
-
- protected override Easing RollingEasing => Easing.OutPow10;
-
- public SlowScoreCounter(uint leading = 0)
- : base(leading)
- {
- DisplayedCountSpriteText.Shadow = false;
- DisplayedCountSpriteText.Font = DisplayedCountSpriteText.Font.With(Typeface.Venera, weight: FontWeight.Light);
- UseCommaSeparator = true;
- }
- }
- }
-}
diff --git a/osu.Game/Screens/Ranking/Pages/ReplayDownloadButton.cs b/osu.Game/Screens/Ranking/ReplayDownloadButton.cs
similarity index 98%
rename from osu.Game/Screens/Ranking/Pages/ReplayDownloadButton.cs
rename to osu.Game/Screens/Ranking/ReplayDownloadButton.cs
index 62213720aa..a36c86eafc 100644
--- a/osu.Game/Screens/Ranking/Pages/ReplayDownloadButton.cs
+++ b/osu.Game/Screens/Ranking/ReplayDownloadButton.cs
@@ -9,7 +9,7 @@ using osu.Game.Online;
using osu.Game.Scoring;
using osuTK;
-namespace osu.Game.Screens.Ranking.Pages
+namespace osu.Game.Screens.Ranking
{
public class ReplayDownloadButton : DownloadTrackingComposite
{
diff --git a/osu.Game/Screens/Ranking/ResultModeButton.cs b/osu.Game/Screens/Ranking/ResultModeButton.cs
deleted file mode 100644
index d7eb5db125..0000000000
--- a/osu.Game/Screens/Ranking/ResultModeButton.cs
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
-// See the LICENCE file in the repository root for full licence text.
-
-using osu.Framework.Allocation;
-using osu.Framework.Extensions.Color4Extensions;
-using osu.Framework.Graphics;
-using osu.Framework.Graphics.Containers;
-using osu.Framework.Graphics.Cursor;
-using osu.Framework.Graphics.Effects;
-using osu.Framework.Graphics.UserInterface;
-using osu.Game.Graphics;
-using osuTK;
-using osuTK.Graphics;
-using osu.Framework.Graphics.Shapes;
-using osu.Framework.Graphics.Sprites;
-
-namespace osu.Game.Screens.Ranking
-{
- public class ResultModeButton : TabItem, IHasTooltip
- {
- private readonly IconUsage icon;
- private Color4 activeColour;
- private Color4 inactiveColour;
- private CircularContainer colouredPart;
-
- public ResultModeButton(IResultPageInfo mode)
- : base(mode)
- {
- icon = mode.Icon;
- TooltipText = mode.Name;
- }
-
- [BackgroundDependencyLoader]
- private void load(OsuColour colours)
- {
- Size = new Vector2(50);
-
- Masking = true;
-
- CornerRadius = 25;
- CornerExponent = 2;
-
- activeColour = colours.PinkDarker;
- inactiveColour = OsuColour.Gray(0.8f);
-
- EdgeEffect = new EdgeEffectParameters
- {
- Colour = Color4.Black.Opacity(0.4f),
- Type = EdgeEffectType.Shadow,
- Radius = 5,
- };
-
- Children = new Drawable[]
- {
- new Box
- {
- RelativeSizeAxes = Axes.Both,
- Colour = Color4.White,
- },
- colouredPart = new CircularContainer
- {
- Anchor = Anchor.Centre,
- Origin = Anchor.Centre,
- RelativeSizeAxes = Axes.Both,
- Size = new Vector2(0.8f),
- BorderThickness = 4,
- BorderColour = Color4.White,
- Colour = inactiveColour,
- Children = new Drawable[]
- {
- new Box
- {
- AlwaysPresent = true, //for border rendering
- RelativeSizeAxes = Axes.Both,
- Colour = Color4.Transparent,
- },
- new SpriteIcon
- {
- Anchor = Anchor.Centre,
- Origin = Anchor.Centre,
- Shadow = false,
- Colour = OsuColour.Gray(0.95f),
- Icon = icon,
- Size = new Vector2(20),
- }
- }
- }
- };
- }
-
- protected override void OnActivated() => colouredPart.FadeColour(activeColour, 200, Easing.OutQuint);
-
- protected override void OnDeactivated() => colouredPart.FadeColour(inactiveColour, 200, Easing.OutQuint);
-
- public string TooltipText { get; }
- }
-}
diff --git a/osu.Game/Screens/Ranking/ResultModeTabControl.cs b/osu.Game/Screens/Ranking/ResultModeTabControl.cs
deleted file mode 100644
index b0d94a4be6..0000000000
--- a/osu.Game/Screens/Ranking/ResultModeTabControl.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
-// See the LICENCE file in the repository root for full licence text.
-
-using osu.Framework.Graphics;
-using osu.Framework.Graphics.UserInterface;
-using osuTK;
-
-namespace osu.Game.Screens.Ranking
-{
- public class ResultModeTabControl : TabControl
- {
- public ResultModeTabControl()
- {
- TabContainer.Anchor = Anchor.BottomCentre;
- TabContainer.Origin = Anchor.BottomCentre;
- TabContainer.Spacing = new Vector2(15);
-
- TabContainer.Masking = false;
- TabContainer.Padding = new MarginPadding(5);
- }
-
- protected override Dropdown CreateDropdown() => null;
-
- protected override TabItem CreateTabItem(IResultPageInfo value) => new ResultModeButton(value)
- {
- Anchor = TabContainer.Anchor,
- Origin = TabContainer.Origin
- };
- }
-}
diff --git a/osu.Game/Screens/Ranking/Results.cs b/osu.Game/Screens/Ranking/Results.cs
deleted file mode 100644
index 05f1872be9..0000000000
--- a/osu.Game/Screens/Ranking/Results.cs
+++ /dev/null
@@ -1,291 +0,0 @@
-// 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.Extensions.Color4Extensions;
-using osu.Framework.Extensions.IEnumerableExtensions;
-using osu.Framework.Graphics;
-using osu.Framework.Graphics.Containers;
-using osu.Framework.Graphics.Effects;
-using osu.Framework.Graphics.Sprites;
-using osu.Framework.Screens;
-using osu.Game.Graphics.Containers;
-using osu.Game.Screens.Backgrounds;
-using osuTK;
-using osuTK.Graphics;
-using osu.Game.Graphics;
-using osu.Framework.Graphics.Shapes;
-using osu.Game.Graphics.Sprites;
-using osu.Game.Scoring;
-using osu.Game.Screens.Play;
-
-namespace osu.Game.Screens.Ranking
-{
- public abstract class Results : OsuScreen
- {
- protected const float BACKGROUND_BLUR = 20;
-
- private Container circleOuterBackground;
- private Container circleOuter;
- private Container circleInner;
-
- private ParallaxContainer backgroundParallax;
-
- private ResultModeTabControl modeChangeButtons;
-
- [Resolved(canBeNull: true)]
- private Player player { get; set; }
-
- public override bool DisallowExternalBeatmapRulesetChanges => true;
-
- protected readonly ScoreInfo Score;
-
- private Container currentPage;
-
- protected override BackgroundScreen CreateBackground() => new BackgroundScreenBeatmap(Beatmap.Value);
-
- private const float overscan = 1.3f;
-
- private const float circle_outer_scale = 0.96f;
-
- protected Results(ScoreInfo score)
- {
- Score = score;
- }
-
- private const float transition_time = 800;
-
- private IEnumerable allCircles => new Drawable[] { circleOuterBackground, circleInner, circleOuter };
-
- public override void OnEntering(IScreen last)
- {
- base.OnEntering(last);
- ((BackgroundScreenBeatmap)Background).BlurAmount.Value = BACKGROUND_BLUR;
- Background.ScaleTo(1.1f, transition_time, Easing.OutQuint);
-
- allCircles.ForEach(c =>
- {
- c.FadeOut();
- c.ScaleTo(0);
- });
-
- backgroundParallax.FadeOut();
- modeChangeButtons.FadeOut();
- currentPage?.FadeOut();
-
- circleOuterBackground
- .FadeIn(transition_time, Easing.OutQuint)
- .ScaleTo(1, transition_time, Easing.OutQuint);
-
- using (BeginDelayedSequence(transition_time * 0.25f, true))
- {
- circleOuter
- .FadeIn(transition_time, Easing.OutQuint)
- .ScaleTo(1, transition_time, Easing.OutQuint);
-
- using (BeginDelayedSequence(transition_time * 0.3f, true))
- {
- backgroundParallax.FadeIn(transition_time, Easing.OutQuint);
-
- circleInner
- .FadeIn(transition_time, Easing.OutQuint)
- .ScaleTo(1, transition_time, Easing.OutQuint);
-
- using (BeginDelayedSequence(transition_time * 0.4f, true))
- {
- modeChangeButtons.FadeIn(transition_time, Easing.OutQuint);
- currentPage?.FadeIn(transition_time, Easing.OutQuint);
- }
- }
- }
- }
-
- public override bool OnExiting(IScreen next)
- {
- allCircles.ForEach(c => c.ScaleTo(0, transition_time, Easing.OutSine));
-
- Background.ScaleTo(1f, transition_time / 4, Easing.OutQuint);
-
- this.FadeOut(transition_time / 4);
-
- return base.OnExiting(next);
- }
-
- [BackgroundDependencyLoader]
- private void load(OsuColour colours)
- {
- InternalChild = new AspectContainer
- {
- RelativeSizeAxes = Axes.Y,
- Anchor = Anchor.Centre,
- Origin = Anchor.Centre,
- Height = overscan,
- Children = new Drawable[]
- {
- circleOuterBackground = new CircularContainer
- {
- RelativeSizeAxes = Axes.Both,
- Anchor = Anchor.Centre,
- Origin = Anchor.Centre,
- Masking = true,
- Children = new Drawable[]
- {
- new Box
- {
- Alpha = 0.2f,
- RelativeSizeAxes = Axes.Both,
- Colour = Color4.Black,
- }
- }
- },
- circleOuter = new CircularContainer
- {
- Size = new Vector2(circle_outer_scale),
- EdgeEffect = new EdgeEffectParameters
- {
- Colour = Color4.Black.Opacity(0.4f),
- Type = EdgeEffectType.Shadow,
- Radius = 15,
- },
- RelativeSizeAxes = Axes.Both,
- Anchor = Anchor.Centre,
- Origin = Anchor.Centre,
- Masking = true,
- Children = new Drawable[]
- {
- new Box
- {
- RelativeSizeAxes = Axes.Both,
- Colour = Color4.White,
- },
- backgroundParallax = new ParallaxContainer
- {
- RelativeSizeAxes = Axes.Both,
- ParallaxAmount = 0.01f,
- Anchor = Anchor.Centre,
- Origin = Anchor.Centre,
- Children = new Drawable[]
- {
- new Sprite
- {
- RelativeSizeAxes = Axes.Both,
- Alpha = 0.2f,
- Texture = Beatmap.Value.Background,
- Anchor = Anchor.Centre,
- Origin = Anchor.Centre,
- FillMode = FillMode.Fill
- }
- }
- },
- modeChangeButtons = new ResultModeTabControl
- {
- Anchor = Anchor.BottomCentre,
- Origin = Anchor.BottomCentre,
- RelativeSizeAxes = Axes.X,
- Height = 50,
- Margin = new MarginPadding { Bottom = 110 },
- },
- new OsuSpriteText
- {
- Anchor = Anchor.CentreLeft,
- Origin = Anchor.BottomCentre,
- Text = $"{Score.MaxCombo}x",
- RelativePositionAxes = Axes.X,
- Font = OsuFont.GetFont(weight: FontWeight.Bold, size: 40),
- X = 0.1f,
- Colour = colours.BlueDarker,
- },
- new OsuSpriteText
- {
- Anchor = Anchor.CentreLeft,
- Origin = Anchor.TopCentre,
- Text = "max combo",
- Font = OsuFont.GetFont(size: 20),
- RelativePositionAxes = Axes.X,
- X = 0.1f,
- Colour = colours.Gray6,
- },
- new OsuSpriteText
- {
- Anchor = Anchor.CentreLeft,
- Origin = Anchor.BottomCentre,
- Text = Score.DisplayAccuracy,
- Font = OsuFont.GetFont(weight: FontWeight.Bold, size: 40),
- RelativePositionAxes = Axes.X,
- X = 0.9f,
- Colour = colours.BlueDarker,
- },
- new OsuSpriteText
- {
- Anchor = Anchor.CentreLeft,
- Origin = Anchor.TopCentre,
- Text = "accuracy",
- Font = OsuFont.GetFont(size: 20),
- RelativePositionAxes = Axes.X,
- X = 0.9f,
- Colour = colours.Gray6,
- },
- }
- },
- circleInner = new CircularContainer
- {
- Size = new Vector2(0.6f),
- EdgeEffect = new EdgeEffectParameters
- {
- Colour = Color4.Black.Opacity(0.4f),
- Type = EdgeEffectType.Shadow,
- Radius = 15,
- },
- RelativeSizeAxes = Axes.Both,
- Anchor = Anchor.Centre,
- Origin = Anchor.Centre,
- Masking = true,
- Children = new Drawable[]
- {
- new Box
- {
- RelativeSizeAxes = Axes.Both,
- Colour = Color4.White,
- },
- }
- }
- }
- };
-
- if (player != null)
- {
- AddInternal(new HotkeyRetryOverlay
- {
- Action = () =>
- {
- if (!this.IsCurrentScreen()) return;
-
- player?.Restart();
- },
- });
- }
-
- var pages = CreateResultPages();
-
- foreach (var p in pages)
- modeChangeButtons.AddItem(p);
-
- modeChangeButtons.Current.Value = pages.FirstOrDefault();
-
- modeChangeButtons.Current.BindValueChanged(page =>
- {
- currentPage?.FadeOut();
- currentPage?.Expire();
-
- currentPage = page.NewValue?.CreatePage();
-
- if (currentPage != null)
- LoadComponentAsync(currentPage, circleInner.Add);
- }, true);
- }
-
- protected abstract IEnumerable CreateResultPages();
- }
-}
diff --git a/osu.Game/Screens/Ranking/ResultsPage.cs b/osu.Game/Screens/Ranking/ResultsPage.cs
deleted file mode 100644
index 8776c599dd..0000000000
--- a/osu.Game/Screens/Ranking/ResultsPage.cs
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
-// See the LICENCE file in the repository root for full licence text.
-
-using osu.Framework.Allocation;
-using osu.Framework.Extensions.Color4Extensions;
-using osu.Framework.Graphics;
-using osu.Framework.Graphics.Containers;
-using osu.Framework.Graphics.Effects;
-using osu.Framework.Graphics.Shapes;
-using osu.Game.Beatmaps;
-using osu.Game.Graphics;
-using osu.Game.Scoring;
-using osuTK;
-using osuTK.Graphics;
-
-namespace osu.Game.Screens.Ranking
-{
- public abstract class ResultsPage : Container
- {
- protected readonly ScoreInfo Score;
- protected readonly WorkingBeatmap Beatmap;
- private CircularContainer content;
- private Box fill;
-
- protected override Container Content => content;
-
- protected ResultsPage(ScoreInfo score, WorkingBeatmap beatmap)
- {
- Score = score;
- Beatmap = beatmap;
- RelativeSizeAxes = Axes.Both;
- }
-
- protected override void LoadComplete()
- {
- base.LoadComplete();
- fill.Delay(400).FadeInFromZero(600);
- }
-
- [BackgroundDependencyLoader]
- private void load(OsuColour colours)
- {
- AddRangeInternal(new Drawable[]
- {
- fill = new Box
- {
- Alpha = 0,
- RelativeSizeAxes = Axes.Both,
- Colour = colours.Gray6
- },
- new CircularContainer
- {
- EdgeEffect = new EdgeEffectParameters
- {
- Colour = colours.GrayF.Opacity(0.8f),
- Type = EdgeEffectType.Shadow,
- Radius = 1,
- },
- RelativeSizeAxes = Axes.Both,
- Masking = true,
- BorderThickness = 20,
- BorderColour = Color4.White,
- Anchor = Anchor.Centre,
- Origin = Anchor.Centre,
- Children = new Drawable[]
- {
- new Box
- {
- RelativeSizeAxes = Axes.Both,
- Alpha = 0,
- AlwaysPresent = true
- },
- }
- },
- content = new CircularContainer
- {
- EdgeEffect = new EdgeEffectParameters
- {
- Colour = Color4.Black.Opacity(0.2f),
- Type = EdgeEffectType.Shadow,
- Radius = 15,
- },
- RelativeSizeAxes = Axes.Both,
- Masking = true,
- Size = new Vector2(0.88f),
- Anchor = Anchor.Centre,
- Origin = Anchor.Centre,
- }
- });
- }
- }
-}
diff --git a/osu.Game/Screens/Ranking/ResultsScreen.cs b/osu.Game/Screens/Ranking/ResultsScreen.cs
new file mode 100644
index 0000000000..0952ba1f70
--- /dev/null
+++ b/osu.Game/Screens/Ranking/ResultsScreen.cs
@@ -0,0 +1,142 @@
+// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
+// See the LICENCE file in the repository root for full licence text.
+
+using osu.Framework.Allocation;
+using osu.Framework.Extensions.Color4Extensions;
+using osu.Framework.Graphics;
+using osu.Framework.Graphics.Containers;
+using osu.Framework.Graphics.Shapes;
+using osu.Framework.Screens;
+using osu.Game.Graphics.Containers;
+using osu.Game.Graphics.UserInterface;
+using osu.Game.Scoring;
+using osu.Game.Screens.Backgrounds;
+using osu.Game.Screens.Play;
+using osuTK;
+
+namespace osu.Game.Screens.Ranking
+{
+ public class ResultsScreen : OsuScreen
+ {
+ protected const float BACKGROUND_BLUR = 20;
+
+ public override bool DisallowExternalBeatmapRulesetChanges => true;
+
+ // Temporary for now to stop dual transitions. Should respect the current toolbar mode, but there's no way to do so currently.
+ public override bool HideOverlaysOnEnter => true;
+
+ protected override BackgroundScreen CreateBackground() => new BackgroundScreenBeatmap(Beatmap.Value);
+
+ [Resolved(CanBeNull = true)]
+ private Player player { get; set; }
+
+ private readonly ScoreInfo score;
+
+ private Drawable bottomPanel;
+
+ public ResultsScreen(ScoreInfo score)
+ {
+ this.score = score;
+ }
+
+ [BackgroundDependencyLoader]
+ private void load()
+ {
+ InternalChildren = new[]
+ {
+ new ResultsScrollContainer
+ {
+ Child = new ScorePanel(score)
+ {
+ Anchor = Anchor.Centre,
+ Origin = Anchor.Centre,
+ State = PanelState.Expanded
+ },
+ },
+ bottomPanel = new Container
+ {
+ Anchor = Anchor.BottomLeft,
+ Origin = Anchor.BottomLeft,
+ RelativeSizeAxes = Axes.X,
+ Height = TwoLayerButton.SIZE_EXTENDED.Y,
+ Alpha = 0,
+ Children = new Drawable[]
+ {
+ new Box
+ {
+ RelativeSizeAxes = Axes.Both,
+ Colour = Color4Extensions.FromHex("#333")
+ },
+ new FillFlowContainer
+ {
+ Anchor = Anchor.Centre,
+ Origin = Anchor.Centre,
+ AutoSizeAxes = Axes.Both,
+ Spacing = new Vector2(5),
+ Direction = FillDirection.Horizontal,
+ Children = new Drawable[]
+ {
+ new ReplayDownloadButton(score) { Width = 300 },
+ new RetryButton { Width = 300 },
+ }
+ }
+ }
+ }
+ };
+
+ if (player != null)
+ {
+ AddInternal(new HotkeyRetryOverlay
+ {
+ Action = () =>
+ {
+ if (!this.IsCurrentScreen()) return;
+
+ player?.Restart();
+ },
+ });
+ }
+ }
+
+ public override void OnEntering(IScreen last)
+ {
+ base.OnEntering(last);
+
+ ((BackgroundScreenBeatmap)Background).BlurAmount.Value = BACKGROUND_BLUR;
+
+ Background.FadeTo(0.5f, 250);
+ bottomPanel.FadeTo(1, 250);
+ }
+
+ public override bool OnExiting(IScreen next)
+ {
+ Background.FadeTo(1, 250);
+
+ return base.OnExiting(next);
+ }
+
+ private class ResultsScrollContainer : OsuScrollContainer
+ {
+ private readonly Container content;
+
+ protected override Container Content => content;
+
+ public ResultsScrollContainer()
+ {
+ base.Content.Add(content = new Container
+ {
+ RelativeSizeAxes = Axes.X
+ });
+
+ RelativeSizeAxes = Axes.Both;
+ ScrollbarVisible = false;
+ }
+
+ protected override void Update()
+ {
+ base.Update();
+ content.Height = DrawHeight;
+ }
+ }
+ }
+}
diff --git a/osu.Game/Screens/Ranking/Pages/RetryButton.cs b/osu.Game/Screens/Ranking/RetryButton.cs
similarity index 97%
rename from osu.Game/Screens/Ranking/Pages/RetryButton.cs
rename to osu.Game/Screens/Ranking/RetryButton.cs
index 06d0440b30..59b69bc949 100644
--- a/osu.Game/Screens/Ranking/Pages/RetryButton.cs
+++ b/osu.Game/Screens/Ranking/RetryButton.cs
@@ -10,7 +10,7 @@ using osu.Game.Graphics.UserInterface;
using osu.Game.Screens.Play;
using osuTK;
-namespace osu.Game.Screens.Ranking.Pages
+namespace osu.Game.Screens.Ranking
{
public class RetryButton : OsuAnimatedButton
{
diff --git a/osu.Game/Screens/Ranking/Types/LocalLeaderboardPageInfo.cs b/osu.Game/Screens/Ranking/Types/LocalLeaderboardPageInfo.cs
deleted file mode 100644
index fe183c5f89..0000000000
--- a/osu.Game/Screens/Ranking/Types/LocalLeaderboardPageInfo.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
-// See the LICENCE file in the repository root for full licence text.
-
-using osu.Framework.Graphics.Sprites;
-using osu.Game.Beatmaps;
-using osu.Game.Scoring;
-using osu.Game.Screens.Ranking.Pages;
-
-namespace osu.Game.Screens.Ranking.Types
-{
- public class LocalLeaderboardPageInfo : IResultPageInfo
- {
- private readonly ScoreInfo score;
- private readonly WorkingBeatmap beatmap;
-
- public LocalLeaderboardPageInfo(ScoreInfo score, WorkingBeatmap beatmap)
- {
- this.score = score;
- this.beatmap = beatmap;
- }
-
- public IconUsage Icon => FontAwesome.Solid.User;
-
- public string Name => @"Local Leaderboard";
-
- public ResultsPage CreatePage() => new LocalLeaderboardPage(score, beatmap);
- }
-}
diff --git a/osu.Game/Screens/Ranking/Types/ScoreOverviewPageInfo.cs b/osu.Game/Screens/Ranking/Types/ScoreOverviewPageInfo.cs
deleted file mode 100644
index 424dbff6f6..0000000000
--- a/osu.Game/Screens/Ranking/Types/ScoreOverviewPageInfo.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
-// See the LICENCE file in the repository root for full licence text.
-
-using osu.Framework.Graphics.Sprites;
-using osu.Game.Beatmaps;
-using osu.Game.Scoring;
-using osu.Game.Screens.Ranking.Pages;
-
-namespace osu.Game.Screens.Ranking.Types
-{
- public class ScoreOverviewPageInfo : IResultPageInfo
- {
- public IconUsage Icon => FontAwesome.Solid.Asterisk;
-
- public string Name => "Overview";
- private readonly ScoreInfo score;
- private readonly WorkingBeatmap beatmap;
-
- public ScoreOverviewPageInfo(ScoreInfo score, WorkingBeatmap beatmap)
- {
- this.score = score;
- this.beatmap = beatmap;
- }
-
- public ResultsPage CreatePage()
- {
- return new ScoreResultsPage(score, beatmap);
- }
- }
-}
diff --git a/osu.Game/Screens/Select/PlaySongSelect.cs b/osu.Game/Screens/Select/PlaySongSelect.cs
index af113781e5..9e2f5761dd 100644
--- a/osu.Game/Screens/Select/PlaySongSelect.cs
+++ b/osu.Game/Screens/Select/PlaySongSelect.cs
@@ -8,6 +8,7 @@ using osu.Framework.Input.Events;
using osu.Framework.Screens;
using osu.Game.Graphics;
using osu.Game.Screens.Play;
+using osu.Game.Screens.Ranking;
using osu.Game.Users;
using osuTK.Input;
@@ -31,7 +32,7 @@ namespace osu.Game.Screens.Select
Edit();
}, Key.Number4);
- ((PlayBeatmapDetailArea)BeatmapDetails).Leaderboard.ScoreSelected += score => this.Push(new SoloResults(score));
+ ((PlayBeatmapDetailArea)BeatmapDetails).Leaderboard.ScoreSelected += score => this.Push(new ResultsScreen(score));
}
protected override BeatmapDetailArea CreateBeatmapDetailArea() => new PlayBeatmapDetailArea();