diff --git a/osu.Game.Rulesets.Osu/Edit/Blueprints/Sliders/Components/PathControlPointVisualiser.cs b/osu.Game.Rulesets.Osu/Edit/Blueprints/Sliders/Components/PathControlPointVisualiser.cs
index f0888b34fe..434e74ddeb 100644
--- a/osu.Game.Rulesets.Osu/Edit/Blueprints/Sliders/Components/PathControlPointVisualiser.cs
+++ b/osu.Game.Rulesets.Osu/Edit/Blueprints/Sliders/Components/PathControlPointVisualiser.cs
@@ -16,6 +16,7 @@ using osu.Game.Graphics.UserInterface;
using osu.Game.Rulesets.Objects;
using osu.Game.Rulesets.Osu.Objects;
using osu.Game.Screens.Edit.Compose;
+using osuTK;
using osuTK.Input;
namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders.Components
@@ -122,6 +123,13 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders.Components
return true;
}
+ // The path will have a non-zero offset if the head is removed, but sliders don't support this behaviour since the head is positioned at the slider's position
+ // So the slider needs to be offset by this amount instead, and all control points offset backwards such that the path is re-positioned at (0, 0)
+ Vector2 first = slider.Path.ControlPoints[0].Position.Value;
+ foreach (var c in slider.Path.ControlPoints)
+ c.Position.Value -= first;
+ slider.Position += first;
+
// Since pieces are re-used, they will not point to the deleted control points while remaining selected
foreach (var piece in Pieces)
piece.IsSelected.Value = false;
diff --git a/osu.Game.Rulesets.Osu/Objects/Slider.cs b/osu.Game.Rulesets.Osu/Objects/Slider.cs
index 134576316a..34e5a7f3cd 100644
--- a/osu.Game.Rulesets.Osu/Objects/Slider.cs
+++ b/osu.Game.Rulesets.Osu/Objects/Slider.cs
@@ -113,8 +113,6 @@ namespace osu.Game.Rulesets.Osu.Objects
{
SamplesBindable.ItemsAdded += _ => updateNestedSamples();
SamplesBindable.ItemsRemoved += _ => updateNestedSamples();
-
- Path.OffsetChanged += offset => Position += offset;
Path.Version.ValueChanged += _ => updateNestedPositions();
}
diff --git a/osu.Game/Rulesets/Objects/SliderPath.cs b/osu.Game/Rulesets/Objects/SliderPath.cs
index e323054234..d868ee27f0 100644
--- a/osu.Game/Rulesets/Objects/SliderPath.cs
+++ b/osu.Game/Rulesets/Objects/SliderPath.cs
@@ -16,12 +16,6 @@ namespace osu.Game.Rulesets.Objects
{
public class SliderPath
{
- ///
- /// Invoked when the offset of the path changes.
- /// The provided value indicates the offset, and should be used to re-calculate the position of the containing drawable.
- ///
- public event Action OffsetChanged;
-
///
/// The current version of this . Updated when any change to the path occurs.
///
@@ -66,20 +60,6 @@ namespace osu.Game.Rulesets.Objects
foreach (var c in items)
c.Changed -= invalidate;
- // Make all control points relative to the first one
- if (ControlPoints.Count > 0)
- {
- Vector2 first = ControlPoints[0].Position.Value;
-
- if (first != Vector2.Zero)
- {
- foreach (var c in ControlPoints)
- c.Position.Value -= first;
-
- OffsetChanged?.Invoke(first);
- }
- }
-
invalidate();
};
}