mirror of
https://github.com/ppy/osu.git
synced 2025-02-15 17:23:52 +08:00
Add bar chart to tooltip
This commit is contained in:
parent
b81fc675e8
commit
c49cd60487
@ -2,22 +2,27 @@
|
|||||||
// See the LICENCE file in the repository root for full licence text.
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
using System;
|
using System;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
|
using System.Linq;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
|
using osu.Framework.Extensions.Color4Extensions;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Graphics.Cursor;
|
using osu.Framework.Graphics.Cursor;
|
||||||
using osu.Framework.Graphics.Shapes;
|
using osu.Framework.Graphics.Shapes;
|
||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
using osu.Game.Graphics.Sprites;
|
using osu.Game.Graphics.Sprites;
|
||||||
|
using osu.Game.Graphics.UserInterface;
|
||||||
using osu.Game.Rulesets.Difficulty;
|
using osu.Game.Rulesets.Difficulty;
|
||||||
using osuTK;
|
using osuTK;
|
||||||
|
using osuTK.Graphics;
|
||||||
|
|
||||||
namespace osu.Game.Screens.Ranking.Expanded.Statistics
|
namespace osu.Game.Screens.Ranking.Expanded.Statistics
|
||||||
{
|
{
|
||||||
public class PerformanceStatisticTooltip : VisibilityContainer, ITooltip<PerformanceAttributes>
|
public class PerformanceStatisticTooltip : VisibilityContainer, ITooltip<PerformanceAttributes>
|
||||||
{
|
{
|
||||||
private readonly Box background;
|
private readonly Box background;
|
||||||
private Colour4 textColor;
|
private Colour4 totalColour;
|
||||||
|
private Colour4 textColour;
|
||||||
|
|
||||||
protected override Container<Drawable> Content { get; }
|
protected override Container<Drawable> Content { get; }
|
||||||
|
|
||||||
@ -46,10 +51,16 @@ namespace osu.Game.Screens.Ranking.Expanded.Statistics
|
|||||||
private void load(OsuColour colours)
|
private void load(OsuColour colours)
|
||||||
{
|
{
|
||||||
background.Colour = colours.Gray3;
|
background.Colour = colours.Gray3;
|
||||||
textColor = colours.BlueLighter;
|
totalColour = colours.Blue;
|
||||||
|
textColour = colours.BlueLighter;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void PopIn()
|
||||||
|
{
|
||||||
|
if (lastAttributes.GetAttributesForDisplay().Count() > 1)
|
||||||
|
this.FadeIn(200, Easing.OutQuint);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void PopIn() => this.FadeIn(200, Easing.OutQuint);
|
|
||||||
protected override void PopOut() => this.FadeOut(200, Easing.OutQuint);
|
protected override void PopOut() => this.FadeOut(200, Easing.OutQuint);
|
||||||
|
|
||||||
private PerformanceAttributes lastAttributes;
|
private PerformanceAttributes lastAttributes;
|
||||||
@ -64,42 +75,71 @@ namespace osu.Game.Screens.Ranking.Expanded.Statistics
|
|||||||
UpdateDisplay(attributes);
|
UpdateDisplay(attributes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Drawable createAttributeItem(PerformanceDisplayAttribute attribute, double attributeSum)
|
||||||
|
{
|
||||||
|
bool isTotal = attribute.PropertyName == nameof(PerformanceAttributes.Total);
|
||||||
|
return new GridContainer
|
||||||
|
{
|
||||||
|
AutoSizeAxes = Axes.Both,
|
||||||
|
ColumnDimensions = new[]
|
||||||
|
{
|
||||||
|
new Dimension(GridSizeMode.Absolute, 110),
|
||||||
|
new Dimension(GridSizeMode.Absolute, 140),
|
||||||
|
new Dimension(GridSizeMode.AutoSize)
|
||||||
|
},
|
||||||
|
RowDimensions = new[]
|
||||||
|
{
|
||||||
|
new Dimension(GridSizeMode.AutoSize)
|
||||||
|
},
|
||||||
|
Content = new[]
|
||||||
|
{
|
||||||
|
new Drawable[]
|
||||||
|
{
|
||||||
|
new OsuSpriteText
|
||||||
|
{
|
||||||
|
Origin = Anchor.CentreLeft,
|
||||||
|
Anchor = Anchor.CentreLeft,
|
||||||
|
Font = OsuFont.GetFont(weight: FontWeight.Regular),
|
||||||
|
Text = attribute.DisplayName,
|
||||||
|
Colour = isTotal ? totalColour : textColour
|
||||||
|
},
|
||||||
|
new Bar
|
||||||
|
{
|
||||||
|
Alpha = isTotal ? 0 : 1,
|
||||||
|
Origin = Anchor.CentreLeft,
|
||||||
|
Anchor = Anchor.CentreLeft,
|
||||||
|
Width = 130,
|
||||||
|
Height = 5,
|
||||||
|
BackgroundColour = Color4.White.Opacity(0.5f),
|
||||||
|
Length = (float)(attribute.Value / attributeSum),
|
||||||
|
Margin = new MarginPadding { Left = 5, Right = 5 }
|
||||||
|
},
|
||||||
|
new OsuSpriteText
|
||||||
|
{
|
||||||
|
Origin = Anchor.CentreLeft,
|
||||||
|
Anchor = Anchor.CentreLeft,
|
||||||
|
Font = OsuFont.GetFont(weight: FontWeight.SemiBold),
|
||||||
|
Text = ((int)Math.Round(attribute.Value, MidpointRounding.AwayFromZero)).ToString(CultureInfo.CurrentCulture),
|
||||||
|
Colour = isTotal ? totalColour : textColour
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
protected virtual void UpdateDisplay(PerformanceAttributes attributes)
|
protected virtual void UpdateDisplay(PerformanceAttributes attributes)
|
||||||
{
|
{
|
||||||
Content.Clear();
|
Content.Clear();
|
||||||
|
|
||||||
foreach (PerformanceDisplayAttribute attr in attributes.GetAttributesForDisplay())
|
var displayAttributes = attributes.GetAttributesForDisplay();
|
||||||
|
|
||||||
|
double attributeSum = displayAttributes
|
||||||
|
.Where(attr => attr.PropertyName != nameof(PerformanceAttributes.Total))
|
||||||
|
.Sum(attr => attr.Value);
|
||||||
|
|
||||||
|
foreach (PerformanceDisplayAttribute attr in displayAttributes)
|
||||||
{
|
{
|
||||||
Content.Add(new GridContainer
|
Content.Add(createAttributeItem(attr, attributeSum));
|
||||||
{
|
|
||||||
AutoSizeAxes = Axes.Both,
|
|
||||||
ColumnDimensions = new[]
|
|
||||||
{
|
|
||||||
new Dimension(GridSizeMode.Absolute, 140),
|
|
||||||
new Dimension(GridSizeMode.AutoSize)
|
|
||||||
},
|
|
||||||
RowDimensions = new[]
|
|
||||||
{
|
|
||||||
new Dimension(GridSizeMode.AutoSize)
|
|
||||||
},
|
|
||||||
Content = new[]
|
|
||||||
{
|
|
||||||
new Drawable[]
|
|
||||||
{
|
|
||||||
new OsuSpriteText
|
|
||||||
{
|
|
||||||
Font = OsuFont.GetFont(weight: FontWeight.Regular),
|
|
||||||
Text = attr.DisplayName,
|
|
||||||
Colour = textColor
|
|
||||||
},
|
|
||||||
new OsuSpriteText
|
|
||||||
{
|
|
||||||
Font = OsuFont.GetFont(weight: FontWeight.SemiBold),
|
|
||||||
Text = ((int)Math.Round(attr.Value, MidpointRounding.AwayFromZero)).ToString(CultureInfo.CurrentCulture)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user