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

Reduce sample point pieces to pink dot if zoomed out

This commit is contained in:
OliBomby 2024-09-19 16:20:26 +02:00
parent e4cfa7c86f
commit 34087a0f1a
2 changed files with 33 additions and 1 deletions

View File

@ -17,6 +17,8 @@ namespace osu.Game.Screens.Edit.Compose.Components.Timeline
{
protected OsuSpriteText Label { get; private set; }
protected Container LabelContainer { get; private set; }
[BackgroundDependencyLoader]
private void load(OsuColour colours)
{
@ -26,7 +28,7 @@ namespace osu.Game.Screens.Edit.Compose.Components.Timeline
InternalChildren = new Drawable[]
{
new Container
LabelContainer = new Container
{
AutoSizeAxes = Axes.X,
Height = 16,

View File

@ -41,6 +41,9 @@ namespace osu.Game.Screens.Edit.Compose.Components.Timeline
[Resolved]
private Editor? editor { get; set; }
[Resolved]
private Timeline? timeline { get; set; }
private Bindable<bool> samplesVisible = null!;
public SamplePointPiece(HitObject hitObject)
@ -59,6 +62,8 @@ namespace osu.Game.Screens.Edit.Compose.Components.Timeline
private void load(OsuConfigManager config)
{
HitObject.DefaultsApplied += _ => updateText();
Label.AllowMultiline = false;
LabelContainer.AutoSizeAxes = Axes.None;
updateText();
if (editor != null)
@ -75,6 +80,30 @@ namespace osu.Game.Screens.Edit.Compose.Components.Timeline
this.FadeTo(samplesVisible.Value ? 1 : 0);
}
private float lastZoom;
private const float zoom_threshold = 40f;
protected override void Update()
{
base.Update();
// Retract visual state if the timeline is zoomed out too far.
if (timeline is null || timeline.Zoom == lastZoom) return;
lastZoom = timeline.Zoom;
if (timeline.Zoom < zoom_threshold)
{
Label.FadeOut(200, Easing.OutQuint);
LabelContainer.ResizeWidthTo(16, 200, Easing.OutQuint);
}
else
{
Label.FadeIn(200, Easing.OutQuint);
LabelContainer.ResizeWidthTo(Label.Width, 200, Easing.OutQuint);
}
}
protected override void Dispose(bool isDisposing)
{
base.Dispose(isDisposing);
@ -100,6 +129,7 @@ namespace osu.Game.Screens.Edit.Compose.Components.Timeline
private void updateText()
{
Label.Text = $"{abbreviateBank(GetBankValue(GetSamples()))} {GetVolumeValue(GetSamples())}";
LabelContainer.ResizeWidthTo(Label.Width, 200, Easing.OutQuint);
}
private static string? abbreviateBank(string? bank)