mirror of
https://github.com/ppy/osu.git
synced 2025-02-20 05:25:36 +08:00
Fix clamping logic to always clamp to the last displayed tick
This commit is contained in:
parent
684fef7f8c
commit
37cbc79283
@ -70,7 +70,7 @@ namespace osu.Game.Screens.Edit.Compose.Components
|
||||
|
||||
// This grid implementation factors in the user's distance spacing specification,
|
||||
// which is usually not considered by an `IDistanceSnapProvider`.
|
||||
float distanceSpacing = (float)DistanceSpacingMultiplier.Value;
|
||||
float distanceSpacingMultiplier = (float)DistanceSpacingMultiplier.Value;
|
||||
|
||||
Vector2 travelVector = (position - StartPosition);
|
||||
|
||||
@ -84,17 +84,19 @@ namespace osu.Game.Screens.Edit.Compose.Components
|
||||
|
||||
// When interacting with the resolved snap provider, the distance spacing multiplier should first be removed
|
||||
// to allow for snapping at a non-multiplied ratio.
|
||||
float snappedDistance = SnapProvider.FindSnappedDistance(ReferenceObject, travelLength / distanceSpacing);
|
||||
float snappedDistance = SnapProvider.FindSnappedDistance(ReferenceObject, travelLength / distanceSpacingMultiplier);
|
||||
double snappedTime = StartTime + SnapProvider.DistanceToDuration(ReferenceObject, snappedDistance);
|
||||
|
||||
if (snappedTime > LatestEndTime)
|
||||
{
|
||||
snappedDistance = SnapProvider.DurationToDistance(ReferenceObject, LatestEndTime.Value - ReferenceObject.GetEndTime());
|
||||
double tickLength = Beatmap.GetBeatLengthAtTime(StartTime);
|
||||
|
||||
snappedDistance = SnapProvider.DurationToDistance(ReferenceObject, MaxIntervals * tickLength);
|
||||
snappedTime = StartTime + SnapProvider.DistanceToDuration(ReferenceObject, snappedDistance);
|
||||
}
|
||||
|
||||
// The multiplier can then be reapplied to the final position.
|
||||
Vector2 snappedPosition = StartPosition + travelVector.Normalized() * snappedDistance * distanceSpacing;
|
||||
Vector2 snappedPosition = StartPosition + travelVector.Normalized() * snappedDistance * distanceSpacingMultiplier;
|
||||
|
||||
return (snappedPosition, snappedTime);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user