mirror of
https://github.com/ppy/osu.git
synced 2026-05-19 12:00:05 +08:00
e05b6f44b9
(partially) Closes: #36233 Surpasses: #36244 This PR meant to be one of the last steps that finally make editor use the new forms. Initially it meant to only change one SliderWithTextBoxInput in "Effects section" in timing screen, however soon after it was obvious that there's many other places that still using it. This currently won't affect IndeterminateSliderWithTextBoxInput that is being used in hitsounds, for example, since I think it needs more consideration. Anyways, with this PR, SliderWithTextBoxInput, will no longer be used at all, as it's going to be replaced with modern FormSliderBar Comparison: |master|this PR| |:---:|:---:| |<img width="510" height="316" alt="532203751-eb965923-d3a8-441d-a7c8-5c364a6328ad" src="https://github.com/user-attachments/assets/268b45b8-e235-494f-91a5-d00db057dba8" />|<img width="540" height="321" alt="535466527-3a700a8b-bc3c-4610-998f-a4e55ee03eed" src="https://github.com/user-attachments/assets/20cd4b58-b0bd-49bc-8c48-7de5cf8556b3" />| |<img width="694" height="639" alt="534509844-f00e4da4-53c4-45e8-80ea-1be62da6c83b" src="https://github.com/user-attachments/assets/398c4484-a867-4df1-9de3-0940aa748a01" />|<img width="720" height="433" alt="изображение" src="https://github.com/user-attachments/assets/b6359443-a224-4a55-b171-07e8f013cf46" />| |<img width="715" height="353" alt="534509421-a6ac950f-16e8-4a16-bca6-1a781f82135f" src="https://github.com/user-attachments/assets/4854312b-772f-4b81-a800-89e58d4c715d" />|<img width="710" height="296" alt="изображение" src="https://github.com/user-attachments/assets/a7fed53e-e006-4285-92c9-bb84cb603f60" />| |<img width="717" height="374" alt="534509478-80222623-7766-481d-8682-088276d415ee" src="https://github.com/user-attachments/assets/8143b6dc-4599-45d5-bd3b-f059caf3d93d" />|<img width="718" height="328" alt="изображение" src="https://github.com/user-attachments/assets/bffa04de-983c-45ae-a1ec-373701ea0e49" />| |<img width="702" height="446" alt="534509935-58954060-7ac1-4392-8754-a58f909e86aa" src="https://github.com/user-attachments/assets/2bb67a2d-3f57-42a1-96ce-b30b4891e1a4" />|<img width="722" height="386" alt="изображение" src="https://github.com/user-attachments/assets/01b7fff4-7f31-4aac-90c9-353b15f4964e" />|
99 lines
3.5 KiB
C#
99 lines
3.5 KiB
C#
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
|
// See the LICENCE file in the repository root for full licence text.
|
|
|
|
using osu.Framework.Allocation;
|
|
using osu.Framework.Bindables;
|
|
using osu.Framework.Graphics;
|
|
using osu.Game.Beatmaps.ControlPoints;
|
|
using osu.Game.Graphics.UserInterfaceV2;
|
|
|
|
namespace osu.Game.Screens.Edit.Timing
|
|
{
|
|
internal partial class EffectSection : Section<EffectControlPoint>
|
|
{
|
|
private FormCheckBox kiai = null!;
|
|
|
|
private FormSliderBar<double> scrollSpeedSlider { get; set; } = null!;
|
|
|
|
[BackgroundDependencyLoader]
|
|
private void load()
|
|
{
|
|
Flow.AddRange(new Drawable[]
|
|
{
|
|
kiai = new FormCheckBox { Caption = "Kiai Time" },
|
|
scrollSpeedSlider = new FormSliderBar<double>
|
|
{
|
|
Caption = "Scroll Speed",
|
|
Current = new EffectControlPoint().ScrollSpeedBindable,
|
|
KeyboardStep = 0.1f,
|
|
TransferValueOnCommit = true,
|
|
TabbableContentContainer = this
|
|
},
|
|
});
|
|
}
|
|
|
|
protected override void LoadComplete()
|
|
{
|
|
base.LoadComplete();
|
|
|
|
kiai.Current.BindValueChanged(_ => saveChanges());
|
|
scrollSpeedSlider.Current.BindValueChanged(_ => saveChanges());
|
|
|
|
if (!Beatmap.BeatmapInfo.Ruleset.CreateInstance().EditorShowScrollSpeed)
|
|
scrollSpeedSlider.Hide();
|
|
|
|
void saveChanges()
|
|
{
|
|
if (!isRebinding) ChangeHandler?.SaveState();
|
|
}
|
|
}
|
|
|
|
private bool isRebinding;
|
|
|
|
protected override void OnControlPointChanged(ValueChangedEvent<EffectControlPoint?> point)
|
|
{
|
|
scrollSpeedSlider.Current.ValueChanged -= updateControlPointFromSlider;
|
|
|
|
if (point.NewValue is EffectControlPoint newEffectPoint)
|
|
{
|
|
isRebinding = true;
|
|
|
|
kiai.Current = newEffectPoint.KiaiModeBindable;
|
|
scrollSpeedSlider.Current = new BindableDouble(1)
|
|
{
|
|
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);
|
|
|
|
return new EffectControlPoint
|
|
{
|
|
KiaiMode = reference.KiaiMode,
|
|
ScrollSpeed = reference.ScrollSpeed,
|
|
};
|
|
}
|
|
}
|
|
}
|