1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-29 05:52:56 +08:00

Fix being able to place zero-length spinners

Also always snap a spinner's end time using beat snap (matches stable).
This commit is contained in:
Dean Herbert 2022-12-02 17:56:34 +09:00
parent ba99f1288c
commit 45ea183cc3

View File

@ -4,6 +4,7 @@
#nullable disable #nullable disable
using System; using System;
using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Input.Events; using osu.Framework.Input.Events;
using osu.Game.Rulesets.Edit; using osu.Game.Rulesets.Edit;
@ -22,6 +23,9 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Spinners
private bool isPlacingEnd; private bool isPlacingEnd;
[Resolved]
private IBeatSnapProvider beatSnapProvider { get; set; }
public SpinnerPlacementBlueprint() public SpinnerPlacementBlueprint()
: base(new Spinner { Position = OsuPlayfield.BASE_SIZE / 2 }) : base(new Spinner { Position = OsuPlayfield.BASE_SIZE / 2 })
{ {
@ -33,7 +37,7 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Spinners
base.Update(); base.Update();
if (isPlacingEnd) if (isPlacingEnd)
HitObject.EndTime = Math.Max(HitObject.StartTime, EditorClock.CurrentTime); updateEndTimeFromCurrent();
piece.UpdateFrom(HitObject); piece.UpdateFrom(HitObject);
} }
@ -45,7 +49,7 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Spinners
if (e.Button != MouseButton.Right) if (e.Button != MouseButton.Right)
return false; return false;
HitObject.EndTime = EditorClock.CurrentTime; updateEndTimeFromCurrent();
EndPlacement(true); EndPlacement(true);
} }
else else
@ -61,5 +65,8 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Spinners
return true; return true;
} }
private void updateEndTimeFromCurrent() =>
HitObject.EndTime = Math.Max(HitObject.StartTime + beatSnapProvider.GetBeatLengthAtTime(HitObject.StartTime), beatSnapProvider.SnapTime(EditorClock.CurrentTime));
} }
} }