diff --git a/osu.Game/Screens/OnlinePlay/Multiplayer/Spectate/SpectatorPlayerClock.cs b/osu.Game/Screens/OnlinePlay/Multiplayer/Spectate/SpectatorPlayerClock.cs
index 729a120dc1..4e785ad3b1 100644
--- a/osu.Game/Screens/OnlinePlay/Multiplayer/Spectate/SpectatorPlayerClock.cs
+++ b/osu.Game/Screens/OnlinePlay/Multiplayer/Spectate/SpectatorPlayerClock.cs
@@ -22,7 +22,24 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Spectate
public double CurrentTime { get; private set; }
- public bool IsRunning { get; private set; }
+ ///
+ /// Whether this clock is waiting on frames to continue playback.
+ ///
+ public Bindable WaitingOnFrames { get; } = new Bindable(true);
+
+ ///
+ /// Whether this clock is behind the master clock and running at a higher rate to catch up to it.
+ ///
+ ///
+ /// Of note, this will be false if this clock is *ahead* of the master clock.
+ ///
+ public bool IsCatchingUp { get; set; }
+
+ ///
+ /// Whether this spectator clock should be running.
+ /// Use instead of / to control time.
+ ///
+ public bool IsRunning { get; set; }
public SpectatorPlayerClock(GameplayClockContainer masterClock)
{
@@ -31,24 +48,14 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Spectate
public void Reset() => CurrentTime = 0;
- ///
- /// Starts this .
- ///
- public void Start() => IsRunning = true;
-
- ///
- /// Stops this .
- ///
- public void Stop() => IsRunning = false;
-
- void IAdjustableClock.Start()
+ public void Start()
{
- // Our running state should only be managed by an ISyncManager, ignore calls from external sources.
+ // Our running state should only be managed by SpectatorSyncManager via IsRunning.
}
- void IAdjustableClock.Stop()
+ public void Stop()
{
- // Our running state should only be managed by an ISyncManager, ignore calls from external sources.
+ // Our running state should only be managed by an SpectatorSyncManager via IsRunning.
}
public bool Seek(double position)
@@ -94,18 +101,5 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Spectate
public double FramesPerSecond { get; private set; }
public FrameTimeInfo TimeInfo => new FrameTimeInfo { Elapsed = ElapsedFrameTime, Current = CurrentTime };
-
- ///
- /// Whether this clock is waiting on frames to continue playback.
- ///
- public Bindable WaitingOnFrames { get; } = new Bindable(true);
-
- ///
- /// Whether this clock is behind the master clock and running at a higher rate to catch up to it.
- ///
- ///
- /// Of note, this will be false if this clock is *ahead* of the master clock.
- ///
- public bool IsCatchingUp { get; set; }
}
}
diff --git a/osu.Game/Screens/OnlinePlay/Multiplayer/Spectate/SpectatorSyncManager.cs b/osu.Game/Screens/OnlinePlay/Multiplayer/Spectate/SpectatorSyncManager.cs
index aa6fb878b3..7ec8f45b1f 100644
--- a/osu.Game/Screens/OnlinePlay/Multiplayer/Spectate/SpectatorSyncManager.cs
+++ b/osu.Game/Screens/OnlinePlay/Multiplayer/Spectate/SpectatorSyncManager.cs
@@ -80,7 +80,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Spectate
public void RemoveManagedClock(SpectatorPlayerClock clock)
{
playerClocks.Remove(clock);
- clock.Stop();
+ clock.IsRunning = false;
}
protected override void Update()
@@ -91,7 +91,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Spectate
{
// Ensure all player clocks are stopped until the start succeeds.
foreach (var clock in playerClocks)
- clock.Stop();
+ clock.IsRunning = true;
return;
}
@@ -153,15 +153,12 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Spectate
// Importantly, set the clock to a non-catchup state. if this isn't done, updateMasterState may incorrectly pause the master clock
// when it is required to be running (ie. if all players are ahead of the master).
clock.IsCatchingUp = false;
- clock.Stop();
+ clock.IsRunning = false;
continue;
}
// Make sure the player clock is running if it can.
- if (!clock.WaitingOnFrames.Value)
- clock.Start();
- else
- clock.Stop();
+ clock.IsRunning = !clock.WaitingOnFrames.Value;
if (clock.IsCatchingUp)
{