// 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.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Game.Beatmaps; using osu.Game.Overlays.BeatmapSet.Buttons; using osu.Game.Screens.Select.Details; using osuTK; namespace osu.Game.Overlays.BeatmapSet { public class Details : FillFlowContainer { protected readonly UserRatings Ratings; private readonly PreviewButton preview; private readonly BasicStats basic; private readonly AdvancedStats advanced; private readonly DetailBox ratingBox; private BeatmapSetInfo beatmapSet; public BeatmapSetInfo BeatmapSet { get => beatmapSet; set { if (value == beatmapSet) return; beatmapSet = value; basic.BeatmapSet = preview.BeatmapSet = BeatmapSet; updateDisplay(); } } private BeatmapInfo beatmap; public BeatmapInfo Beatmap { get => beatmap; set { if (value == beatmap) return; basic.Beatmap = advanced.Beatmap = beatmap = value; } } private void updateDisplay() { Ratings.Metrics = BeatmapSet?.Metrics; ratingBox.Alpha = BeatmapSet?.OnlineInfo?.Status > 0 ? 1 : 0; } public Details() { Width = BeatmapSetOverlay.RIGHT_WIDTH; AutoSizeAxes = Axes.Y; Spacing = new Vector2(1f); Children = new Drawable[] { preview = new PreviewButton { RelativeSizeAxes = Axes.X, }, new DetailBox { Child = basic = new BasicStats { RelativeSizeAxes = Axes.X, AutoSizeAxes = Axes.Y, Margin = new MarginPadding { Vertical = 10 }, }, }, new DetailBox { Child = advanced = new AdvancedStats { RelativeSizeAxes = Axes.X, AutoSizeAxes = Axes.Y, Margin = new MarginPadding { Vertical = 7.5f }, }, }, ratingBox = new DetailBox { Child = Ratings = new UserRatings { RelativeSizeAxes = Axes.X, Height = 95, Margin = new MarginPadding { Top = 10 }, }, }, }; } [BackgroundDependencyLoader] private void load() { updateDisplay(); } private class DetailBox : Container { private readonly Container content; private readonly Box background; protected override Container Content => content; public DetailBox() { RelativeSizeAxes = Axes.X; AutoSizeAxes = Axes.Y; InternalChildren = new Drawable[] { background = new Box { RelativeSizeAxes = Axes.Both, Alpha = 0.5f }, content = new Container { RelativeSizeAxes = Axes.X, AutoSizeAxes = Axes.Y, Padding = new MarginPadding { Horizontal = 15 }, }, }; } [BackgroundDependencyLoader] private void load(OverlayColourProvider colourProvider) { background.Colour = colourProvider.Background6; } } } }