diff --git a/osu.Game.Tests/Visual/TestCaseOnScreenDisplay.cs b/osu.Game.Tests/Visual/TestCaseOnScreenDisplay.cs
index 123c1fe055..bc232d814d 100644
--- a/osu.Game.Tests/Visual/TestCaseOnScreenDisplay.cs
+++ b/osu.Game.Tests/Visual/TestCaseOnScreenDisplay.cs
@@ -88,7 +88,7 @@ namespace osu.Game.Tests.Visual
private class TestOnScreenDisplay : OnScreenDisplay
{
- protected override void Display(Drawable toDisplay) => toDisplay.FadeIn().ResizeHeightTo(110);
+ protected override void DisplayTemporarily(Drawable toDisplay) => toDisplay.FadeIn().ResizeHeightTo(110);
}
}
}
diff --git a/osu.Game.Tests/Visual/TestCaseUserProfile.cs b/osu.Game.Tests/Visual/TestCaseUserProfile.cs
index aca832110a..cb281d045b 100644
--- a/osu.Game.Tests/Visual/TestCaseUserProfile.cs
+++ b/osu.Game.Tests/Visual/TestCaseUserProfile.cs
@@ -53,7 +53,6 @@ namespace osu.Game.Tests.Visual
CoverUrl = @"https://osu.ppy.sh/images/headers/profile-covers/c1.jpg",
JoinDate = DateTimeOffset.Now.AddDays(-1),
LastVisit = DateTimeOffset.Now,
- Age = 1,
ProfileOrder = new[] { "me" },
Statistics = new UserStatistics
{
diff --git a/osu.Game/Overlays/OnScreenDisplay.cs b/osu.Game/Overlays/OnScreenDisplay.cs
index 1c80f2e626..753cd33cc6 100644
--- a/osu.Game/Overlays/OnScreenDisplay.cs
+++ b/osu.Game/Overlays/OnScreenDisplay.cs
@@ -14,6 +14,8 @@ using osu.Game.Graphics;
using OpenTK;
using OpenTK.Graphics;
using osu.Framework.Extensions.Color4Extensions;
+using osu.Framework.Graphics.Transforms;
+using osu.Framework.Threading;
using osu.Game.Configuration;
using osu.Game.Graphics.Sprites;
@@ -135,7 +137,7 @@ namespace osu.Game.Overlays
/// If is already being tracked from the same .
public void BeginTracking(object source, ITrackableConfigManager configManager)
{
- if (configManager == null) throw new ArgumentNullException(nameof(configManager));
+ if (configManager == null) throw new ArgumentNullException(nameof(configManager));
if (trackedConfigManagers.ContainsKey((source, configManager)))
throw new InvalidOperationException($"{nameof(configManager)} is already registered.");
@@ -159,7 +161,7 @@ namespace osu.Game.Overlays
/// If is not being tracked from the same .
public void StopTracking(object source, ITrackableConfigManager configManager)
{
- if (configManager == null) throw new ArgumentNullException(nameof(configManager));
+ if (configManager == null) throw new ArgumentNullException(nameof(configManager));
if (!trackedConfigManagers.TryGetValue((source, configManager), out var existing))
throw new InvalidOperationException($"{nameof(configManager)} is not registered.");
@@ -181,7 +183,7 @@ namespace osu.Game.Overlays
if (string.IsNullOrEmpty(textLine3.Text))
textLine3.Text = "NO KEY BOUND";
- Display(box);
+ DisplayTemporarily(box);
int optionCount = 0;
int selectedOption = -1;
@@ -213,15 +215,29 @@ namespace osu.Game.Overlays
});
}
- protected virtual void Display(Drawable toDisplay)
+ private TransformSequence fadeIn;
+ private ScheduledDelegate fadeOut;
+
+ protected virtual void DisplayTemporarily(Drawable toDisplay)
{
- toDisplay.Animate(
- b => b.FadeIn(500, Easing.OutQuint),
- b => b.ResizeHeightTo(height, 500, Easing.OutQuint)
- ).Then(
- b => b.FadeOutFromOne(1500, Easing.InQuint),
- b => b.ResizeHeightTo(height_contracted, 1500, Easing.InQuint)
- );
+ // avoid starting a new fade-in if one is already active.
+ if (fadeIn == null)
+ {
+ fadeIn = toDisplay.Animate(
+ b => b.FadeIn(500, Easing.OutQuint),
+ b => b.ResizeHeightTo(height, 500, Easing.OutQuint)
+ );
+
+ fadeIn.Finally(_ => fadeIn = null);
+ }
+
+ fadeOut?.Cancel();
+ fadeOut = Scheduler.AddDelayed(() =>
+ {
+ toDisplay.Animate(
+ b => b.FadeOutFromOne(1500, Easing.InQuint),
+ b => b.ResizeHeightTo(height_contracted, 1500, Easing.InQuint));
+ }, 500);
}
private class OptionLight : Container
diff --git a/osu.Game/Overlays/Profile/ProfileHeader.cs b/osu.Game/Overlays/Profile/ProfileHeader.cs
index c72ff6131b..c5510d3d70 100644
--- a/osu.Game/Overlays/Profile/ProfileHeader.cs
+++ b/osu.Game/Overlays/Profile/ProfileHeader.cs
@@ -360,11 +360,6 @@ namespace osu.Game.Overlays.Profile
Text = text
};
- if (user.Age != null)
- {
- infoTextLeft.AddText($"{user.Age} years old ", boldItalic);
- }
-
if (user.Country != null)
{
infoTextLeft.AddText("From ", lightText);
diff --git a/osu.Game/Screens/Select/Leaderboards/DrawableRank.cs b/osu.Game/Screens/Select/Leaderboards/DrawableRank.cs
index 2a11bf8346..228633a41f 100644
--- a/osu.Game/Screens/Select/Leaderboards/DrawableRank.cs
+++ b/osu.Game/Screens/Select/Leaderboards/DrawableRank.cs
@@ -46,7 +46,9 @@ namespace osu.Game.Screens.Select.Leaderboards
public void UpdateRank(ScoreRank newRank)
{
Rank = newRank;
- updateTexture();
+
+ if (IsLoaded)
+ updateTexture();
}
}
}
diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs
index 9c62f92311..85eecd5c1a 100644
--- a/osu.Game/Screens/Select/SongSelect.cs
+++ b/osu.Game/Screens/Select/SongSelect.cs
@@ -138,7 +138,11 @@ namespace osu.Game.Screens.Select
Height = filter_height,
FilterChanged = c => Carousel.Filter(c),
Background = { Width = 2 },
- Exit = Exit,
+ Exit = () =>
+ {
+ if (IsCurrentScreen)
+ Exit();
+ },
},
}
},
@@ -231,6 +235,10 @@ namespace osu.Game.Screens.Select
/// Whether to trigger .
public void FinaliseSelection(BeatmapInfo beatmap = null, bool performStartAction = true)
{
+ // avoid attempting to continue before a selection has been obtained.
+ // this could happen via a user interaction while the carousel is still in a loading state.
+ if (Carousel.SelectedBeatmap == null) return;
+
// if we have a pending filter operation, we want to run it now.
// it could change selection (ie. if the ruleset has been changed).
Carousel.FlushPendingFilterOperations();
diff --git a/osu.Game/Users/Country.cs b/osu.Game/Users/Country.cs
index c9b577a62f..98b3a2df0c 100644
--- a/osu.Game/Users/Country.cs
+++ b/osu.Game/Users/Country.cs
@@ -42,7 +42,9 @@ namespace osu.Game.Users
return;
country = value;
- sprite.Texture = getFlagTexture();
+
+ if (IsLoaded)
+ sprite.Texture = getFlagTexture();
}
}
diff --git a/osu.Game/Users/User.cs b/osu.Game/Users/User.cs
index e1f68e1ce8..f42df4023f 100644
--- a/osu.Game/Users/User.cs
+++ b/osu.Game/Users/User.cs
@@ -23,9 +23,6 @@ namespace osu.Game.Users
public Bindable Status = new Bindable();
- [JsonProperty(@"age")]
- public int? Age;
-
//public Team Team;
[JsonProperty(@"profile_colour")]
diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj
index da55726447..ec2742d4a9 100644
--- a/osu.Game/osu.Game.csproj
+++ b/osu.Game/osu.Game.csproj
@@ -18,7 +18,7 @@
-
+