// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Sprites; using osu.Game.Graphics; using osu.Game.Graphics.Containers; using osu.Game.Online.API.Requests.Responses; using System; using System.Linq; using osu.Game.Graphics.Sprites; using osu.Framework.Allocation; namespace osu.Game.Overlays.Changelog { public class ChangelogBuild : FillFlowContainer { public const float HORIZONTAL_PADDING = 70; public Action SelectBuild; protected readonly APIChangelogBuild Build; public readonly FillFlowContainer ChangelogEntries; public ChangelogBuild(APIChangelogBuild build) { Build = build; RelativeSizeAxes = Axes.X; AutoSizeAxes = Axes.Y; Direction = FillDirection.Vertical; Padding = new MarginPadding { Horizontal = HORIZONTAL_PADDING }; Children = new Drawable[] { CreateHeader(), ChangelogEntries = new FillFlowContainer { RelativeSizeAxes = Axes.X, AutoSizeAxes = Axes.Y, Direction = FillDirection.Vertical, }, }; } [BackgroundDependencyLoader] private void load() { foreach (var categoryEntries in Build.ChangelogEntries.GroupBy(b => b.Category).OrderBy(c => c.Key)) { ChangelogEntries.Add(new OsuSpriteText { Text = categoryEntries.Key, Font = OsuFont.GetFont(weight: FontWeight.Bold, size: 18), Margin = new MarginPadding { Top = 35, Bottom = 15 }, }); ChangelogEntries.AddRange(categoryEntries.Select(entry => new ChangelogEntry(entry))); } } protected virtual FillFlowContainer CreateHeader() => new FillFlowContainer { Anchor = Anchor.TopCentre, Origin = Anchor.TopCentre, AutoSizeAxes = Axes.Both, Direction = FillDirection.Horizontal, Margin = new MarginPadding { Top = 20 }, Children = new Drawable[] { new OsuHoverContainer { Anchor = Anchor.Centre, Origin = Anchor.Centre, AutoSizeAxes = Axes.Both, Action = () => SelectBuild?.Invoke(Build), Child = new FillFlowContainer { AutoSizeAxes = Axes.Both, Margin = new MarginPadding { Horizontal = 40 }, Children = new[] { new OsuSpriteText { Text = Build.UpdateStream.DisplayName, Font = OsuFont.GetFont(weight: FontWeight.Medium, size: 19), }, new OsuSpriteText { Text = " ", Font = OsuFont.GetFont(weight: FontWeight.Medium, size: 19), }, new OsuSpriteText { Text = Build.DisplayVersion, Font = OsuFont.GetFont(weight: FontWeight.Light, size: 19), Colour = Build.UpdateStream.Colour, }, } } }, } }; } }