diff --git a/osu.Game/Rulesets/UI/DrawableRuleset.cs b/osu.Game/Rulesets/UI/DrawableRuleset.cs index 97c4ee45af..6b2387eb9b 100644 --- a/osu.Game/Rulesets/UI/DrawableRuleset.cs +++ b/osu.Game/Rulesets/UI/DrawableRuleset.cs @@ -300,6 +300,7 @@ namespace osu.Game.Rulesets.UI if (score == null) { + NewResult -= emitImportantFrame; recordingInputManager.Recorder = null; return; } @@ -311,7 +312,10 @@ namespace osu.Game.Rulesets.UI recorder.ScreenSpaceToGamefield = Playfield.ScreenSpaceToGamefield; + NewResult += emitImportantFrame; recordingInputManager.Recorder = recorder; + + void emitImportantFrame(JudgementResult judgementResult) => recordingInputManager.Recorder?.RecordFrame(true); } public override void SetReplayScore(Score replayScore) diff --git a/osu.Game/Rulesets/UI/IHasRecordingHandler.cs b/osu.Game/Rulesets/UI/IHasRecordingHandler.cs index f73398dd98..f2e153e238 100644 --- a/osu.Game/Rulesets/UI/IHasRecordingHandler.cs +++ b/osu.Game/Rulesets/UI/IHasRecordingHandler.cs @@ -10,6 +10,6 @@ namespace osu.Game.Rulesets.UI /// public interface IHasRecordingHandler { - public ReplayRecorder? Recorder { set; } + public ReplayRecorder? Recorder { get; set; } } } diff --git a/osu.Game/Rulesets/UI/ReplayRecorder.cs b/osu.Game/Rulesets/UI/ReplayRecorder.cs index d723c31434..b126ed25f9 100644 --- a/osu.Game/Rulesets/UI/ReplayRecorder.cs +++ b/osu.Game/Rulesets/UI/ReplayRecorder.cs @@ -51,29 +51,29 @@ namespace osu.Game.Rulesets.UI protected override void Update() { base.Update(); - recordFrame(false); + RecordFrame(false); } protected override bool OnMouseMove(MouseMoveEvent e) { - recordFrame(false); + RecordFrame(false); return base.OnMouseMove(e); } public bool OnPressed(KeyBindingPressEvent e) { pressedActions.Add(e.Action); - recordFrame(true); + RecordFrame(true); return false; } public void OnReleased(KeyBindingReleaseEvent e) { pressedActions.Remove(e.Action); - recordFrame(true); + RecordFrame(true); } - private void recordFrame(bool important) + public override void RecordFrame(bool important) { var last = target.Replay.Frames.LastOrDefault(); @@ -98,5 +98,7 @@ namespace osu.Game.Rulesets.UI public abstract partial class ReplayRecorder : Component { public Func ScreenSpaceToGamefield; + + public abstract void RecordFrame(bool important); } } diff --git a/osu.Game/Rulesets/UI/RulesetInputManager.cs b/osu.Game/Rulesets/UI/RulesetInputManager.cs index 31c7c34572..aa2c740c5b 100644 --- a/osu.Game/Rulesets/UI/RulesetInputManager.cs +++ b/osu.Game/Rulesets/UI/RulesetInputManager.cs @@ -39,6 +39,7 @@ namespace osu.Game.Rulesets.UI public ReplayRecorder? Recorder { + get => recorder; set { if (value == recorder)