From d76dce76ec5a7d7329ec7f98d73464fd8f708952 Mon Sep 17 00:00:00 2001 From: OliBomby Date: Mon, 29 Sep 2025 14:44:12 +0200 Subject: [PATCH] dont snap inherited bspline type control points to nearby objects --- .../Sliders/Components/PathControlPointVisualiser.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 99002c2ef4..bff6701826 100644 --- a/osu.Game.Rulesets.Osu/Edit/Blueprints/Sliders/Components/PathControlPointVisualiser.cs +++ b/osu.Game.Rulesets.Osu/Edit/Blueprints/Sliders/Components/PathControlPointVisualiser.cs @@ -471,7 +471,13 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders.Components { Vector2 newControlPointPosition = Parent!.ToScreenSpace(e.MousePosition); - var result = positionSnapProvider?.TrySnapToNearbyObjects(newControlPointPosition, oldStartTime); + // Snapping inherited B-spline control points to nearby objects would be unintuitive, because snapping them does not equate to snapping the interpolated slider path. + bool shouldSnapToNearbyObjects = dragPathTypes[draggedControlPointIndex] is not null || + dragPathTypes[..draggedControlPointIndex].LastOrDefault(t => t is not null)?.Type != SplineType.BSpline; + + SnapResult result = null; + if (shouldSnapToNearbyObjects) + result = positionSnapProvider?.TrySnapToNearbyObjects(newControlPointPosition, oldStartTime); if (positionSnapProvider?.TrySnapToPositionGrid(result?.ScreenSpacePosition ?? newControlPointPosition, result?.Time ?? oldStartTime) is SnapResult gridSnapResult) result = gridSnapResult; result ??= new SnapResult(newControlPointPosition, oldStartTime);