1
0
mirror of https://github.com/ppy/osu.git synced 2024-09-21 19:27:24 +08:00

Merge pull request #26616 from peppy/dont-round-sv

This commit is contained in:
Dean Herbert 2024-01-29 20:42:38 +09:00 committed by GitHub
commit 811b31386b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 24 additions and 4 deletions

View File

@ -21,7 +21,6 @@ namespace osu.Game.Beatmaps.ControlPoints
/// </summary>
public readonly BindableDouble ScrollSpeedBindable = new BindableDouble(1)
{
Precision = 0.01,
MinValue = 0.01,
MaxValue = 10
};

View File

@ -52,17 +52,38 @@ namespace osu.Game.Screens.Edit.Timing
protected override void OnControlPointChanged(ValueChangedEvent<EffectControlPoint?> point)
{
if (point.NewValue != null)
scrollSpeedSlider.Current.ValueChanged -= updateControlPointFromSlider;
if (point.NewValue is EffectControlPoint newEffectPoint)
{
isRebinding = true;
kiai.Current = point.NewValue.KiaiModeBindable;
scrollSpeedSlider.Current = point.NewValue.ScrollSpeedBindable;
kiai.Current = newEffectPoint.KiaiModeBindable;
scrollSpeedSlider.Current = new BindableDouble
{
MinValue = 0.01,
MaxValue = 10,
Precision = 0.01,
Value = newEffectPoint.ScrollSpeedBindable.Value
};
scrollSpeedSlider.Current.ValueChanged += updateControlPointFromSlider;
// at this point in time the above is enough to keep the slider control in sync with reality,
// since undo/redo causes `OnControlPointChanged()` to fire.
// whenever that stops being the case, or there is a possibility that the scroll speed could be changed
// by something else other than this control, this code should probably be revisited to have a binding in the other direction, too.
isRebinding = false;
}
}
private void updateControlPointFromSlider(ValueChangedEvent<double> scrollSpeed)
{
if (ControlPoint.Value is not EffectControlPoint effectPoint || isRebinding)
return;
effectPoint.ScrollSpeedBindable.Value = scrollSpeed.NewValue;
}
protected override EffectControlPoint CreatePoint()
{
var reference = Beatmap.ControlPointInfo.EffectPointAt(SelectedGroup.Value.Time);