diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs
index 64d5aa6ef7..985eb32cca 100644
--- a/osu.Game/Screens/Play/Player.cs
+++ b/osu.Game/Screens/Play/Player.cs
@@ -583,6 +583,8 @@ namespace osu.Game.Screens.Play
/// The destination time to seek to.
public void Seek(double time) => GameplayClockContainer.Seek(time);
+ private ScheduledDelegate frameStablePlaybackResetDelegate;
+
///
/// Seeks to a specific time in gameplay, bypassing frame stability.
///
@@ -592,13 +594,16 @@ namespace osu.Game.Screens.Play
/// The destination time to seek to.
public void NonFrameStableSeek(double time)
{
+ if (frameStablePlaybackResetDelegate?.Cancelled == false && !frameStablePlaybackResetDelegate.Completed)
+ frameStablePlaybackResetDelegate.RunTask();
+
bool wasFrameStable = DrawableRuleset.FrameStablePlayback;
DrawableRuleset.FrameStablePlayback = false;
Seek(time);
// Delay resetting frame-stable playback for one frame to give the FrameStabilityContainer a chance to seek.
- ScheduleAfterChildren(() => DrawableRuleset.FrameStablePlayback = wasFrameStable);
+ frameStablePlaybackResetDelegate = ScheduleAfterChildren(() => DrawableRuleset.FrameStablePlayback = wasFrameStable);
}
///
@@ -931,11 +936,10 @@ namespace osu.Game.Screens.Play
/// Creates the player's .
///
/// The .
- protected virtual Score CreateScore() =>
- new Score
- {
- ScoreInfo = new ScoreInfo { User = api.LocalUser.Value },
- };
+ protected virtual Score CreateScore() => new Score
+ {
+ ScoreInfo = new ScoreInfo { User = api.LocalUser.Value },
+ };
///
/// Imports the player's to the local database.