mirror of
https://github.com/ppy/osu.git
synced 2024-12-14 17:32:54 +08:00
Implement slider head control point snapping
This commit is contained in:
parent
eaf2123142
commit
b1da81571f
@ -10,6 +10,7 @@ using osu.Framework.Graphics.Lines;
|
|||||||
using osu.Framework.Graphics.Shapes;
|
using osu.Framework.Graphics.Shapes;
|
||||||
using osu.Framework.Input.Events;
|
using osu.Framework.Input.Events;
|
||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
|
using osu.Game.Rulesets.Edit;
|
||||||
using osu.Game.Rulesets.Osu.Objects;
|
using osu.Game.Rulesets.Osu.Objects;
|
||||||
using osuTK;
|
using osuTK;
|
||||||
using osuTK.Graphics;
|
using osuTK.Graphics;
|
||||||
@ -29,6 +30,9 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders.Components
|
|||||||
private readonly Container marker;
|
private readonly Container marker;
|
||||||
private readonly Drawable markerRing;
|
private readonly Drawable markerRing;
|
||||||
|
|
||||||
|
[Resolved(CanBeNull = true)]
|
||||||
|
private IDistanceSnapProvider snapProvider { get; set; }
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
private OsuColour colours { get; set; }
|
private OsuColour colours { get; set; }
|
||||||
|
|
||||||
@ -146,12 +150,16 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders.Components
|
|||||||
|
|
||||||
if (Index == 0)
|
if (Index == 0)
|
||||||
{
|
{
|
||||||
// Special handling for the head - only the position of the slider changes
|
// Special handling for the head control point - the position of the slider changes which means the snapped position and time have to be taken into account
|
||||||
slider.Position += e.Delta;
|
(Vector2 snappedPosition, double snappedTime) = snapProvider?.GetSnappedPosition(e.MousePosition, slider.StartTime) ?? (e.MousePosition, slider.StartTime);
|
||||||
|
Vector2 movementDelta = snappedPosition - slider.Position;
|
||||||
|
|
||||||
|
slider.Position += movementDelta;
|
||||||
|
slider.StartTime = snappedTime;
|
||||||
|
|
||||||
// Since control points are relative to the position of the slider, they all need to be offset backwards by the delta
|
// Since control points are relative to the position of the slider, they all need to be offset backwards by the delta
|
||||||
for (int i = 1; i < newControlPoints.Length; i++)
|
for (int i = 1; i < newControlPoints.Length; i++)
|
||||||
newControlPoints[i] -= e.Delta;
|
newControlPoints[i] -= movementDelta;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
newControlPoints[Index] += e.Delta;
|
newControlPoints[Index] += e.Delta;
|
||||||
|
Loading…
Reference in New Issue
Block a user