diff --git a/osu.Game.Rulesets.Mania/Edit/Blueprints/ManiaPlacementBlueprint.cs b/osu.Game.Rulesets.Mania/Edit/Blueprints/ManiaPlacementBlueprint.cs
index 3fb03d642f..5fe53557b3 100644
--- a/osu.Game.Rulesets.Mania/Edit/Blueprints/ManiaPlacementBlueprint.cs
+++ b/osu.Game.Rulesets.Mania/Edit/Blueprints/ManiaPlacementBlueprint.cs
@@ -24,10 +24,15 @@ namespace osu.Game.Rulesets.Mania.Edit.Blueprints
protected Column Column;
///
- /// The current mouse position, snapped to the closest column.
+ /// The current beat-snapped mouse position, snapped to the closest column.
///
protected Vector2 SnappedMousePosition { get; private set; }
+ ///
+ /// The gameplay time at the current beat-snapped mouse position ().
+ ///
+ protected double SnappedTime { get; private set; }
+
///
/// The width of the closest column to the current mouse position.
///
@@ -39,6 +44,9 @@ namespace osu.Game.Rulesets.Mania.Edit.Blueprints
[Resolved]
private IScrollingInfo scrollingInfo { get; set; }
+ [Resolved]
+ private IDistanceSnapProvider snapProvider { get; set; }
+
protected ManiaPlacementBlueprint(T hitObject)
: base(hitObject)
{
@@ -54,7 +62,7 @@ namespace osu.Game.Rulesets.Mania.Edit.Blueprints
return base.OnMouseDown(e);
HitObject.Column = Column.Index;
- BeginPlacement(TimeAt(e.ScreenSpaceMousePosition), true);
+ BeginPlacement(SnappedTime, true);
return true;
}
@@ -70,6 +78,10 @@ namespace osu.Game.Rulesets.Mania.Edit.Blueprints
// Snap to the column
var parentPos = Parent.ToLocalSpace(Column.ToScreenSpace(new Vector2(Column.DrawWidth / 2, 0)));
SnappedMousePosition = new Vector2(parentPos.X, Parent.ToLocalSpace(screenSpacePosition).Y);
+
+ SnappedTime = TimeAt(screenSpacePosition);
+ if (snapProvider != null)
+ (SnappedMousePosition, SnappedTime) = snapProvider.GetSnappedPosition(SnappedMousePosition, SnappedTime);
}
protected double TimeAt(Vector2 screenSpacePosition)