Change snapping to be screen space coordinate based

This commit is contained in:
Dean Herbert
2020-05-20 17:48:43 +09:00
parent b6c9a50f7a
commit 3354d48a38
16 changed files with 65 additions and 41 deletions

View File

@ -17,9 +17,9 @@ using osuTK;
namespace osu.Game.Screens.Edit.Compose.Components.Timeline
{
[Cached(typeof(IDistanceSnapProvider))]
[Cached(typeof(IPositionSnapProvider))]
[Cached]
public class Timeline : ZoomableScrollContainer, IDistanceSnapProvider
public class Timeline : ZoomableScrollContainer, IPositionSnapProvider
{
public readonly Bindable<bool> WaveformVisible = new Bindable<bool>();
public readonly IBindable<WorkingBeatmap> Beatmap = new Bindable<WorkingBeatmap>();
@ -181,12 +181,12 @@ namespace osu.Game.Screens.Edit.Compose.Components.Timeline
[Resolved]
private IBeatSnapProvider beatSnapProvider { get; set; }
public double GetTimeFromScreenSpacePosition(Vector2 position)
=> getTimeFromPosition(Content.ToLocalSpace(position));
public (Vector2 position, double time) GetSnappedPosition(Vector2 position, double time) =>
public (Vector2 position, double time) SnapPositionToValidTime(Vector2 position) =>
(position, beatSnapProvider.SnapTime(getTimeFromPosition(position)));
public (Vector2 position, double time) SnapScreenSpacePositionToValidTime(Vector2 position) =>
(position, beatSnapProvider.SnapTime(getTimeFromPosition(Content.ToLocalSpace(position))));
private double getTimeFromPosition(Vector2 localPosition) =>
(localPosition.X / Content.DrawWidth) * track.Length;