mirror of
https://github.com/osukey/osukey.git
synced 2025-05-31 10:27:26 +09: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("score", 0, 1000000, 500000, v => scoreProcessor.TotalScore.Value = v);
|
||||||
AddSliderStep("accuracy", 0f, 1f, 0.5f, v => scoreProcessor.Accuracy.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]
|
[Test]
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#nullable disable
|
#nullable disable
|
||||||
|
|
||||||
|
using System;
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
@ -39,8 +40,6 @@ namespace osu.Game.Screens.Play.HUD
|
|||||||
|
|
||||||
private const float rank_text_width = 35f;
|
private const float rank_text_width = 35f;
|
||||||
|
|
||||||
private const float score_components_width = 85f;
|
|
||||||
|
|
||||||
private const float avatar_size = 25f;
|
private const float avatar_size = 25f;
|
||||||
|
|
||||||
private const double panel_transition_duration = 500;
|
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(GridSizeMode.Absolute, rank_text_width),
|
||||||
new Dimension(),
|
new Dimension(),
|
||||||
new Dimension(GridSizeMode.AutoSize, maxSize: score_components_width),
|
new Dimension(GridSizeMode.AutoSize),
|
||||||
},
|
},
|
||||||
Content = new[]
|
Content = new[]
|
||||||
{
|
{
|
||||||
@ -286,8 +285,19 @@ namespace osu.Game.Screens.Play.HUD
|
|||||||
LoadComponentAsync(new DrawableAvatar(User), avatarContainer.Add);
|
LoadComponentAsync(new DrawableAvatar(User), avatarContainer.Add);
|
||||||
|
|
||||||
TotalScore.BindValueChanged(v => scoreText.Text = v.NewValue.ToString("N0"), true);
|
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());
|
HasQuit.BindValueChanged(_ => updateState());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -303,13 +313,10 @@ namespace osu.Game.Screens.Play.HUD
|
|||||||
|
|
||||||
private void changeExpandedState(ValueChangedEvent<bool> expanded)
|
private void changeExpandedState(ValueChangedEvent<bool> expanded)
|
||||||
{
|
{
|
||||||
scoreComponents.ClearTransforms();
|
|
||||||
|
|
||||||
if (expanded.NewValue)
|
if (expanded.NewValue)
|
||||||
{
|
{
|
||||||
gridContainer.ResizeWidthTo(regular_width, panel_transition_duration, Easing.OutQuint);
|
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);
|
scoreComponents.FadeIn(panel_transition_duration, Easing.OutQuint);
|
||||||
|
|
||||||
usernameText.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);
|
gridContainer.ResizeWidthTo(compact_width, panel_transition_duration, Easing.OutQuint);
|
||||||
|
|
||||||
scoreComponents.ResizeWidthTo(0, panel_transition_duration, Easing.OutQuint);
|
|
||||||
scoreComponents.FadeOut(text_transition_duration, Easing.OutQuint);
|
scoreComponents.FadeOut(text_transition_duration, Easing.OutQuint);
|
||||||
|
|
||||||
usernameText.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()
|
private void updateState()
|
||||||
{
|
{
|
||||||
bool widthExtension = false;
|
bool widthExtension = false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user