diff --git a/osu.Game/Screens/Edit/Editor.cs b/osu.Game/Screens/Edit/Editor.cs
index ab24391bb4..ff9a19434b 100644
--- a/osu.Game/Screens/Edit/Editor.cs
+++ b/osu.Game/Screens/Edit/Editor.cs
@@ -325,6 +325,19 @@ namespace osu.Game.Screens.Edit
///
public void UpdateClockSource() => clock.ChangeSource(Beatmap.Value.Track);
+ ///
+ /// Creates an instance representing the current state of the editor.
+ ///
+ ///
+ /// The next beatmap to be shown, in the case of difficulty switch.
+ /// indicates that the beatmap will not be changing.
+ ///
+ private EditorState getState([CanBeNull] BeatmapInfo nextBeatmap = null) => new EditorState
+ {
+ Time = clock.CurrentTimeAccurate,
+ ClipboardContent = nextBeatmap == null || editorBeatmap.BeatmapInfo.RulesetID == nextBeatmap.RulesetID ? Clipboard.Content.Value : string.Empty
+ };
+
///
/// Restore the editor to a provided state.
///
@@ -780,11 +793,7 @@ namespace osu.Game.Screens.Edit
return new DifficultyMenuItem(beatmapInfo, isCurrentDifficulty, SwitchToDifficulty);
}
- protected void SwitchToDifficulty(BeatmapInfo nextBeatmap) => loader?.ScheduleDifficultySwitch(nextBeatmap, new EditorState
- {
- Time = clock.CurrentTimeAccurate,
- ClipboardContent = editorBeatmap.BeatmapInfo.RulesetID == nextBeatmap.RulesetID ? Clipboard.Content.Value : string.Empty
- });
+ protected void SwitchToDifficulty(BeatmapInfo nextBeatmap) => loader?.ScheduleDifficultySwitch(nextBeatmap, getState(nextBeatmap));
private void cancelExit()
{
@@ -807,7 +816,7 @@ namespace osu.Game.Screens.Edit
pushEditorPlayer();
}
- void pushEditorPlayer() => this.Push(new EditorPlayerLoader());
+ void pushEditorPlayer() => this.Push(new EditorPlayerLoader(getState()));
}
public double SnapTime(double time, double? referenceTime) => editorBeatmap.SnapTime(time, referenceTime);
diff --git a/osu.Game/Screens/Edit/GameplayTest/EditorPlayer.cs b/osu.Game/Screens/Edit/GameplayTest/EditorPlayer.cs
index 9856ad62bb..266c5e81d4 100644
--- a/osu.Game/Screens/Edit/GameplayTest/EditorPlayer.cs
+++ b/osu.Game/Screens/Edit/GameplayTest/EditorPlayer.cs
@@ -3,6 +3,7 @@
using osu.Framework.Allocation;
using osu.Framework.Screens;
+using osu.Game.Beatmaps;
using osu.Game.Overlays;
using osu.Game.Screens.Play;
@@ -10,14 +11,20 @@ namespace osu.Game.Screens.Edit.GameplayTest
{
public class EditorPlayer : Player
{
- public EditorPlayer()
- : base(new PlayerConfiguration { ShowResults = false })
- {
- }
+ private readonly EditorState editorState;
[Resolved]
private MusicController musicController { get; set; }
+ public EditorPlayer(EditorState editorState)
+ : base(new PlayerConfiguration { ShowResults = false })
+ {
+ this.editorState = editorState;
+ }
+
+ protected override GameplayClockContainer CreateGameplayClockContainer(WorkingBeatmap beatmap, double gameplayStart)
+ => new MasterGameplayClockContainer(beatmap, editorState.Time, true);
+
protected override void LoadComplete()
{
base.LoadComplete();
diff --git a/osu.Game/Screens/Edit/GameplayTest/EditorPlayerLoader.cs b/osu.Game/Screens/Edit/GameplayTest/EditorPlayerLoader.cs
index 610fff70f2..5c2ab04fd7 100644
--- a/osu.Game/Screens/Edit/GameplayTest/EditorPlayerLoader.cs
+++ b/osu.Game/Screens/Edit/GameplayTest/EditorPlayerLoader.cs
@@ -14,8 +14,8 @@ namespace osu.Game.Screens.Edit.GameplayTest
[Resolved]
private OsuLogo osuLogo { get; set; }
- public EditorPlayerLoader()
- : base(() => new EditorPlayer())
+ public EditorPlayerLoader(EditorState editorState)
+ : base(() => new EditorPlayer(editorState))
{
}