diff --git a/osu.Game.Tests/Visual/Multiplayer/TestSceneDrawableRoomPlaylist.cs b/osu.Game.Tests/Visual/Multiplayer/TestSceneDrawableRoomPlaylist.cs index 13d98145a1..55aa665ff1 100644 --- a/osu.Game.Tests/Visual/Multiplayer/TestSceneDrawableRoomPlaylist.cs +++ b/osu.Game.Tests/Visual/Multiplayer/TestSceneDrawableRoomPlaylist.cs @@ -17,7 +17,6 @@ using osu.Game.Database; using osu.Game.Graphics.Containers; using osu.Game.Online.API.Requests.Responses; using osu.Game.Online.Rooms; -using osu.Game.Overlays.BeatmapListing.Panels; using osu.Game.Rulesets; using osu.Game.Rulesets.Osu; using osu.Game.Rulesets.Osu.Mods; @@ -236,7 +235,7 @@ namespace osu.Game.Tests.Visual.Multiplayer assertDownloadButtonVisible(false); void assertDownloadButtonVisible(bool visible) => AddUntilStep($"download button {(visible ? "shown" : "hidden")}", - () => playlist.ChildrenOfType().Single().Alpha == (visible ? 1 : 0)); + () => playlist.ChildrenOfType().Single().Alpha == (visible ? 1 : 0)); } [Test] @@ -250,7 +249,7 @@ namespace osu.Game.Tests.Visual.Multiplayer createPlaylist(byOnlineId, byChecksum); - AddAssert("download buttons shown", () => playlist.ChildrenOfType().All(d => d.IsPresent)); + AddAssert("download buttons shown", () => playlist.ChildrenOfType().All(d => d.IsPresent)); } [Test] diff --git a/osu.Game.Tests/Visual/Online/TestSceneDirectDownloadButton.cs b/osu.Game.Tests/Visual/Online/TestSceneBeatmapDownloadButton.cs similarity index 96% rename from osu.Game.Tests/Visual/Online/TestSceneDirectDownloadButton.cs rename to osu.Game.Tests/Visual/Online/TestSceneBeatmapDownloadButton.cs index 22a91fa9a3..21bf8d1c5a 100644 --- a/osu.Game.Tests/Visual/Online/TestSceneDirectDownloadButton.cs +++ b/osu.Game.Tests/Visual/Online/TestSceneBeatmapDownloadButton.cs @@ -6,15 +6,15 @@ using NUnit.Framework; using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Game.Beatmaps; +using osu.Game.Beatmaps.Drawables; using osu.Game.Online; using osu.Game.Online.API.Requests.Responses; -using osu.Game.Overlays.BeatmapListing.Panels; using osu.Game.Tests.Resources; using osuTK; namespace osu.Game.Tests.Visual.Online { - public class TestSceneDirectDownloadButton : OsuTestScene + public class TestSceneBeatmapDownloadButton : OsuTestScene { private TestDownloadButton downloadButton; @@ -137,7 +137,7 @@ namespace osu.Game.Tests.Visual.Online return apiBeatmapSet; } - private class TestDownloadButton : BeatmapPanelDownloadButton + private class TestDownloadButton : BeatmapDownloadButton { public new bool DownloadEnabled => base.DownloadEnabled; diff --git a/osu.Game.Tests/Visual/Online/TestSceneDirectPanel.cs b/osu.Game.Tests/Visual/Online/TestSceneDirectPanel.cs deleted file mode 100644 index 510b9e8483..0000000000 --- a/osu.Game.Tests/Visual/Online/TestSceneDirectPanel.cs +++ /dev/null @@ -1,137 +0,0 @@ -// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. -// See the LICENCE file in the repository root for full licence text. - -using System.Collections.Generic; -using osu.Framework.Allocation; -using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; -using osu.Game.Audio; -using osu.Game.Beatmaps; -using osu.Game.Online.API.Requests.Responses; -using osu.Game.Overlays.BeatmapListing.Panels; -using osu.Game.Rulesets; -using osuTK; -using APIUser = osu.Game.Online.API.Requests.Responses.APIUser; - -namespace osu.Game.Tests.Visual.Online -{ - [Cached(typeof(IPreviewTrackOwner))] - public class TestSceneDirectPanel : OsuTestScene, IPreviewTrackOwner - { - [BackgroundDependencyLoader] - private void load(RulesetStore rulesets) - { - var normal = getBeatmapSet(); - normal.HasVideo = true; - normal.HasStoryboard = true; - - var undownloadable = getUndownloadableBeatmapSet(); - var manyDifficulties = getManyDifficultiesBeatmapSet(); - - var explicitMap = getBeatmapSet(); - explicitMap.HasExplicitContent = true; - - var featuredMap = getBeatmapSet(); - featuredMap.TrackId = 1; - - var explicitFeaturedMap = getBeatmapSet(); - explicitFeaturedMap.HasExplicitContent = true; - explicitFeaturedMap.TrackId = 2; - - Child = new BasicScrollContainer - { - RelativeSizeAxes = Axes.Both, - Child = new FillFlowContainer - { - RelativeSizeAxes = Axes.X, - AutoSizeAxes = Axes.Y, - Direction = FillDirection.Full, - Padding = new MarginPadding(20), - Spacing = new Vector2(5, 20), - Children = new Drawable[] - { - new GridBeatmapPanel(normal), - new GridBeatmapPanel(undownloadable), - new GridBeatmapPanel(manyDifficulties), - new GridBeatmapPanel(explicitMap), - new GridBeatmapPanel(featuredMap), - new GridBeatmapPanel(explicitFeaturedMap), - new ListBeatmapPanel(normal), - new ListBeatmapPanel(undownloadable), - new ListBeatmapPanel(manyDifficulties), - new ListBeatmapPanel(explicitMap), - new ListBeatmapPanel(featuredMap), - new ListBeatmapPanel(explicitFeaturedMap) - }, - }, - }; - - APIBeatmapSet getBeatmapSet() => CreateAPIBeatmapSet(Ruleset.Value); - - APIBeatmapSet getUndownloadableBeatmapSet() => new APIBeatmapSet - { - OnlineID = 123, - Title = "undownloadable beatmap", - Artist = "test", - Source = "more tests", - Author = new APIUser - { - Username = "BanchoBot", - Id = 3, - }, - Availability = new BeatmapSetOnlineAvailability - { - DownloadDisabled = true, - }, - Preview = @"https://b.ppy.sh/preview/12345.mp3", - PlayCount = 123, - FavouriteCount = 456, - BPM = 111, - HasVideo = true, - HasStoryboard = true, - Covers = new BeatmapSetOnlineCovers(), - Beatmaps = new[] - { - new APIBeatmap - { - RulesetID = Ruleset.Value.OnlineID, - DifficultyName = "Test", - StarRating = 6.42, - } - } - }; - - APIBeatmapSet getManyDifficultiesBeatmapSet() - { - var beatmaps = new List(); - - for (int i = 0; i < 100; i++) - { - beatmaps.Add(new APIBeatmap - { - RulesetID = i % 4, - StarRating = 2 + i % 4 * 2, - OverallDifficulty = 3.5f, - }); - } - - return new APIBeatmapSet - { - OnlineID = 1, - Title = "undownloadable beatmap", - Artist = "test", - Source = "more tests", - Author = new APIUser - { - Username = "BanchoBot", - Id = 3, - }, - HasVideo = true, - HasStoryboard = true, - Covers = new BeatmapSetOnlineCovers(), - Beatmaps = beatmaps.ToArray(), - }; - } - } - } -} diff --git a/osu.Game/Overlays/BeatmapListing/Panels/BeatmapPanelDownloadButton.cs b/osu.Game/Beatmaps/Drawables/BeatmapDownloadButton.cs similarity index 95% rename from osu.Game/Overlays/BeatmapListing/Panels/BeatmapPanelDownloadButton.cs rename to osu.Game/Beatmaps/Drawables/BeatmapDownloadButton.cs index 0a66c3ccb7..e2485e7a77 100644 --- a/osu.Game/Overlays/BeatmapListing/Panels/BeatmapPanelDownloadButton.cs +++ b/osu.Game/Beatmaps/Drawables/BeatmapDownloadButton.cs @@ -6,7 +6,6 @@ using osu.Framework.Allocation; using osu.Framework.Bindables; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; -using osu.Game.Beatmaps; using osu.Game.Configuration; using osu.Game.Extensions; using osu.Game.Graphics.Containers; @@ -14,9 +13,9 @@ using osu.Game.Graphics.UserInterface; using osu.Game.Online; using osu.Game.Online.API.Requests.Responses; -namespace osu.Game.Overlays.BeatmapListing.Panels +namespace osu.Game.Beatmaps.Drawables { - public class BeatmapPanelDownloadButton : CompositeDrawable + public class BeatmapDownloadButton : CompositeDrawable { protected bool DownloadEnabled => button.Enabled.Value; @@ -35,7 +34,7 @@ namespace osu.Game.Overlays.BeatmapListing.Panels private readonly IBeatmapSetInfo beatmapSet; - public BeatmapPanelDownloadButton(IBeatmapSetInfo beatmapSet) + public BeatmapDownloadButton(IBeatmapSetInfo beatmapSet) { this.beatmapSet = beatmapSet; diff --git a/osu.Game/Beatmaps/Drawables/Cards/BeatmapCard.cs b/osu.Game/Beatmaps/Drawables/Cards/BeatmapCard.cs index 76b1166626..37c1bacda4 100644 --- a/osu.Game/Beatmaps/Drawables/Cards/BeatmapCard.cs +++ b/osu.Game/Beatmaps/Drawables/Cards/BeatmapCard.cs @@ -23,7 +23,6 @@ using osu.Game.Online.API.Requests.Responses; using osu.Game.Overlays; using osu.Game.Overlays.BeatmapSet; using osuTK; -using osu.Game.Overlays.BeatmapListing.Panels; using osu.Game.Resources.Localisation.Web; using DownloadButton = osu.Game.Beatmaps.Drawables.Cards.Buttons.DownloadButton; diff --git a/osu.Game/Overlays/BeatmapListing/Panels/IconPill.cs b/osu.Game/Beatmaps/Drawables/Cards/IconPill.cs similarity index 96% rename from osu.Game/Overlays/BeatmapListing/Panels/IconPill.cs rename to osu.Game/Beatmaps/Drawables/Cards/IconPill.cs index 1cb6c84f13..c55e9c0a28 100644 --- a/osu.Game/Overlays/BeatmapListing/Panels/IconPill.cs +++ b/osu.Game/Beatmaps/Drawables/Cards/IconPill.cs @@ -8,7 +8,7 @@ using osu.Framework.Graphics.Sprites; using osuTK; using osuTK.Graphics; -namespace osu.Game.Overlays.BeatmapListing.Panels +namespace osu.Game.Beatmaps.Drawables.Cards { public class IconPill : CircularContainer { diff --git a/osu.Game/Overlays/BeatmapListing/Panels/DownloadProgressBar.cs b/osu.Game/Beatmaps/Drawables/DownloadProgressBar.cs similarity index 97% rename from osu.Game/Overlays/BeatmapListing/Panels/DownloadProgressBar.cs rename to osu.Game/Beatmaps/Drawables/DownloadProgressBar.cs index 93eaf775e0..54dcdc55e3 100644 --- a/osu.Game/Overlays/BeatmapListing/Panels/DownloadProgressBar.cs +++ b/osu.Game/Beatmaps/Drawables/DownloadProgressBar.cs @@ -5,13 +5,12 @@ using osu.Framework.Allocation; using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; -using osu.Game.Beatmaps; using osu.Game.Graphics; using osu.Game.Graphics.UserInterface; using osu.Game.Online; using osuTK.Graphics; -namespace osu.Game.Overlays.BeatmapListing.Panels +namespace osu.Game.Beatmaps.Drawables { public class DownloadProgressBar : CompositeDrawable { diff --git a/osu.Game/Overlays/BeatmapListing/Panels/BeatmapPanel.cs b/osu.Game/Overlays/BeatmapListing/Panels/BeatmapPanel.cs deleted file mode 100644 index 34086c214f..0000000000 --- a/osu.Game/Overlays/BeatmapListing/Panels/BeatmapPanel.cs +++ /dev/null @@ -1,216 +0,0 @@ -// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. -// See the LICENCE file in the repository root for full licence text. - -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using osu.Framework.Allocation; -using osu.Framework.Bindables; -using osu.Framework.Extensions.Color4Extensions; -using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; -using osu.Framework.Graphics.Cursor; -using osu.Framework.Graphics.Effects; -using osu.Framework.Graphics.Shapes; -using osu.Framework.Graphics.Sprites; -using osu.Framework.Graphics.UserInterface; -using osu.Framework.Input.Events; -using osu.Game.Audio; -using osu.Game.Beatmaps; -using osu.Game.Beatmaps.Drawables; -using osu.Game.Graphics; -using osu.Game.Graphics.Containers; -using osu.Game.Graphics.Sprites; -using osu.Game.Graphics.UserInterface; -using osu.Game.Online.API.Requests.Responses; -using osuTK; -using osuTK.Graphics; - -namespace osu.Game.Overlays.BeatmapListing.Panels -{ - public abstract class BeatmapPanel : OsuClickableContainer, IHasContextMenu - { - public readonly APIBeatmapSet SetInfo; - - private const double hover_transition_time = 400; - private const int maximum_difficulty_icons = 10; - - private Container content; - - public PreviewTrack Preview => PlayButton.Preview; - public IBindable PreviewPlaying => PlayButton?.Playing; - - protected abstract PlayButton PlayButton { get; } - protected abstract Box PreviewBar { get; } - - protected virtual bool FadePlayButton => true; - - protected override Container Content => content; - - protected Action ViewBeatmap; - - protected BeatmapPanel(APIBeatmapSet setInfo) - : base(HoverSampleSet.Submit) - { - Debug.Assert(setInfo.OnlineID > 0); - - SetInfo = setInfo; - } - - private readonly EdgeEffectParameters edgeEffectNormal = new EdgeEffectParameters - { - Type = EdgeEffectType.Shadow, - Offset = new Vector2(0f, 1f), - Radius = 2f, - Colour = Color4.Black.Opacity(0.25f), - }; - - private readonly EdgeEffectParameters edgeEffectHovered = new EdgeEffectParameters - { - Type = EdgeEffectType.Shadow, - Offset = new Vector2(0f, 5f), - Radius = 10f, - Colour = Color4.Black.Opacity(0.3f), - }; - - [BackgroundDependencyLoader(permitNulls: true)] - private void load(BeatmapManager beatmaps, OsuColour colours, BeatmapSetOverlay beatmapSetOverlay) - { - AddInternal(content = new Container - { - RelativeSizeAxes = Axes.Both, - Masking = true, - EdgeEffect = edgeEffectNormal, - Children = new[] - { - CreateBackground(), - new DownloadProgressBar(SetInfo) - { - Anchor = Anchor.BottomLeft, - Origin = Anchor.BottomLeft, - Depth = -1, - }, - } - }); - - Action = ViewBeatmap = () => - { - Debug.Assert(SetInfo.OnlineID > 0); - beatmapSetOverlay?.FetchAndShowBeatmapSet(SetInfo.OnlineID); - }; - } - - protected override void Update() - { - base.Update(); - - if (PreviewPlaying.Value && Preview != null && Preview.TrackLoaded) - { - PreviewBar.Width = (float)(Preview.CurrentTime / Preview.Length); - } - } - - protected override bool OnHover(HoverEvent e) - { - content.TweenEdgeEffectTo(edgeEffectHovered, hover_transition_time, Easing.OutQuint); - content.MoveToY(-4, hover_transition_time, Easing.OutQuint); - if (FadePlayButton) - PlayButton.FadeIn(120, Easing.InOutQuint); - - return base.OnHover(e); - } - - protected override void OnHoverLost(HoverLostEvent e) - { - content.TweenEdgeEffectTo(edgeEffectNormal, hover_transition_time, Easing.OutQuint); - content.MoveToY(0, hover_transition_time, Easing.OutQuint); - if (FadePlayButton && !PreviewPlaying.Value) - PlayButton.FadeOut(120, Easing.InOutQuint); - - base.OnHoverLost(e); - } - - protected override void LoadComplete() - { - base.LoadComplete(); - this.FadeInFromZero(200, Easing.Out); - - PreviewPlaying.ValueChanged += playing => - { - PlayButton.FadeTo(playing.NewValue || IsHovered || !FadePlayButton ? 1 : 0, 120, Easing.InOutQuint); - PreviewBar.FadeTo(playing.NewValue ? 1 : 0, 120, Easing.InOutQuint); - }; - } - - protected List GetDifficultyIcons(OsuColour colours) - { - var icons = new List(); - - if (SetInfo.Beatmaps.Length > maximum_difficulty_icons) - { - foreach (var ruleset in SetInfo.Beatmaps.Select(b => b.Ruleset).Distinct()) - icons.Add(new GroupedDifficultyIcon(SetInfo.Beatmaps.Where(b => b.RulesetID == ruleset.OnlineID).ToList(), ruleset, this is ListBeatmapPanel ? Color4.White : colours.Gray5)); - } - else - { - foreach (var b in SetInfo.Beatmaps.OrderBy(beatmap => beatmap.RulesetID).ThenBy(beatmap => beatmap.StarRating)) - icons.Add(new DifficultyIcon(b)); - } - - return icons; - } - - protected Drawable CreateBackground() => new UpdateableOnlineBeatmapSetCover - { - RelativeSizeAxes = Axes.Both, - OnlineInfo = SetInfo, - }; - - public class Statistic : FillFlowContainer - { - private readonly SpriteText text; - - private int value; - - public int Value - { - get => value; - set - { - this.value = value; - text.Text = Value.ToString(@"N0"); - } - } - - public Statistic(IconUsage icon, int value = 0) - { - Anchor = Anchor.TopRight; - Origin = Anchor.TopRight; - AutoSizeAxes = Axes.Both; - Direction = FillDirection.Horizontal; - Spacing = new Vector2(5f, 0f); - - Children = new Drawable[] - { - text = new OsuSpriteText { Font = OsuFont.GetFont(weight: FontWeight.SemiBold, italics: true) }, - new SpriteIcon - { - Anchor = Anchor.CentreLeft, - Origin = Anchor.CentreLeft, - Icon = icon, - Shadow = true, - Size = new Vector2(14), - }, - }; - - Value = value; - } - } - - public MenuItem[] ContextMenuItems => new MenuItem[] - { - new OsuMenuItem("View Beatmap", MenuItemType.Highlighted, ViewBeatmap), - }; - } -} diff --git a/osu.Game/Overlays/BeatmapListing/Panels/GridBeatmapPanel.cs b/osu.Game/Overlays/BeatmapListing/Panels/GridBeatmapPanel.cs deleted file mode 100644 index 770e5af7bd..0000000000 --- a/osu.Game/Overlays/BeatmapListing/Panels/GridBeatmapPanel.cs +++ /dev/null @@ -1,269 +0,0 @@ -// 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.Extensions.Color4Extensions; -using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; -using osu.Framework.Graphics.Shapes; -using osu.Framework.Graphics.Sprites; -using osu.Framework.Input.Events; -using osu.Framework.Localisation; -using osu.Game.Beatmaps.Drawables; -using osu.Game.Graphics; -using osu.Game.Graphics.Containers; -using osu.Game.Graphics.Sprites; -using osu.Game.Online.API.Requests.Responses; -using osu.Game.Overlays.BeatmapSet; -using osuTK; -using osuTK.Graphics; - -namespace osu.Game.Overlays.BeatmapListing.Panels -{ - public class GridBeatmapPanel : BeatmapPanel - { - private const float horizontal_padding = 10; - private const float vertical_padding = 5; - - private FillFlowContainer bottomPanel, statusContainer, titleContainer, artistContainer; - private PlayButton playButton; - private Box progressBar; - - protected override PlayButton PlayButton => playButton; - protected override Box PreviewBar => progressBar; - - public GridBeatmapPanel(APIBeatmapSet beatmap) - : base(beatmap) - { - Width = 380; - Height = 140 + vertical_padding; // full height of all the elements plus vertical padding (autosize uses the image) - } - - protected override void LoadComplete() - { - base.LoadComplete(); - bottomPanel.LayoutDuration = 200; - bottomPanel.LayoutEasing = Easing.Out; - bottomPanel.Origin = Anchor.BottomLeft; - } - - [BackgroundDependencyLoader] - private void load(OsuColour colours) - { - Content.CornerRadius = 4; - - AddRange(new Drawable[] - { - new Box - { - RelativeSizeAxes = Axes.Both, - Colour = Color4.Black.Opacity(0.5f), - }, - bottomPanel = new FillFlowContainer - { - Anchor = Anchor.BottomLeft, - Origin = Anchor.TopLeft, - Direction = FillDirection.Vertical, - RelativeSizeAxes = Axes.X, - AutoSizeAxes = Axes.Y, - Spacing = new Vector2(0f, vertical_padding), - Children = new Drawable[] - { - new FillFlowContainer - { - AutoSizeAxes = Axes.Both, - Padding = new MarginPadding { Left = horizontal_padding, Right = horizontal_padding }, - Direction = FillDirection.Vertical, - Children = new Drawable[] - { - titleContainer = new FillFlowContainer - { - AutoSizeAxes = Axes.Both, - Direction = FillDirection.Horizontal, - Children = new Drawable[] - { - new OsuSpriteText - { - Text = new RomanisableString(SetInfo.TitleUnicode, SetInfo.Title), - Font = OsuFont.GetFont(size: 18, weight: FontWeight.Bold, italics: true) - }, - } - }, - artistContainer = new FillFlowContainer - { - AutoSizeAxes = Axes.Both, - Direction = FillDirection.Horizontal, - Children = new Drawable[] - { - new OsuSpriteText - { - Text = new RomanisableString(SetInfo.ArtistUnicode, SetInfo.Artist), - Font = OsuFont.GetFont(weight: FontWeight.Bold, italics: true) - } - } - } - }, - }, - new Container - { - RelativeSizeAxes = Axes.X, - AutoSizeAxes = Axes.Y, - Children = new Drawable[] - { - new Box - { - RelativeSizeAxes = Axes.Both, - }, - progressBar = new Box - { - Origin = Anchor.BottomLeft, - RelativeSizeAxes = Axes.X, - BypassAutoSizeAxes = Axes.Both, - Size = new Vector2(0, 3), - Alpha = 0, - Colour = colours.Yellow, - }, - new FillFlowContainer - { - RelativeSizeAxes = Axes.X, - AutoSizeAxes = Axes.Y, - Direction = FillDirection.Vertical, - Padding = new MarginPadding - { - Top = vertical_padding, - Bottom = vertical_padding, - Left = horizontal_padding, - Right = horizontal_padding, - }, - Children = new Drawable[] - { - new LinkFlowContainer(s => - { - s.Shadow = false; - s.Font = OsuFont.GetFont(size: 14); - }).With(d => - { - d.AutoSizeAxes = Axes.Both; - d.AddText("mapped by ", t => t.Colour = colours.Gray5); - d.AddUserLink(SetInfo.Author); - }), - new Container - { - AutoSizeAxes = Axes.X, - Height = 14, - Children = new[] - { - new OsuSpriteText - { - Text = SetInfo.Source, - Font = OsuFont.GetFont(size: 14), - Shadow = false, - Colour = colours.Gray5, - Alpha = string.IsNullOrEmpty(SetInfo.Source) ? 0f : 1f, - }, - }, - }, - new FillFlowContainer - { - AutoSizeAxes = Axes.X, - Height = 20, - Margin = new MarginPadding { Top = vertical_padding, Bottom = vertical_padding }, - Spacing = new Vector2(3), - Children = GetDifficultyIcons(colours), - }, - }, - }, - new BeatmapPanelDownloadButton(SetInfo) - { - Size = new Vector2(50, 30), - Margin = new MarginPadding(horizontal_padding), - Anchor = Anchor.TopRight, - Origin = Anchor.TopRight, - }, - }, - }, - }, - }, - new FillFlowContainer - { - Anchor = Anchor.TopRight, - Origin = Anchor.TopRight, - AutoSizeAxes = Axes.Both, - Direction = FillDirection.Vertical, - Margin = new MarginPadding { Top = vertical_padding, Right = vertical_padding }, - Children = new[] - { - new Statistic(FontAwesome.Solid.PlayCircle, SetInfo.PlayCount), - new Statistic(FontAwesome.Solid.Heart, SetInfo.FavouriteCount), - }, - }, - statusContainer = new FillFlowContainer - { - AutoSizeAxes = Axes.Both, - Margin = new MarginPadding { Top = 5, Left = 5 }, - Spacing = new Vector2(5), - }, - playButton = new PlayButton(SetInfo) - { - Margin = new MarginPadding { Top = 5, Left = 10 }, - Size = new Vector2(30), - Alpha = 0, - }, - }); - - if (SetInfo.HasExplicitContent) - { - titleContainer.Add(new ExplicitContentBeatmapPill - { - Anchor = Anchor.CentreLeft, - Origin = Anchor.CentreLeft, - Margin = new MarginPadding { Left = 10f, Top = 2f }, - }); - } - - if (SetInfo.TrackId != null) - { - artistContainer.Add(new FeaturedArtistBeatmapPill - { - Anchor = Anchor.CentreLeft, - Origin = Anchor.CentreLeft, - Margin = new MarginPadding { Left = 10f, Top = 2f }, - }); - } - - if (SetInfo.HasVideo) - { - statusContainer.Add(new IconPill(FontAwesome.Solid.Film)); - } - - if (SetInfo.HasStoryboard) - { - statusContainer.Add(new IconPill(FontAwesome.Solid.Image)); - } - - statusContainer.Add(new BeatmapSetOnlineStatusPill - { - AutoSizeAxes = Axes.Both, - TextSize = 12, - TextPadding = new MarginPadding { Horizontal = 10, Vertical = 5 }, - Status = SetInfo.Status, - }); - - PreviewPlaying.ValueChanged += _ => updateStatusContainer(); - } - - protected override bool OnHover(HoverEvent e) - { - updateStatusContainer(); - return base.OnHover(e); - } - - protected override void OnHoverLost(HoverLostEvent e) - { - base.OnHoverLost(e); - updateStatusContainer(); - } - - private void updateStatusContainer() => statusContainer.FadeTo(IsHovered || PreviewPlaying.Value ? 0 : 1, 120, Easing.InOutQuint); - } -} diff --git a/osu.Game/Overlays/BeatmapListing/Panels/ListBeatmapPanel.cs b/osu.Game/Overlays/BeatmapListing/Panels/ListBeatmapPanel.cs deleted file mode 100644 index dcd676724a..0000000000 --- a/osu.Game/Overlays/BeatmapListing/Panels/ListBeatmapPanel.cs +++ /dev/null @@ -1,267 +0,0 @@ -// 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.Extensions.Color4Extensions; -using osu.Framework.Graphics; -using osu.Framework.Graphics.Colour; -using osu.Framework.Graphics.Containers; -using osu.Framework.Graphics.Shapes; -using osu.Framework.Graphics.Sprites; -using osu.Framework.Localisation; -using osu.Game.Beatmaps.Drawables; -using osu.Game.Graphics; -using osu.Game.Graphics.Containers; -using osu.Game.Graphics.Sprites; -using osu.Game.Online.API.Requests.Responses; -using osu.Game.Overlays.BeatmapSet; -using osuTK; -using osuTK.Graphics; - -namespace osu.Game.Overlays.BeatmapListing.Panels -{ - public class ListBeatmapPanel : BeatmapPanel - { - private const float transition_duration = 120; - private const float horizontal_padding = 10; - private const float vertical_padding = 5; - private const float height = 70; - - private FillFlowContainer statusContainer, titleContainer, artistContainer; - protected BeatmapPanelDownloadButton DownloadButton; - private PlayButton playButton; - private Box progressBar; - - protected override bool FadePlayButton => false; - - protected override PlayButton PlayButton => playButton; - protected override Box PreviewBar => progressBar; - - public ListBeatmapPanel(APIBeatmapSet beatmap) - : base(beatmap) - { - RelativeSizeAxes = Axes.X; - Height = height; - } - - [BackgroundDependencyLoader] - private void load(OsuColour colours) - { - Content.CornerRadius = 5; - - AddRange(new Drawable[] - { - new Box - { - RelativeSizeAxes = Axes.Both, - Colour = ColourInfo.GradientHorizontal(Color4.Black.Opacity(0.25f), Color4.Black.Opacity(0.75f)), - }, - new Container - { - RelativeSizeAxes = Axes.Both, - Padding = new MarginPadding { Top = vertical_padding, Bottom = vertical_padding, Left = horizontal_padding, Right = vertical_padding }, - Children = new Drawable[] - { - new FillFlowContainer - { - Origin = Anchor.CentreLeft, - Anchor = Anchor.CentreLeft, - AutoSizeAxes = Axes.Both, - Direction = FillDirection.Horizontal, - LayoutEasing = Easing.OutQuint, - LayoutDuration = transition_duration, - Spacing = new Vector2(10, 0), - Children = new Drawable[] - { - new FillFlowContainer - { - AutoSizeAxes = Axes.Both, - Direction = FillDirection.Vertical, - Children = new Drawable[] - { - new FillFlowContainer - { - AutoSizeAxes = Axes.Both, - Direction = FillDirection.Horizontal, - Children = new Drawable[] - { - playButton = new PlayButton(SetInfo) - { - Origin = Anchor.CentreLeft, - Anchor = Anchor.CentreLeft, - Size = new Vector2(height / 3), - FillMode = FillMode.Fit, - Margin = new MarginPadding { Right = 10 }, - }, - new FillFlowContainer - { - AutoSizeAxes = Axes.Both, - Direction = FillDirection.Vertical, - Children = new Drawable[] - { - titleContainer = new FillFlowContainer - { - AutoSizeAxes = Axes.Both, - Direction = FillDirection.Horizontal, - Children = new[] - { - new OsuSpriteText - { - Text = new RomanisableString(SetInfo.TitleUnicode, SetInfo.Title), - Font = OsuFont.GetFont(size: 18, weight: FontWeight.Bold, italics: true) - }, - } - }, - artistContainer = new FillFlowContainer - { - AutoSizeAxes = Axes.Both, - Direction = FillDirection.Horizontal, - Children = new[] - { - new OsuSpriteText - { - Text = new RomanisableString(SetInfo.ArtistUnicode, SetInfo.Artist), - Font = OsuFont.GetFont(weight: FontWeight.Bold, italics: true) - }, - }, - }, - } - }, - } - }, - new FillFlowContainer - { - AutoSizeAxes = Axes.Both, - Direction = FillDirection.Horizontal, - Children = new Drawable[] - { - statusContainer = new FillFlowContainer - { - AutoSizeAxes = Axes.Both, - Margin = new MarginPadding { Vertical = vertical_padding, Horizontal = 5 }, - Spacing = new Vector2(5), - }, - new FillFlowContainer - { - AutoSizeAxes = Axes.X, - Height = 20, - Margin = new MarginPadding { Top = vertical_padding, Bottom = vertical_padding }, - Spacing = new Vector2(3), - Children = GetDifficultyIcons(colours), - }, - }, - }, - }, - }, - } - }, - new FillFlowContainer - { - Anchor = Anchor.TopRight, - Origin = Anchor.TopRight, - AutoSizeAxes = Axes.Both, - Direction = FillDirection.Horizontal, - Children = new Drawable[] - { - new Container - { - Anchor = Anchor.CentreRight, - Origin = Anchor.CentreRight, - AutoSizeAxes = Axes.Both, - Child = DownloadButton = new BeatmapPanelDownloadButton(SetInfo) - { - Size = new Vector2(height - vertical_padding * 3), - Margin = new MarginPadding { Left = vertical_padding * 2, Right = vertical_padding }, - }, - }, - new FillFlowContainer - { - Anchor = Anchor.TopRight, - Origin = Anchor.TopRight, - AutoSizeAxes = Axes.Both, - Direction = FillDirection.Vertical, - Children = new Drawable[] - { - new Statistic(FontAwesome.Solid.PlayCircle, SetInfo.PlayCount), - new Statistic(FontAwesome.Solid.Heart, SetInfo.FavouriteCount), - new LinkFlowContainer(s => - { - s.Shadow = false; - s.Font = OsuFont.GetFont(size: 14); - }) - { - Anchor = Anchor.TopRight, - Origin = Anchor.TopRight, - AutoSizeAxes = Axes.Both, - }.With(d => - { - d.AutoSizeAxes = Axes.Both; - d.AddText("mapped by "); - d.AddUserLink(SetInfo.Author); - }), - new OsuSpriteText - { - Text = SetInfo.Source, - Anchor = Anchor.TopRight, - Origin = Anchor.TopRight, - Font = OsuFont.GetFont(size: 14), - Alpha = string.IsNullOrEmpty(SetInfo.Source) ? 0f : 1f, - }, - }, - }, - }, - }, - }, - }, - progressBar = new Box - { - Anchor = Anchor.BottomLeft, - Origin = Anchor.BottomLeft, - RelativeSizeAxes = Axes.X, - BypassAutoSizeAxes = Axes.Y, - Size = new Vector2(0, 3), - Alpha = 0, - Colour = colours.Yellow, - }, - }); - - if (SetInfo.HasExplicitContent) - { - titleContainer.Add(new ExplicitContentBeatmapPill - { - Anchor = Anchor.CentreLeft, - Origin = Anchor.CentreLeft, - Margin = new MarginPadding { Left = 10f, Top = 2f }, - }); - } - - if (SetInfo.TrackId != null) - { - artistContainer.Add(new FeaturedArtistBeatmapPill - { - Anchor = Anchor.CentreLeft, - Origin = Anchor.CentreLeft, - Margin = new MarginPadding { Left = 10f, Top = 2f }, - }); - } - - if (SetInfo.HasVideo) - { - statusContainer.Add(new IconPill(FontAwesome.Solid.Film) { IconSize = new Vector2(20) }); - } - - if (SetInfo.HasStoryboard) - { - statusContainer.Add(new IconPill(FontAwesome.Solid.Image) { IconSize = new Vector2(20) }); - } - - statusContainer.Add(new BeatmapSetOnlineStatusPill - { - AutoSizeAxes = Axes.Both, - TextSize = 12, - TextPadding = new MarginPadding { Horizontal = 10, Vertical = 4 }, - Status = SetInfo.Status, - }); - } - } -} diff --git a/osu.Game/Overlays/BeatmapSet/BeatmapSetHeaderContent.cs b/osu.Game/Overlays/BeatmapSet/BeatmapSetHeaderContent.cs index 547b8a6ec3..8f4089c707 100644 --- a/osu.Game/Overlays/BeatmapSet/BeatmapSetHeaderContent.cs +++ b/osu.Game/Overlays/BeatmapSet/BeatmapSetHeaderContent.cs @@ -17,7 +17,6 @@ using osu.Game.Graphics.UserInterface; using osu.Game.Online; using osu.Game.Online.API; using osu.Game.Online.API.Requests.Responses; -using osu.Game.Overlays.BeatmapListing.Panels; using osu.Game.Overlays.BeatmapSet.Buttons; using osuTK; @@ -286,7 +285,7 @@ namespace osu.Game.Overlays.BeatmapSet { case DownloadState.LocallyAvailable: // temporary for UX until new design is implemented. - downloadButtonsContainer.Child = new BeatmapPanelDownloadButton(BeatmapSet.Value) + downloadButtonsContainer.Child = new BeatmapDownloadButton(BeatmapSet.Value) { Width = 50, RelativeSizeAxes = Axes.Y, diff --git a/osu.Game/Overlays/BeatmapSet/Buttons/HeaderDownloadButton.cs b/osu.Game/Overlays/BeatmapSet/Buttons/HeaderDownloadButton.cs index 4eed8f28f2..74417b0ac6 100644 --- a/osu.Game/Overlays/BeatmapSet/Buttons/HeaderDownloadButton.cs +++ b/osu.Game/Overlays/BeatmapSet/Buttons/HeaderDownloadButton.cs @@ -9,13 +9,13 @@ using osu.Framework.Graphics.Cursor; using osu.Framework.Graphics.Sprites; using osu.Framework.Localisation; using osu.Game.Beatmaps; +using osu.Game.Beatmaps.Drawables; using osu.Game.Graphics; using osu.Game.Graphics.Containers; using osu.Game.Graphics.Sprites; using osu.Game.Online; using osu.Game.Online.API; using osu.Game.Online.API.Requests.Responses; -using osu.Game.Overlays.BeatmapListing.Panels; using osu.Game.Resources.Localisation.Web; using osuTK; using osuTK.Graphics; diff --git a/osu.Game/Overlays/BeatmapListing/Panels/PlayButton.cs b/osu.Game/Overlays/BeatmapSet/Buttons/PlayButton.cs similarity index 99% rename from osu.Game/Overlays/BeatmapListing/Panels/PlayButton.cs rename to osu.Game/Overlays/BeatmapSet/Buttons/PlayButton.cs index c352fe0223..63b7a0a062 100644 --- a/osu.Game/Overlays/BeatmapListing/Panels/PlayButton.cs +++ b/osu.Game/Overlays/BeatmapSet/Buttons/PlayButton.cs @@ -14,7 +14,7 @@ using osu.Game.Online.API.Requests.Responses; using osuTK; using osuTK.Graphics; -namespace osu.Game.Overlays.BeatmapListing.Panels +namespace osu.Game.Overlays.BeatmapSet.Buttons { public class PlayButton : Container { diff --git a/osu.Game/Overlays/BeatmapSet/Buttons/PreviewButton.cs b/osu.Game/Overlays/BeatmapSet/Buttons/PreviewButton.cs index 6bcdb7bdc5..751299161d 100644 --- a/osu.Game/Overlays/BeatmapSet/Buttons/PreviewButton.cs +++ b/osu.Game/Overlays/BeatmapSet/Buttons/PreviewButton.cs @@ -11,7 +11,6 @@ using osu.Game.Audio; using osu.Game.Graphics; using osu.Game.Graphics.Containers; using osu.Game.Online.API.Requests.Responses; -using osu.Game.Overlays.BeatmapListing.Panels; using osuTK; namespace osu.Game.Overlays.BeatmapSet.Buttons diff --git a/osu.Game/Screens/OnlinePlay/DrawableRoomPlaylistItem.cs b/osu.Game/Screens/OnlinePlay/DrawableRoomPlaylistItem.cs index 8d9ea91b47..2dbe2df82c 100644 --- a/osu.Game/Screens/OnlinePlay/DrawableRoomPlaylistItem.cs +++ b/osu.Game/Screens/OnlinePlay/DrawableRoomPlaylistItem.cs @@ -25,7 +25,6 @@ using osu.Game.Graphics.UserInterface; using osu.Game.Online; using osu.Game.Online.Chat; using osu.Game.Online.Rooms; -using osu.Game.Overlays.BeatmapListing.Panels; using osu.Game.Overlays.BeatmapSet; using osu.Game.Rulesets; using osu.Game.Rulesets.Mods; @@ -339,7 +338,7 @@ namespace osu.Game.Screens.OnlinePlay return true; } - private sealed class PlaylistDownloadButton : BeatmapPanelDownloadButton + private sealed class PlaylistDownloadButton : BeatmapDownloadButton { private readonly PlaylistItem playlistItem;