diff --git a/osu.Game/Screens/Play/PauseContainer.cs b/osu.Game/Screens/Play/PauseContainer.cs
index bd334ad2e2..6262f71ddc 100644
--- a/osu.Game/Screens/Play/PauseContainer.cs
+++ b/osu.Game/Screens/Play/PauseContainer.cs
@@ -44,13 +44,18 @@ public class PauseContainer : Container
public Action OnResume;
public Action OnPause;
- private readonly IAdjustableClock adjustableClock;
private readonly FramedClock framedClock;
+ private readonly DecoupleableInterpolatingFramedClock decoupledClock;
- public PauseContainer(FramedClock framedClock, IAdjustableClock adjustableClock)
+ ///
+ /// Creates a new .
+ ///
+ /// The gameplay clock. This is the clock that will process frames.
+ /// The seekable clock. This is the clock that will be paused and resumed.
+ public PauseContainer(FramedClock framedClock, DecoupleableInterpolatingFramedClock decoupledClock)
{
this.framedClock = framedClock;
- this.adjustableClock = adjustableClock;
+ this.decoupledClock = decoupledClock;
RelativeSizeAxes = Axes.Both;
@@ -80,7 +85,7 @@ public void Pause(bool force = false) => Schedule(() => // Scheduled to ensure a
if (IsPaused) return;
// stop the seekable clock (stops the audio eventually)
- adjustableClock.Stop();
+ decoupledClock.Stop();
IsPaused = true;
OnPause?.Invoke();
@@ -97,10 +102,10 @@ public void Resume()
IsResuming = false;
lastPauseActionTime = Time.Current;
- // seek back to the time of the framed clock.
- // this accounts for the audio clock potentially taking time to enter a completely stopped state.
- adjustableClock.Seek(framedClock.CurrentTime);
- adjustableClock.Start();
+ // Seeking the decoupled clock to its current time ensures that its source clock will be seeked to the same time
+ // This accounts for the audio clock source potentially taking time to enter a completely stopped state
+ decoupledClock.Seek(decoupledClock.CurrentTime);
+ decoupledClock.Start();
OnResume?.Invoke();
pauseOverlay.Hide();