diff --git a/osu.Game/Rulesets/UI/DrawableRuleset.cs b/osu.Game/Rulesets/UI/DrawableRuleset.cs
index 16a411d478..e2e3c22618 100644
--- a/osu.Game/Rulesets/UI/DrawableRuleset.cs
+++ b/osu.Game/Rulesets/UI/DrawableRuleset.cs
@@ -267,6 +267,12 @@ namespace osu.Game.Rulesets.UI
if (!(KeyBindingInputManager is IHasRecordingHandler recordingInputManager))
throw new InvalidOperationException($"A {nameof(KeyBindingInputManager)} which supports recording is not available");
+ if (score == null)
+ {
+ recordingInputManager.Recorder = null;
+ return;
+ }
+
var recorder = CreateReplayRecorder(score);
if (recorder == null)
@@ -511,7 +517,7 @@ namespace osu.Game.Rulesets.UI
/// Sets a replay to be used to record gameplay.
///
/// The target to be recorded to.
- public abstract void SetRecordTarget(Score score);
+ public abstract void SetRecordTarget([CanBeNull] Score score);
///
/// Invoked when the interactive user requests resuming from a paused state.
diff --git a/osu.Game/Rulesets/UI/RulesetInputManager.cs b/osu.Game/Rulesets/UI/RulesetInputManager.cs
index 75c3a4661c..e3b9ad5641 100644
--- a/osu.Game/Rulesets/UI/RulesetInputManager.cs
+++ b/osu.Game/Rulesets/UI/RulesetInputManager.cs
@@ -30,12 +30,14 @@ namespace osu.Game.Rulesets.UI
{
set
{
- if (recorder != null)
+ if (value != null && recorder != null)
throw new InvalidOperationException("Cannot attach more than one recorder");
+ recorder?.Expire();
recorder = value;
- KeyBindingContainer.Add(recorder);
+ if (recorder != null)
+ KeyBindingContainer.Add(recorder);
}
}
diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs
index 0d1ebd30fc..20012d0282 100644
--- a/osu.Game/Screens/Play/Player.cs
+++ b/osu.Game/Screens/Play/Player.cs
@@ -636,6 +636,9 @@ namespace osu.Game.Screens.Play
ValidForResume = false;
+ // ensure we are not writing to the replay any more, as we are about to consume and store the score.
+ DrawableRuleset.SetRecordTarget(null);
+
if (!Configuration.ShowResults) return;
prepareScoreForDisplayTask ??= Task.Run(async () =>