mirror of
https://github.com/ppy/osu.git
synced 2024-12-14 10:52:53 +08:00
Adjust leaderboard score panels sizing based on accuracy/combo width
This commit is contained in:
parent
4dbac917fc
commit
42aac16b37
@ -66,7 +66,8 @@ namespace osu.Game.Tests.Visual.Gameplay
|
||||
{
|
||||
AddSliderStep("score", 0, 1000000, 500000, v => scoreProcessor.TotalScore.Value = v);
|
||||
AddSliderStep("accuracy", 0f, 1f, 0.5f, v => scoreProcessor.Accuracy.Value = v);
|
||||
AddSliderStep("combo", 0, 1000, 0, v => scoreProcessor.HighestCombo.Value = v);
|
||||
AddSliderStep("combo", 0, 10000, 0, v => scoreProcessor.HighestCombo.Value = v);
|
||||
AddStep("toggle expanded", () => leaderboard.Expanded.Value = !leaderboard.Expanded.Value);
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
@ -3,6 +3,7 @@
|
||||
|
||||
#nullable disable
|
||||
|
||||
using System;
|
||||
using JetBrains.Annotations;
|
||||
using osu.Framework.Allocation;
|
||||
using osu.Framework.Bindables;
|
||||
@ -39,8 +40,6 @@ namespace osu.Game.Screens.Play.HUD
|
||||
|
||||
private const float rank_text_width = 35f;
|
||||
|
||||
private const float score_components_width = 85f;
|
||||
|
||||
private const float avatar_size = 25f;
|
||||
|
||||
private const double panel_transition_duration = 500;
|
||||
@ -161,7 +160,7 @@ namespace osu.Game.Screens.Play.HUD
|
||||
{
|
||||
new Dimension(GridSizeMode.Absolute, rank_text_width),
|
||||
new Dimension(),
|
||||
new Dimension(GridSizeMode.AutoSize, maxSize: score_components_width),
|
||||
new Dimension(GridSizeMode.AutoSize),
|
||||
},
|
||||
Content = new[]
|
||||
{
|
||||
@ -286,8 +285,19 @@ namespace osu.Game.Screens.Play.HUD
|
||||
LoadComponentAsync(new DrawableAvatar(User), avatarContainer.Add);
|
||||
|
||||
TotalScore.BindValueChanged(v => scoreText.Text = v.NewValue.ToString("N0"), true);
|
||||
Accuracy.BindValueChanged(v => accuracyText.Text = v.NewValue.FormatAccuracy(), true);
|
||||
Combo.BindValueChanged(v => comboText.Text = $"{v.NewValue}x", true);
|
||||
|
||||
Accuracy.BindValueChanged(v =>
|
||||
{
|
||||
accuracyText.Text = v.NewValue.FormatAccuracy();
|
||||
updateDetailsWidth();
|
||||
}, true);
|
||||
|
||||
Combo.BindValueChanged(v =>
|
||||
{
|
||||
comboText.Text = $"{v.NewValue}x";
|
||||
updateDetailsWidth();
|
||||
}, true);
|
||||
|
||||
HasQuit.BindValueChanged(_ => updateState());
|
||||
}
|
||||
|
||||
@ -303,13 +313,10 @@ namespace osu.Game.Screens.Play.HUD
|
||||
|
||||
private void changeExpandedState(ValueChangedEvent<bool> expanded)
|
||||
{
|
||||
scoreComponents.ClearTransforms();
|
||||
|
||||
if (expanded.NewValue)
|
||||
{
|
||||
gridContainer.ResizeWidthTo(regular_width, panel_transition_duration, Easing.OutQuint);
|
||||
|
||||
scoreComponents.ResizeWidthTo(score_components_width, panel_transition_duration, Easing.OutQuint);
|
||||
scoreComponents.FadeIn(panel_transition_duration, Easing.OutQuint);
|
||||
|
||||
usernameText.FadeIn(panel_transition_duration, Easing.OutQuint);
|
||||
@ -318,13 +325,32 @@ namespace osu.Game.Screens.Play.HUD
|
||||
{
|
||||
gridContainer.ResizeWidthTo(compact_width, panel_transition_duration, Easing.OutQuint);
|
||||
|
||||
scoreComponents.ResizeWidthTo(0, panel_transition_duration, Easing.OutQuint);
|
||||
scoreComponents.FadeOut(text_transition_duration, Easing.OutQuint);
|
||||
|
||||
usernameText.FadeOut(text_transition_duration, Easing.OutQuint);
|
||||
}
|
||||
|
||||
updateDetailsWidth();
|
||||
}
|
||||
|
||||
private float? scoreComponentsTargetWidth;
|
||||
|
||||
// Schedule required to get correct DrawWidth from text after updates.
|
||||
private void updateDetailsWidth() => SchedulerAfterChildren.AddOnce(() =>
|
||||
{
|
||||
const float score_components_min_width = 88f;
|
||||
|
||||
float newWidth = Expanded.Value
|
||||
? Math.Max(score_components_min_width, comboText.DrawWidth + accuracyText.DrawWidth + 25)
|
||||
: 0;
|
||||
|
||||
if (scoreComponentsTargetWidth == newWidth)
|
||||
return;
|
||||
|
||||
scoreComponentsTargetWidth = newWidth;
|
||||
scoreComponents.ResizeWidthTo(newWidth, panel_transition_duration, Easing.OutQuint);
|
||||
});
|
||||
|
||||
private void updateState()
|
||||
{
|
||||
bool widthExtension = false;
|
||||
|
Loading…
Reference in New Issue
Block a user