diff --git a/osu.Game/OsuGameBase.cs b/osu.Game/OsuGameBase.cs
index 8d5c58d5f0..27ea3a76ae 100644
--- a/osu.Game/OsuGameBase.cs
+++ b/osu.Game/OsuGameBase.cs
@@ -185,6 +185,12 @@ namespace osu.Game
private RealmAccess realm;
+ ///
+ /// For now, this is used as a source specifically for beat synced components.
+ /// Going forward, it could potentially be used as the single source-of-truth for beatmap timing.
+ ///
+ private readonly FramedBeatmapClock beatmapClock = new FramedBeatmapClock(true);
+
protected override Container Content => content;
private Container content;
@@ -368,10 +374,15 @@ namespace osu.Game
AddInternal(MusicController = new MusicController());
dependencies.CacheAs(MusicController);
+ MusicController.TrackChanged += onTrackChanged;
+ AddInternal(beatmapClock);
+
Ruleset.BindValueChanged(onRulesetChanged);
Beatmap.BindValueChanged(onBeatmapChanged);
}
+ private void onTrackChanged(WorkingBeatmap beatmap, TrackChangeDirection direction) => beatmapClock.ChangeSource(beatmap.Track);
+
protected virtual void InitialiseFonts()
{
AddFont(Resources, @"Fonts/osuFont");
@@ -587,7 +598,7 @@ namespace osu.Game
}
ControlPointInfo IBeatSyncProvider.ControlPoints => Beatmap.Value.BeatmapLoaded ? Beatmap.Value.Beatmap.ControlPointInfo : null;
- IClock IBeatSyncProvider.Clock => Beatmap.Value.TrackLoaded ? Beatmap.Value.Track : (IClock)null;
+ IClock IBeatSyncProvider.Clock => beatmapClock;
ChannelAmplitudes IHasAmplitudes.CurrentAmplitudes => Beatmap.Value.TrackLoaded ? Beatmap.Value.Track.CurrentAmplitudes : ChannelAmplitudes.Empty;
}
}