From 6e10a9bb2973cbfae0b1f84e5c5c704d401be53c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 18 Dec 2016 16:59:13 +0900 Subject: [PATCH] Allow starting maps by clicking an active panel a second time. --- osu.Game/Beatmaps/Drawables/BeatmapGroup.cs | 6 ++++++ osu.Game/Beatmaps/Drawables/BeatmapPanel.cs | 12 +++++++++++- osu.Game/Screens/Select/PlaySongSelect.cs | 6 +++++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/osu.Game/Beatmaps/Drawables/BeatmapGroup.cs b/osu.Game/Beatmaps/Drawables/BeatmapGroup.cs index db769bccc9..f8d72ad67f 100644 --- a/osu.Game/Beatmaps/Drawables/BeatmapGroup.cs +++ b/osu.Game/Beatmaps/Drawables/BeatmapGroup.cs @@ -19,6 +19,11 @@ namespace osu.Game.Beatmaps.Drawables /// public Action SelectionChanged; + /// + /// Fires when one of our difficulties is clicked when already selected. Should start playing the map. + /// + public Action StartRequested; + public BeatmapSetHeader Header; private BeatmapGroupState state; @@ -68,6 +73,7 @@ namespace osu.Game.Beatmaps.Drawables { Alpha = 0, GainedSelection = panelGainedSelection, + StartRequested = p => { StartRequested?.Invoke(p.Beatmap); }, RelativeSizeAxes = Axes.X, }).ToList(); } diff --git a/osu.Game/Beatmaps/Drawables/BeatmapPanel.cs b/osu.Game/Beatmaps/Drawables/BeatmapPanel.cs index 72d1e2f05d..e8b60bab81 100644 --- a/osu.Game/Beatmaps/Drawables/BeatmapPanel.cs +++ b/osu.Game/Beatmaps/Drawables/BeatmapPanel.cs @@ -16,7 +16,8 @@ using osu.Game.Graphics.Backgrounds; using osu.Game.Graphics.UserInterface; using OpenTK; using OpenTK.Graphics; - +using osu.Framework.Input; + namespace osu.Game.Beatmaps.Drawables { class BeatmapPanel : Panel @@ -25,6 +26,7 @@ namespace osu.Game.Beatmaps.Drawables private Sprite background; public Action GainedSelection; + public Action StartRequested; Color4 deselectedColour = new Color4(20, 43, 51, 255); @@ -45,6 +47,14 @@ namespace osu.Game.Beatmaps.Drawables background.Colour = deselectedColour; } + protected override bool OnClick(InputState state) + { + if (State == PanelSelectedState.Selected) + StartRequested?.Invoke(this); + + return base.OnClick(state); + } + public BeatmapPanel(BeatmapInfo beatmap) { Beatmap = beatmap; diff --git a/osu.Game/Screens/Select/PlaySongSelect.cs b/osu.Game/Screens/Select/PlaySongSelect.cs index 78423c06f1..944b20eb65 100644 --- a/osu.Game/Screens/Select/PlaySongSelect.cs +++ b/osu.Game/Screens/Select/PlaySongSelect.cs @@ -348,7 +348,11 @@ namespace osu.Game.Screens.Select var beatmap = new WorkingBeatmap(beatmapSet.Beatmaps.FirstOrDefault(), beatmapSet, database); - var group = new BeatmapGroup(beatmap) { SelectionChanged = selectionChanged }; + var group = new BeatmapGroup(beatmap) + { + SelectionChanged = selectionChanged, + StartRequested = b => start() + }; //for the time being, let's completely load the difficulty panels in the background. //this likely won't scale so well, but allows us to completely async the loading flow.