diff --git a/osu.Game/Overlays/MedalOverlay.cs b/osu.Game/Overlays/MedalOverlay.cs
index 76936e0f5a..3601566dda 100644
--- a/osu.Game/Overlays/MedalOverlay.cs
+++ b/osu.Game/Overlays/MedalOverlay.cs
@@ -54,7 +54,7 @@ namespace osu.Game.Overlays
OverlayActivationMode.BindValueChanged(val =>
{
- if (val.NewValue != OverlayActivation.Disabled && (queuedMedals.Any() || medalContainer.Any()))
+ if (val.NewValue == OverlayActivation.All && (queuedMedals.Any() || medalContainer.Any()))
Show();
}, true);
}
@@ -81,7 +81,8 @@ namespace osu.Game.Overlays
var medalAnimation = new MedalAnimation(medal);
queuedMedals.Enqueue(medalAnimation);
- Scheduler.AddOnce(Show);
+ if (OverlayActivationMode.Value == OverlayActivation.All)
+ Scheduler.AddOnce(Show);
}
protected override void Update()
diff --git a/osu.Game/Screens/Ranking/Expanded/Accuracy/AccuracyCircle.cs b/osu.Game/Screens/Ranking/Expanded/Accuracy/AccuracyCircle.cs
index d209c305fa..f807126614 100644
--- a/osu.Game/Screens/Ranking/Expanded/Accuracy/AccuracyCircle.cs
+++ b/osu.Game/Screens/Ranking/Expanded/Accuracy/AccuracyCircle.cs
@@ -31,6 +31,11 @@ namespace osu.Game.Screens.Ranking.Expanded.Accuracy
///
public partial class AccuracyCircle : CompositeDrawable
{
+ ///
+ /// The total duration of the animation.
+ ///
+ public const double TOTAL_DURATION = APPEAR_DURATION + ACCURACY_TRANSFORM_DELAY + ACCURACY_TRANSFORM_DURATION;
+
///
/// Duration for the transforms causing this component to appear.
///
diff --git a/osu.Game/Screens/Ranking/ResultsScreen.cs b/osu.Game/Screens/Ranking/ResultsScreen.cs
index 69cfbed8f2..93114b1d18 100644
--- a/osu.Game/Screens/Ranking/ResultsScreen.cs
+++ b/osu.Game/Screens/Ranking/ResultsScreen.cs
@@ -25,8 +25,10 @@ using osu.Game.Input.Bindings;
using osu.Game.Localisation;
using osu.Game.Online.API;
using osu.Game.Online.Placeholders;
+using osu.Game.Overlays;
using osu.Game.Scoring;
using osu.Game.Screens.Play;
+using osu.Game.Screens.Ranking.Expanded.Accuracy;
using osu.Game.Screens.Ranking.Statistics;
using osuTK;
@@ -41,6 +43,8 @@ namespace osu.Game.Screens.Ranking
public override bool? AllowGlobalTrackControl => true;
+ protected override OverlayActivation InitialOverlayActivationMode => OverlayActivation.UserTriggered;
+
public readonly Bindable SelectedScore = new Bindable();
[CanBeNull]
@@ -160,6 +164,10 @@ namespace osu.Game.Screens.Ranking
bool shouldFlair = player != null && !Score.User.IsBot;
ScorePanelList.AddScore(Score, shouldFlair);
+ // this is mostly for medal display.
+ // we don't want the medal animation to trample on the results screen animation, so we (ab)use `OverlayActivationMode`
+ // to give the results screen enough time to play the animation out before the medals can be shown.
+ Scheduler.AddDelayed(() => OverlayActivationMode.Value = OverlayActivation.All, shouldFlair ? AccuracyCircle.TOTAL_DURATION + 1000 : 0);
}
if (allowWatchingReplay)