diff --git a/osu.Game/Configuration/OsuConfigManager.cs b/osu.Game/Configuration/OsuConfigManager.cs
index 565a919fb8..a4544200c7 100644
--- a/osu.Game/Configuration/OsuConfigManager.cs
+++ b/osu.Game/Configuration/OsuConfigManager.cs
@@ -178,6 +178,7 @@ namespace osu.Game.Configuration
SetDefault(OsuSetting.EditorDim, 0.25f, 0f, 0.75f, 0.25f);
SetDefault(OsuSetting.EditorWaveformOpacity, 0.25f, 0f, 1f, 0.25f);
SetDefault(OsuSetting.EditorShowHitMarkers, true);
+ SetDefault(OsuSetting.EditorSeekToHitobject, true);
SetDefault(OsuSetting.LastProcessedMetadataId, -1);
@@ -374,6 +375,7 @@ namespace osu.Game.Configuration
SeasonalBackgroundMode,
EditorWaveformOpacity,
EditorShowHitMarkers,
+ EditorSeekToHitobject,
DiscordRichPresence,
AutomaticallyDownloadWhenSpectating,
ShowOnlineExplicitContent,
diff --git a/osu.Game/Localisation/EditorStrings.cs b/osu.Game/Localisation/EditorStrings.cs
index 96c08aa6f8..65cecd27d6 100644
--- a/osu.Game/Localisation/EditorStrings.cs
+++ b/osu.Game/Localisation/EditorStrings.cs
@@ -19,6 +19,11 @@ namespace osu.Game.Localisation
///
public static LocalisableString ShowHitMarkers => new TranslatableString(getKey(@"show_hit_markers"), @"Show hit markers");
+ ///
+ /// "Seek to Object after placement"
+ ///
+ public static LocalisableString SeekToHitobject => new TranslatableString(getKey(@"seek_to_hitobject"), @"Seek to Object after placement");
+
///
/// "Timing"
///
diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs
index b5b7400f64..528088dbda 100644
--- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs
+++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs
@@ -17,6 +17,7 @@ using osu.Framework.Input;
using osu.Framework.Input.Events;
using osu.Framework.Logging;
using osu.Game.Beatmaps;
+using osu.Game.Configuration;
using osu.Game.Overlays;
using osu.Game.Rulesets.Configuration;
using osu.Game.Rulesets.Edit.Tools;
@@ -70,6 +71,7 @@ namespace osu.Game.Rulesets.Edit
private FillFlowContainer togglesCollection;
private IBindable hasTiming;
+ protected Bindable SeekToHitobject { get; private set; }
protected HitObjectComposer(Ruleset ruleset)
: base(ruleset)
@@ -80,8 +82,10 @@ namespace osu.Game.Rulesets.Edit
dependencies = new DependencyContainer(base.CreateChildDependencies(parent));
[BackgroundDependencyLoader]
- private void load(OverlayColourProvider colourProvider)
+ private void load(OverlayColourProvider colourProvider, OsuConfigManager config)
{
+ SeekToHitobject = config.GetBindable(OsuSetting.EditorSeekToHitobject);
+
Config = Dependencies.Get().GetConfigFor(Ruleset);
try
@@ -365,6 +369,9 @@ namespace osu.Game.Rulesets.Edit
{
EditorBeatmap.Add(hitObject);
+ // conditionally seek based on setting
+ if (!SeekToHitobject.Value) return;
+
if (EditorClock.CurrentTime < hitObject.StartTime)
EditorClock.SeekSmoothlyTo(hitObject.StartTime);
}
diff --git a/osu.Game/Screens/Edit/Editor.cs b/osu.Game/Screens/Edit/Editor.cs
index bd133383d1..d6c698c139 100644
--- a/osu.Game/Screens/Edit/Editor.cs
+++ b/osu.Game/Screens/Edit/Editor.cs
@@ -185,6 +185,7 @@ namespace osu.Game.Screens.Edit
private Bindable editorBackgroundDim;
private Bindable editorHitMarkers;
+ private Bindable editorSeekToHitobject;
public Editor(EditorLoader loader = null)
{
@@ -272,6 +273,7 @@ namespace osu.Game.Screens.Edit
editorBackgroundDim = config.GetBindable(OsuSetting.EditorDim);
editorHitMarkers = config.GetBindable(OsuSetting.EditorShowHitMarkers);
+ editorSeekToHitobject = config.GetBindable(OsuSetting.EditorSeekToHitobject);
AddInternal(new OsuContextMenuContainer
{
@@ -329,6 +331,10 @@ namespace osu.Game.Screens.Edit
new ToggleMenuItem(EditorStrings.ShowHitMarkers)
{
State = { BindTarget = editorHitMarkers },
+ },
+ new ToggleMenuItem(EditorStrings.SeekToHitobject)
+ {
+ State = { BindTarget = editorSeekToHitobject },
}
}
},