From a42c67ee9787f0336b8a2f40d27e0217c488c56c Mon Sep 17 00:00:00 2001 From: EVAST9919 Date: Thu, 1 Jun 2017 20:54:42 +0300 Subject: [PATCH 01/31] Cancel beatmap random selection --- osu.Game/Screens/Select/BeatmapCarousel.cs | 42 ++++++++++++++++++++-- osu.Game/Screens/Select/Footer.cs | 4 ++- osu.Game/Screens/Select/FooterButton.cs | 16 +++++++-- osu.Game/Screens/Select/PlaySongSelect.cs | 2 +- osu.Game/Screens/Select/SongSelect.cs | 9 ++++- 5 files changed, 65 insertions(+), 8 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapCarousel.cs b/osu.Game/Screens/Select/BeatmapCarousel.cs index 26820fc388..07f6a7e5fd 100644 --- a/osu.Game/Screens/Select/BeatmapCarousel.cs +++ b/osu.Game/Screens/Select/BeatmapCarousel.cs @@ -77,8 +77,9 @@ namespace osu.Game.Screens.Select private readonly List panels = new List(); - private BeatmapGroup selectedGroup; + private readonly Stack randomSelectedBeatmaps = new Stack(); + private BeatmapGroup selectedGroup; private BeatmapPanel selectedPanel; public BeatmapCarousel() @@ -172,14 +173,17 @@ namespace osu.Game.Screens.Select public void SelectRandom() { - IEnumerable visibleGroups = groups.Where(selectGroup => selectGroup.State != BeatmapGroupState.Hidden); + randomSelectedBeatmaps.Push(selectedGroup); + + var visibleGroups = getVisibleGroups(); if (!visibleGroups.Any()) return; BeatmapGroup group; + if (randomType == SelectionRandomType.RandomPermutation) { - IEnumerable notSeenGroups = visibleGroups.Except(seenGroups); + var notSeenGroups = visibleGroups.Except(seenGroups); if (!notSeenGroups.Any()) { seenGroups.Clear(); @@ -197,6 +201,38 @@ namespace osu.Game.Screens.Select selectGroup(group, panel); } + public void CancelRandom() + { + if (!randomSelectedBeatmaps.Any()) + return; + + var visibleGroups = getVisibleGroups(); + if (!visibleGroups.Any()) + return; + + // we can avoid selecting deleted beatmaps or beatmaps selected in another gamemode + while (true) + { + if (!randomSelectedBeatmaps.Any()) break; + + if (!visibleGroups.Contains(randomSelectedBeatmaps.FirstOrDefault())) + { + randomSelectedBeatmaps.Pop(); + } + else + { + BeatmapGroup beatmapGroup = randomSelectedBeatmaps.Pop(); + selectGroup(beatmapGroup, beatmapGroup.SelectedPanel); + break; + } + } + } + + private IEnumerable getVisibleGroups() + { + return groups.Where(selectGroup => selectGroup.State != BeatmapGroupState.Hidden); + } + private FilterCriteria criteria = new FilterCriteria(); private ScheduledDelegate filterTask; diff --git a/osu.Game/Screens/Select/Footer.cs b/osu.Game/Screens/Select/Footer.cs index 32e09a5f28..0aa86f4d0d 100644 --- a/osu.Game/Screens/Select/Footer.cs +++ b/osu.Game/Screens/Select/Footer.cs @@ -38,12 +38,13 @@ namespace osu.Game.Screens.Select /// Text on the button. /// Colour of the button. /// Hotkey of the button. + /// Forbid you to use hotkey with shift pressed. /// Action the button does. /// /// Higher depth to be put on the left, and lower to be put on the right. /// Notice this is different to ! /// - public void AddButton(string text, Color4 colour, Action action, Key? hotkey = null, float depth = 0) + public void AddButton(string text, Color4 colour, Action action, Key? hotkey = null, bool excludePressWithShift = false, float depth = 0) { var button = new FooterButton { @@ -54,6 +55,7 @@ namespace osu.Game.Screens.Select SelectedColour = colour, DeselectedColour = colour.Opacity(0.5f), Hotkey = hotkey, + ExcludePressWithShift = excludePressWithShift, }; button.Hovered = () => updateModeLight(button); diff --git a/osu.Game/Screens/Select/FooterButton.cs b/osu.Game/Screens/Select/FooterButton.cs index 58df409ca1..98a0b41543 100644 --- a/osu.Game/Screens/Select/FooterButton.cs +++ b/osu.Game/Screens/Select/FooterButton.cs @@ -84,6 +84,7 @@ namespace osu.Game.Screens.Select public Action Hovered; public Action HoverLost; public Key? Hotkey; + public bool ExcludePressWithShift; protected override bool OnHover(InputState state) { @@ -124,8 +125,19 @@ namespace osu.Game.Screens.Select { if (!args.Repeat && args.Key == Hotkey) { - OnClick(state); - return true; + if (ExcludePressWithShift) + { + if (!state.Keyboard.ShiftPressed) + { + OnClick(state); + return true; + } + } + else + { + OnClick(state); + return true; + } } return base.OnKeyDown(state, args); diff --git a/osu.Game/Screens/Select/PlaySongSelect.cs b/osu.Game/Screens/Select/PlaySongSelect.cs index f96fbb87cb..0903184b40 100644 --- a/osu.Game/Screens/Select/PlaySongSelect.cs +++ b/osu.Game/Screens/Select/PlaySongSelect.cs @@ -42,7 +42,7 @@ namespace osu.Game.Screens.Select [BackgroundDependencyLoader] private void load(OsuColour colours) { - Footer.AddButton(@"mods", colours.Yellow, modSelect.ToggleVisibility, Key.F1, float.MaxValue); + Footer.AddButton(@"mods", colours.Yellow, modSelect.ToggleVisibility, Key.F1, false, float.MaxValue); BeatmapOptions.AddButton(@"Remove", @"from unplayed", FontAwesome.fa_times_circle_o, colours.Purple, null, Key.Number1); BeatmapOptions.AddButton(@"Clear", @"local scores", FontAwesome.fa_eraser, colours.Purple, null, Key.Number2); diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index 41fa53e8a3..1451d2e4fd 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -158,7 +158,7 @@ namespace osu.Game.Screens.Select { if (Footer != null) { - Footer.AddButton(@"random", colours.Green, SelectRandom, Key.F2); + Footer.AddButton(@"random", colours.Green, SelectRandom, Key.F2, true); Footer.AddButton(@"options", colours.Blue, BeatmapOptions.ToggleVisibility, Key.F3); BeatmapOptions.AddButton(@"Delete", @"Beatmap", FontAwesome.fa_trash, colours.Pink, promptDelete, Key.Number4, float.MaxValue); @@ -381,6 +381,13 @@ namespace osu.Game.Screens.Select return true; } break; + case Key.F2: + if (state.Keyboard.ShiftPressed) + { + carousel.CancelRandom(); + return true; + } + break; } return base.OnKeyDown(state, args); From 78500eec21b8039ef5b5959a885c26dca55738ef Mon Sep 17 00:00:00 2001 From: EVAST9919 Date: Mon, 5 Jun 2017 12:24:28 +0300 Subject: [PATCH 02/31] Applied suggested changes --- osu.Game/Screens/Select/BeatmapCarousel.cs | 19 ++++++------------- osu.Game/Screens/Select/Footer.cs | 4 +--- osu.Game/Screens/Select/FooterButton.cs | 16 ++-------------- osu.Game/Screens/Select/PlaySongSelect.cs | 2 +- osu.Game/Screens/Select/SongSelect.cs | 19 +++++++++---------- 5 files changed, 19 insertions(+), 41 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapCarousel.cs b/osu.Game/Screens/Select/BeatmapCarousel.cs index 07f6a7e5fd..88c57853df 100644 --- a/osu.Game/Screens/Select/BeatmapCarousel.cs +++ b/osu.Game/Screens/Select/BeatmapCarousel.cs @@ -171,7 +171,7 @@ namespace osu.Game.Screens.Select } while (index != startIndex); } - public void SelectRandom() + public void SelectNextRandom() { randomSelectedBeatmaps.Push(selectedGroup); @@ -201,7 +201,7 @@ namespace osu.Game.Screens.Select selectGroup(group, panel); } - public void CancelRandom() + public void SelectPreviousRandom() { if (!randomSelectedBeatmaps.Any()) return; @@ -210,19 +210,12 @@ namespace osu.Game.Screens.Select if (!visibleGroups.Any()) return; - // we can avoid selecting deleted beatmaps or beatmaps selected in another gamemode - while (true) + while (randomSelectedBeatmaps.Any()) { - if (!randomSelectedBeatmaps.Any()) break; - - if (!visibleGroups.Contains(randomSelectedBeatmaps.FirstOrDefault())) + var group = randomSelectedBeatmaps.Pop(); + if (visibleGroups.Contains(group)) { - randomSelectedBeatmaps.Pop(); - } - else - { - BeatmapGroup beatmapGroup = randomSelectedBeatmaps.Pop(); - selectGroup(beatmapGroup, beatmapGroup.SelectedPanel); + selectGroup(group, group.SelectedPanel); break; } } diff --git a/osu.Game/Screens/Select/Footer.cs b/osu.Game/Screens/Select/Footer.cs index 0aa86f4d0d..32e09a5f28 100644 --- a/osu.Game/Screens/Select/Footer.cs +++ b/osu.Game/Screens/Select/Footer.cs @@ -38,13 +38,12 @@ namespace osu.Game.Screens.Select /// Text on the button. /// Colour of the button. /// Hotkey of the button. - /// Forbid you to use hotkey with shift pressed. /// Action the button does. /// /// Higher depth to be put on the left, and lower to be put on the right. /// Notice this is different to ! /// - public void AddButton(string text, Color4 colour, Action action, Key? hotkey = null, bool excludePressWithShift = false, float depth = 0) + public void AddButton(string text, Color4 colour, Action action, Key? hotkey = null, float depth = 0) { var button = new FooterButton { @@ -55,7 +54,6 @@ namespace osu.Game.Screens.Select SelectedColour = colour, DeselectedColour = colour.Opacity(0.5f), Hotkey = hotkey, - ExcludePressWithShift = excludePressWithShift, }; button.Hovered = () => updateModeLight(button); diff --git a/osu.Game/Screens/Select/FooterButton.cs b/osu.Game/Screens/Select/FooterButton.cs index 98a0b41543..58df409ca1 100644 --- a/osu.Game/Screens/Select/FooterButton.cs +++ b/osu.Game/Screens/Select/FooterButton.cs @@ -84,7 +84,6 @@ namespace osu.Game.Screens.Select public Action Hovered; public Action HoverLost; public Key? Hotkey; - public bool ExcludePressWithShift; protected override bool OnHover(InputState state) { @@ -125,19 +124,8 @@ namespace osu.Game.Screens.Select { if (!args.Repeat && args.Key == Hotkey) { - if (ExcludePressWithShift) - { - if (!state.Keyboard.ShiftPressed) - { - OnClick(state); - return true; - } - } - else - { - OnClick(state); - return true; - } + OnClick(state); + return true; } return base.OnKeyDown(state, args); diff --git a/osu.Game/Screens/Select/PlaySongSelect.cs b/osu.Game/Screens/Select/PlaySongSelect.cs index 0903184b40..f96fbb87cb 100644 --- a/osu.Game/Screens/Select/PlaySongSelect.cs +++ b/osu.Game/Screens/Select/PlaySongSelect.cs @@ -42,7 +42,7 @@ namespace osu.Game.Screens.Select [BackgroundDependencyLoader] private void load(OsuColour colours) { - Footer.AddButton(@"mods", colours.Yellow, modSelect.ToggleVisibility, Key.F1, false, float.MaxValue); + Footer.AddButton(@"mods", colours.Yellow, modSelect.ToggleVisibility, Key.F1, float.MaxValue); BeatmapOptions.AddButton(@"Remove", @"from unplayed", FontAwesome.fa_times_circle_o, colours.Purple, null, Key.Number1); BeatmapOptions.AddButton(@"Clear", @"local scores", FontAwesome.fa_eraser, colours.Purple, null, Key.Number2); diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index 1451d2e4fd..5e6eaadff5 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -154,11 +154,11 @@ namespace osu.Game.Screens.Select } [BackgroundDependencyLoader(permitNulls: true)] - private void load(BeatmapDatabase beatmaps, AudioManager audio, DialogOverlay dialog, OsuGame osu, OsuColour colours) + private void load(BeatmapDatabase beatmaps, AudioManager audio, DialogOverlay dialog, OsuGame osu, OsuColour colours, UserInputManager input) { if (Footer != null) { - Footer.AddButton(@"random", colours.Green, SelectRandom, Key.F2, true); + Footer.AddButton(@"random", colours.Green, () => triggerRandom(input), Key.F2); Footer.AddButton(@"options", colours.Blue, BeatmapOptions.ToggleVisibility, Key.F3); BeatmapOptions.AddButton(@"Delete", @"Beatmap", FontAwesome.fa_trash, colours.Pink, promptDelete, Key.Number4, float.MaxValue); @@ -209,7 +209,13 @@ namespace osu.Game.Screens.Select OnSelected(); } - public void SelectRandom() => carousel.SelectRandom(); + private void triggerRandom(UserInputManager input) + { + if (input.CurrentState.Keyboard.ShiftPressed) + carousel.SelectPreviousRandom(); + else + carousel.SelectNextRandom(); + } protected abstract void OnSelected(); @@ -381,13 +387,6 @@ namespace osu.Game.Screens.Select return true; } break; - case Key.F2: - if (state.Keyboard.ShiftPressed) - { - carousel.CancelRandom(); - return true; - } - break; } return base.OnKeyDown(state, args); From e552c39444c3439f2120d9ba1e5289f71c812902 Mon Sep 17 00:00:00 2001 From: EVAST9919 Date: Sun, 11 Jun 2017 22:04:35 +0300 Subject: [PATCH 03/31] change function to a property --- osu.Game/Screens/Select/BeatmapCarousel.cs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapCarousel.cs b/osu.Game/Screens/Select/BeatmapCarousel.cs index a268096435..05fb4c48bf 100644 --- a/osu.Game/Screens/Select/BeatmapCarousel.cs +++ b/osu.Game/Screens/Select/BeatmapCarousel.cs @@ -171,6 +171,8 @@ namespace osu.Game.Screens.Select } while (index != startIndex); } + private IEnumerable getVisibleGroups() => groups.Where(selectGroup => selectGroup.State != BeatmapGroupState.Hidden); + public void SelectNextRandom() { randomSelectedBeatmaps.Push(selectedGroup); @@ -221,11 +223,6 @@ namespace osu.Game.Screens.Select } } - private IEnumerable getVisibleGroups() - { - return groups.Where(selectGroup => selectGroup.State != BeatmapGroupState.Hidden); - } - private FilterCriteria criteria = new FilterCriteria(); private ScheduledDelegate filterTask; From 5117baae66e0707a2d861f733b420879727ad1ea Mon Sep 17 00:00:00 2001 From: EVAST9919 Date: Thu, 15 Jun 2017 06:37:20 +0300 Subject: [PATCH 04/31] Make random works with panels too --- osu.Game/Screens/Select/BeatmapCarousel.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapCarousel.cs b/osu.Game/Screens/Select/BeatmapCarousel.cs index 05fb4c48bf..f9064c4963 100644 --- a/osu.Game/Screens/Select/BeatmapCarousel.cs +++ b/osu.Game/Screens/Select/BeatmapCarousel.cs @@ -77,7 +77,7 @@ namespace osu.Game.Screens.Select private readonly List panels = new List(); - private readonly Stack randomSelectedBeatmaps = new Stack(); + private readonly Stack> randomSelectedBeatmaps = new Stack>(); private BeatmapGroup selectedGroup; private BeatmapPanel selectedPanel; @@ -175,7 +175,7 @@ namespace osu.Game.Screens.Select public void SelectNextRandom() { - randomSelectedBeatmaps.Push(selectedGroup); + randomSelectedBeatmaps.Push(new KeyValuePair(selectedGroup, selectedGroup.SelectedPanel)); var visibleGroups = getVisibleGroups(); if (!visibleGroups.Any()) @@ -214,10 +214,11 @@ namespace osu.Game.Screens.Select while (randomSelectedBeatmaps.Any()) { - var group = randomSelectedBeatmaps.Pop(); + var beatmapCoordinates = randomSelectedBeatmaps.Pop(); + var group = beatmapCoordinates.Key; if (visibleGroups.Contains(group)) { - selectGroup(group, group.SelectedPanel); + selectGroup(group, beatmapCoordinates.Value); break; } } From 817d2c3da1996fdc816a15b9329097c282b4e6e0 Mon Sep 17 00:00:00 2001 From: EVAST9919 Date: Fri, 23 Jun 2017 23:57:57 +0300 Subject: [PATCH 05/31] Fixed logo heartbeat playing even without beating --- osu.Game/Screens/Menu/OsuLogo.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Game/Screens/Menu/OsuLogo.cs b/osu.Game/Screens/Menu/OsuLogo.cs index 78bcbc5c63..12b6b994d0 100644 --- a/osu.Game/Screens/Menu/OsuLogo.cs +++ b/osu.Game/Screens/Menu/OsuLogo.cs @@ -227,9 +227,6 @@ namespace osu.Game.Screens.Menu { base.OnNewBeat(beatIndex, timingPoint, effectPoint, amplitudes); - if (Hovering) - sampleBeat.Play(); - lastBeatIndex = beatIndex; var beatLength = timingPoint.BeatLength; @@ -238,6 +235,9 @@ namespace osu.Game.Screens.Menu if (beatIndex < 0) return; + if (Hovering) + sampleBeat.Play(); + logoBeatContainer.ScaleTo(1 - 0.02f * amplitudeAdjust, beat_in_time, EasingTypes.Out); using (logoBeatContainer.BeginDelayedSequence(beat_in_time)) logoBeatContainer.ScaleTo(1, beatLength * 2, EasingTypes.OutQuint); From 1bca9ca0e9e1345b4033bb847a8f6bfbf32f31f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Sat, 24 Jun 2017 12:56:35 +0200 Subject: [PATCH 06/31] Update framework with better children list --- osu.Game/Overlays/Chat/ChannelSection.cs | 2 +- osu.Game/Overlays/Chat/ChannelSelectionOverlay.cs | 2 +- osu.Game/Overlays/Dialog/PopupDialog.cs | 2 +- osu.Game/Overlays/Direct/DirectPanel.cs | 2 +- osu.Game/Overlays/DirectOverlay.cs | 2 +- osu.Game/Overlays/SocialOverlay.cs | 2 +- osu.Game/Screens/Multiplayer/RoomInspector.cs | 2 +- osu.Game/Screens/Ranking/ResultsPageScore.cs | 2 +- osu.Game/Screens/Select/BeatmapDetails.cs | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/osu.Game/Overlays/Chat/ChannelSection.cs b/osu.Game/Overlays/Chat/ChannelSection.cs index f12ec53605..cafb88b6ac 100644 --- a/osu.Game/Overlays/Chat/ChannelSection.cs +++ b/osu.Game/Overlays/Chat/ChannelSection.cs @@ -35,7 +35,7 @@ namespace osu.Game.Overlays.Chat public IEnumerable Channels { - set { ChannelFlow.Children = value.Select(c => new ChannelListItem(c)); } + set { ChannelFlow.ChildrenEnumerable = value.Select(c => new ChannelListItem(c)); } } public ChannelSection() diff --git a/osu.Game/Overlays/Chat/ChannelSelectionOverlay.cs b/osu.Game/Overlays/Chat/ChannelSelectionOverlay.cs index 6ff3cc7be5..7c10c4fb9b 100644 --- a/osu.Game/Overlays/Chat/ChannelSelectionOverlay.cs +++ b/osu.Game/Overlays/Chat/ChannelSelectionOverlay.cs @@ -38,7 +38,7 @@ namespace osu.Game.Overlays.Chat { set { - sectionsFlow.Children = value; + sectionsFlow.ChildrenEnumerable = value; foreach (ChannelSection s in sectionsFlow.Children) { diff --git a/osu.Game/Overlays/Dialog/PopupDialog.cs b/osu.Game/Overlays/Dialog/PopupDialog.cs index c8ca50823f..5edb48e136 100644 --- a/osu.Game/Overlays/Dialog/PopupDialog.cs +++ b/osu.Game/Overlays/Dialog/PopupDialog.cs @@ -56,7 +56,7 @@ namespace osu.Game.Overlays.Dialog get { return buttonsContainer.Children; } set { - buttonsContainer.Children = value; + buttonsContainer.ChildrenEnumerable = value; foreach (PopupDialogButton b in value) { var action = b.Action; diff --git a/osu.Game/Overlays/Direct/DirectPanel.cs b/osu.Game/Overlays/Direct/DirectPanel.cs index 8a56cf392e..f8acad1f59 100644 --- a/osu.Game/Overlays/Direct/DirectPanel.cs +++ b/osu.Game/Overlays/Direct/DirectPanel.cs @@ -24,7 +24,7 @@ namespace osu.Game.Overlays.Direct SetInfo = setInfo; } - protected IEnumerable GetDifficultyIcons() + protected List GetDifficultyIcons() { var icons = new List(); diff --git a/osu.Game/Overlays/DirectOverlay.cs b/osu.Game/Overlays/DirectOverlay.cs index 93c440384b..beb1355f36 100644 --- a/osu.Game/Overlays/DirectOverlay.cs +++ b/osu.Game/Overlays/DirectOverlay.cs @@ -129,7 +129,7 @@ namespace osu.Game.Overlays private void recreatePanels(PanelDisplayStyle displayStyle) { if (BeatmapSets == null) return; - panels.Children = BeatmapSets.Select(b => displayStyle == PanelDisplayStyle.Grid ? (DirectPanel)new DirectGridPanel(b) { Width = 400 } : new DirectListPanel(b)); + panels.ChildrenEnumerable = BeatmapSets.Select(b => displayStyle == PanelDisplayStyle.Grid ? (DirectPanel)new DirectGridPanel(b) { Width = 400 } : new DirectListPanel(b)); } public class ResultCounts diff --git a/osu.Game/Overlays/SocialOverlay.cs b/osu.Game/Overlays/SocialOverlay.cs index c6ce20f5cf..1cd2343848 100644 --- a/osu.Game/Overlays/SocialOverlay.cs +++ b/osu.Game/Overlays/SocialOverlay.cs @@ -44,7 +44,7 @@ namespace osu.Game.Overlays panelFlow.Clear(); else { - panelFlow.Children = users.Select(u => + panelFlow.ChildrenEnumerable = users.Select(u => { var p = new UserPanel(u) { Width = 300 }; p.Status.BindTo(u.Status); diff --git a/osu.Game/Screens/Multiplayer/RoomInspector.cs b/osu.Game/Screens/Multiplayer/RoomInspector.cs index 2181f37be9..f9e015eceb 100644 --- a/osu.Game/Screens/Multiplayer/RoomInspector.cs +++ b/osu.Game/Screens/Multiplayer/RoomInspector.cs @@ -495,7 +495,7 @@ namespace osu.Game.Screens.Multiplayer levelRangeLower.Text = ranks.Min().ToString(); levelRangeHigher.Text = ranks.Max().ToString(); - participantsFlow.Children = value.Select(u => new UserTile(u)); + participantsFlow.ChildrenEnumerable = value.Select(u => new UserTile(u)); } private class UserTile : Container, IHasTooltip diff --git a/osu.Game/Screens/Ranking/ResultsPageScore.cs b/osu.Game/Screens/Ranking/ResultsPageScore.cs index ac333e47ff..15e8e4bfcd 100644 --- a/osu.Game/Screens/Ranking/ResultsPageScore.cs +++ b/osu.Game/Screens/Ranking/ResultsPageScore.cs @@ -164,7 +164,7 @@ namespace osu.Game.Screens.Ranking } }; - statisticsContainer.Children = Score.Statistics.Select(s => new DrawableScoreStatistic(s)); + statisticsContainer.ChildrenEnumerable = Score.Statistics.Select(s => new DrawableScoreStatistic(s)); } protected override void LoadComplete() diff --git a/osu.Game/Screens/Select/BeatmapDetails.cs b/osu.Game/Screens/Select/BeatmapDetails.cs index daf28c8f1b..481637e2af 100644 --- a/osu.Game/Screens/Select/BeatmapDetails.cs +++ b/osu.Game/Screens/Select/BeatmapDetails.cs @@ -439,7 +439,7 @@ namespace osu.Game.Screens.Select { Show(); if (header.Text == "Tags") - content.Children = value.Split(' ').Select(text => new OsuSpriteText + content.ChildrenEnumerable = value.Split(' ').Select(text => new OsuSpriteText { Text = text, Font = "Exo2.0-Regular", From 63aeb42657dc0084cd9a417e8356246e0599629c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 25 Jun 2017 14:38:00 +0900 Subject: [PATCH 07/31] Update framework --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index 2f7ebfcf63..a5e66079b9 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit 2f7ebfcf637cc1928d8d37f6336e5da77f4926a0 +Subproject commit a5e66079b9df3cf74a8bd1431c1cb7faad3c4d9f From 7baa2b742175286c6c70b254c8540efab23b2bba Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 25 Jun 2017 14:46:59 +0900 Subject: [PATCH 08/31] Fix CI issues --- osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs | 2 +- osu.Game/Graphics/UserInterface/BarGraph.cs | 2 +- osu.Game/Overlays/OnScreenDisplay.cs | 5 ++--- .../Screens/Tournament/Components/VisualiserContainer.cs | 2 +- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs index 395e496b61..c6c009e8f2 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs @@ -125,7 +125,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables { if (!userTriggered && Time.Current >= slider.EndTime) { - var ticksCount = ticks.Children.Count() + 1; + var ticksCount = ticks.Children.Count + 1; var ticksHit = ticks.Children.Count(t => t.Judgement.Result == HitResult.Hit); if (initialCircle.Judgement.Result == HitResult.Hit) ticksHit++; diff --git a/osu.Game/Graphics/UserInterface/BarGraph.cs b/osu.Game/Graphics/UserInterface/BarGraph.cs index d0965a1861..e4a471bbba 100644 --- a/osu.Game/Graphics/UserInterface/BarGraph.cs +++ b/osu.Game/Graphics/UserInterface/BarGraph.cs @@ -29,7 +29,7 @@ namespace osu.Game.Graphics.UserInterface base.Direction = (direction & BarDirection.Horizontal) > 0 ? FillDirection.Vertical : FillDirection.Horizontal; foreach (var bar in Children) { - bar.Size = (direction & BarDirection.Horizontal) > 0 ? new Vector2(1, 1.0f / Children.Count()) : new Vector2(1.0f / Children.Count(), 1); + bar.Size = (direction & BarDirection.Horizontal) > 0 ? new Vector2(1, 1.0f / Children.Count) : new Vector2(1.0f / Children.Count, 1); bar.Direction = direction; } } diff --git a/osu.Game/Overlays/OnScreenDisplay.cs b/osu.Game/Overlays/OnScreenDisplay.cs index 2887d4355b..4a616a8685 100644 --- a/osu.Game/Overlays/OnScreenDisplay.cs +++ b/osu.Game/Overlays/OnScreenDisplay.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; -using System.Linq; using osu.Framework.Allocation; using osu.Framework.Configuration; using osu.Framework.Extensions; @@ -182,7 +181,7 @@ namespace osu.Game.Overlays textLine2.Origin = optionCount > 0 ? Anchor.BottomCentre : Anchor.Centre; textLine2.Y = optionCount > 0 ? 0 : 5; - if (optionLights.Children.Count() != optionCount) + if (optionLights.Children.Count != optionCount) { optionLights.Clear(); for (int i = 0; i < optionCount; i++) @@ -190,7 +189,7 @@ namespace osu.Game.Overlays } for (int i = 0; i < optionCount; i++) - optionLights.Children.Skip(i).First().Glowing = i == selectedOption; + optionLights.Children[i].Glowing = i == selectedOption; }); } diff --git a/osu.Game/Screens/Tournament/Components/VisualiserContainer.cs b/osu.Game/Screens/Tournament/Components/VisualiserContainer.cs index 373934f775..3dd7207607 100644 --- a/osu.Game/Screens/Tournament/Components/VisualiserContainer.cs +++ b/osu.Game/Screens/Tournament/Components/VisualiserContainer.cs @@ -84,7 +84,7 @@ namespace osu.Game.Screens.Tournament.Components { base.UpdateAfterChildren(); - while (Children.Count() < 3) + while (Children.Count < 3) addLine(); float pos = leftPos; From cbf188c293e0a7ca467a5ee6076cb7b39db8d7a7 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 26 Jun 2017 19:06:08 +0900 Subject: [PATCH 09/31] Add new main menu backgrounds --- osu-resources | 2 +- .../Backgrounds/BackgroundScreenDefault.cs | 25 ++++++++++++++++++- osu.Game/Screens/Loader.cs | 5 ++-- osu.Game/Screens/Menu/MainMenu.cs | 11 +++++++- 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/osu-resources b/osu-resources index 10fda22522..900f47563f 160000 --- a/osu-resources +++ b/osu-resources @@ -1 +1 @@ -Subproject commit 10fda22522ffadbdbc43fa0f3683a065e536f7d1 +Subproject commit 900f47563f5598eef7cbf203f0b3f2166508b6d5 diff --git a/osu.Game/Screens/Backgrounds/BackgroundScreenDefault.cs b/osu.Game/Screens/Backgrounds/BackgroundScreenDefault.cs index f411f74361..3248fef0db 100644 --- a/osu.Game/Screens/Backgrounds/BackgroundScreenDefault.cs +++ b/osu.Game/Screens/Backgrounds/BackgroundScreenDefault.cs @@ -2,16 +2,39 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using osu.Framework.Allocation; +using osu.Framework.Graphics; using osu.Game.Graphics.Backgrounds; namespace osu.Game.Screens.Backgrounds { public class BackgroundScreenDefault : BackgroundScreen { + private int currentDisplay; + private const int background_count = 5; + + + private string backgroundName => $@"Menu/menu-background-{currentDisplay % background_count + 1}"; + + private Background current; + [BackgroundDependencyLoader] private void load() { - Add(new Background(@"Backgrounds/bg1")); + display(new Background(backgroundName)); + } + + private void display(Background b) + { + current?.FadeOut(800, EasingTypes.OutQuint); + current?.Expire(); + + Add(current = b); + } + + public void Next() + { + currentDisplay++; + LoadComponentAsync(new Background(backgroundName) { Depth = currentDisplay }, display); } } } \ No newline at end of file diff --git a/osu.Game/Screens/Loader.cs b/osu.Game/Screens/Loader.cs index 30e1538b47..af084e740b 100644 --- a/osu.Game/Screens/Loader.cs +++ b/osu.Game/Screens/Loader.cs @@ -2,7 +2,6 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using osu.Framework.Allocation; -using osu.Framework.Screens; using osu.Game.Screens.Menu; namespace osu.Game.Screens @@ -20,9 +19,9 @@ namespace osu.Game.Screens private void load(OsuGame game) { if (game.IsDeployedBuild) - LoadComponentAsync(new Disclaimer(), d => Push((Screen)d)); + LoadComponentAsync(new Disclaimer(), d => Push(d)); else - LoadComponentAsync(new Intro(), d => Push((Screen)d)); + LoadComponentAsync(new Intro(), d => Push(d)); } } } diff --git a/osu.Game/Screens/Menu/MainMenu.cs b/osu.Game/Screens/Menu/MainMenu.cs index 1a7d2d4e37..5a2e0a7b12 100644 --- a/osu.Game/Screens/Menu/MainMenu.cs +++ b/osu.Game/Screens/Menu/MainMenu.cs @@ -7,6 +7,7 @@ using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Input; using osu.Framework.Screens; +using osu.Game.Beatmaps; using osu.Game.Graphics.Containers; using osu.Game.Screens.Backgrounds; using osu.Game.Screens.Charts; @@ -24,7 +25,7 @@ namespace osu.Game.Screens.Menu internal override bool ShowOverlays => buttons.State != MenuState.Initial; - private readonly BackgroundScreen background; + private readonly BackgroundScreenDefault background; private Screen songSelect; protected override BackgroundScreen CreateBackground() => background; @@ -66,6 +67,12 @@ namespace osu.Game.Screens.Menu preloadSongSelect(); } + protected override void OnBeatmapChanged(WorkingBeatmap beatmap) + { + base.OnBeatmapChanged(beatmap); + background.Next(); + } + private void preloadSongSelect() { if (songSelect == null) @@ -111,6 +118,8 @@ namespace osu.Game.Screens.Menu { base.OnResuming(last); + background.Next(); + //we may have consumed our preloaded instance, so let's make another. preloadSongSelect(); From 803bb3c7802357d24f078bf3fb0dcbd0f6c69e78 Mon Sep 17 00:00:00 2001 From: Dan Balasescu Date: Mon, 26 Jun 2017 23:05:35 +0900 Subject: [PATCH 10/31] Cleanup. --- osu.Game/Screens/Backgrounds/BackgroundScreenDefault.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/osu.Game/Screens/Backgrounds/BackgroundScreenDefault.cs b/osu.Game/Screens/Backgrounds/BackgroundScreenDefault.cs index 3248fef0db..bab267a24a 100644 --- a/osu.Game/Screens/Backgrounds/BackgroundScreenDefault.cs +++ b/osu.Game/Screens/Backgrounds/BackgroundScreenDefault.cs @@ -12,7 +12,6 @@ namespace osu.Game.Screens.Backgrounds private int currentDisplay; private const int background_count = 5; - private string backgroundName => $@"Menu/menu-background-{currentDisplay % background_count + 1}"; private Background current; @@ -23,12 +22,12 @@ namespace osu.Game.Screens.Backgrounds display(new Background(backgroundName)); } - private void display(Background b) + private void display(Background newBackground) { current?.FadeOut(800, EasingTypes.OutQuint); current?.Expire(); - Add(current = b); + Add(current = newBackground); } public void Next() @@ -37,4 +36,4 @@ namespace osu.Game.Screens.Backgrounds LoadComponentAsync(new Background(backgroundName) { Depth = currentDisplay }, display); } } -} \ No newline at end of file +} From b40526ced22d250dd2c5cfac7976bc9e7a58d9ff Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Mon, 26 Jun 2017 23:47:15 +0900 Subject: [PATCH 11/31] Update framework. --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index a5e66079b9..25b660ce32 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit a5e66079b9df3cf74a8bd1431c1cb7faad3c4d9f +Subproject commit 25b660ce322922abbb9be53caca2041c0e0c3ba0 From 480cdba023ad7e34f3b08a9c180869991d618b25 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 27 Jun 2017 21:05:49 +0900 Subject: [PATCH 12/31] Add OsuClickableContainer with generic sounds --- .../Containers/OsuClickableContainer.cs | 35 +++++++++++++++++++ osu.Game/Graphics/UserInterface/BackButton.cs | 1 - .../Graphics/UserInterface/DialogButton.cs | 12 +++---- osu.Game/Graphics/UserInterface/IconButton.cs | 3 +- .../Graphics/UserInterface/TwoLayerButton.cs | 5 +-- osu.Game/Overlays/Direct/DirectListPanel.cs | 3 +- osu.Game/Overlays/Direct/FilterControl.cs | 3 +- .../Overlays/Notifications/Notification.cs | 3 +- .../Notifications/NotificationSection.cs | 3 +- .../SearchableList/DisplayStyleControl.cs | 3 +- osu.Game/Overlays/Toolbar/ToolbarButton.cs | 19 +++------- osu.Game/Screens/Multiplayer/DrawableRoom.cs | 3 +- osu.Game/Screens/Play/MenuOverlay.cs | 6 ---- osu.Game/Screens/Play/SkipButton.cs | 14 ++------ osu.Game/Screens/Select/FooterButton.cs | 4 +-- .../Select/Leaderboards/LeaderboardScore.cs | 3 +- .../Select/Options/BeatmapOptionsButton.cs | 3 +- osu.Game/osu.Game.csproj | 1 + 18 files changed, 68 insertions(+), 56 deletions(-) create mode 100644 osu.Game/Graphics/Containers/OsuClickableContainer.cs diff --git a/osu.Game/Graphics/Containers/OsuClickableContainer.cs b/osu.Game/Graphics/Containers/OsuClickableContainer.cs new file mode 100644 index 0000000000..adc15f6833 --- /dev/null +++ b/osu.Game/Graphics/Containers/OsuClickableContainer.cs @@ -0,0 +1,35 @@ +// Copyright (c) 2007-2017 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Allocation; +using osu.Framework.Audio; +using osu.Framework.Audio.Sample; +using osu.Framework.Graphics.Containers; +using osu.Framework.Input; + +namespace osu.Game.Graphics.Containers +{ + public class OsuClickableContainer : ClickableContainer + { + public SampleChannel SampleClick, SampleHover; + + [BackgroundDependencyLoader] + private void load(AudioManager audio) + { + SampleHover = audio.Sample.Get(@"UI/generic-hover"); + SampleClick = audio.Sample.Get(@"UI/generic-click"); + } + + protected override bool OnHover(InputState state) + { + SampleHover?.Play(); + return base.OnHover(state); + } + + protected override bool OnClick(InputState state) + { + SampleClick?.Play(); + return base.OnClick(state); + } + } +} diff --git a/osu.Game/Graphics/UserInterface/BackButton.cs b/osu.Game/Graphics/UserInterface/BackButton.cs index 2b4b9cdb04..24905d6044 100644 --- a/osu.Game/Graphics/UserInterface/BackButton.cs +++ b/osu.Game/Graphics/UserInterface/BackButton.cs @@ -20,7 +20,6 @@ namespace osu.Game.Graphics.UserInterface [BackgroundDependencyLoader] private void load(AudioManager audio, OsuColour colours) { - ActivationSound = audio.Sample.Get(@"Menu/menuback"); BackgroundColour = colours.Pink; HoverColour = colours.PinkDark; } diff --git a/osu.Game/Graphics/UserInterface/DialogButton.cs b/osu.Game/Graphics/UserInterface/DialogButton.cs index 47f628f96c..26e0148bd6 100644 --- a/osu.Game/Graphics/UserInterface/DialogButton.cs +++ b/osu.Game/Graphics/UserInterface/DialogButton.cs @@ -8,14 +8,14 @@ using osu.Framework.Graphics.Colour; using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Containers; -using osu.Framework.Audio.Sample; using osu.Game.Graphics.Backgrounds; using osu.Game.Graphics.Sprites; using osu.Framework.Extensions.Color4Extensions; +using osu.Game.Graphics.Containers; namespace osu.Game.Graphics.UserInterface { - public class DialogButton : ClickableContainer + public class DialogButton : OsuClickableContainer { private const float hover_width = 0.9f; private const float hover_duration = 500; @@ -79,8 +79,6 @@ namespace osu.Game.Graphics.UserInterface } } - public SampleChannel SampleClick, SampleHover; - private readonly Container backgroundContainer; private readonly Container colourContainer; private readonly Container glowContainer; @@ -100,8 +98,6 @@ namespace osu.Game.Graphics.UserInterface didClick = true; colourContainer.ResizeTo(new Vector2(1.5f, 1f), click_duration, EasingTypes.In); flash(); - SampleClick?.Play(); - Action?.Invoke(); Delay(click_duration); Schedule(delegate { @@ -110,7 +106,7 @@ namespace osu.Game.Graphics.UserInterface glowContainer.FadeOut(); }); - return true; + return base.OnClick(state); } protected override bool OnHover(Framework.Input.InputState state) @@ -119,7 +115,7 @@ namespace osu.Game.Graphics.UserInterface colourContainer.ResizeTo(new Vector2(hover_width, 1f), hover_duration, EasingTypes.OutElastic); glowContainer.FadeIn(glow_fade_duration, EasingTypes.Out); - SampleHover?.Play(); + base.OnHover(state); return true; } diff --git a/osu.Game/Graphics/UserInterface/IconButton.cs b/osu.Game/Graphics/UserInterface/IconButton.cs index 8540b35702..84904c10db 100644 --- a/osu.Game/Graphics/UserInterface/IconButton.cs +++ b/osu.Game/Graphics/UserInterface/IconButton.cs @@ -9,10 +9,11 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Framework.Input; +using osu.Game.Graphics.Containers; namespace osu.Game.Graphics.UserInterface { - public class IconButton : ClickableContainer + public class IconButton : OsuClickableContainer { private readonly TextAwesome icon; private readonly Box hover; diff --git a/osu.Game/Graphics/UserInterface/TwoLayerButton.cs b/osu.Game/Graphics/UserInterface/TwoLayerButton.cs index b188e782e2..81c031151d 100644 --- a/osu.Game/Graphics/UserInterface/TwoLayerButton.cs +++ b/osu.Game/Graphics/UserInterface/TwoLayerButton.cs @@ -18,7 +18,7 @@ using osu.Framework.Graphics.Shapes; namespace osu.Game.Graphics.UserInterface { - public class TwoLayerButton : ClickableContainer + public class TwoLayerButton : OsuClickableContainer { private readonly BouncingIcon bouncingIcon; @@ -32,7 +32,6 @@ namespace osu.Game.Graphics.UserInterface public static readonly Vector2 SIZE_EXTENDED = new Vector2(140, 50); public static readonly Vector2 SIZE_RETRACTED = new Vector2(100, 50); - public SampleChannel ActivationSound; private readonly SpriteText text; public Color4 HoverColour; @@ -210,8 +209,6 @@ namespace osu.Game.Graphics.UserInterface flash.FadeOut(500, EasingTypes.OutQuint); flash.Expire(); - ActivationSound.Play(); - return base.OnClick(state); } diff --git a/osu.Game/Overlays/Direct/DirectListPanel.cs b/osu.Game/Overlays/Direct/DirectListPanel.cs index 2cede1e574..1e923d79fa 100644 --- a/osu.Game/Overlays/Direct/DirectListPanel.cs +++ b/osu.Game/Overlays/Direct/DirectListPanel.cs @@ -16,6 +16,7 @@ using osu.Framework.Graphics.Textures; using System.Linq; using osu.Framework.Input; using osu.Framework.Graphics.Shapes; +using osu.Game.Graphics.Containers; namespace osu.Game.Overlays.Direct { @@ -151,7 +152,7 @@ namespace osu.Game.Overlays.Direct }; } - private class DownloadButton : ClickableContainer + private class DownloadButton : OsuClickableContainer { private readonly TextAwesome icon; diff --git a/osu.Game/Overlays/Direct/FilterControl.cs b/osu.Game/Overlays/Direct/FilterControl.cs index 455d0ab77b..b898d24c31 100644 --- a/osu.Game/Overlays/Direct/FilterControl.cs +++ b/osu.Game/Overlays/Direct/FilterControl.cs @@ -9,6 +9,7 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Database; using osu.Game.Graphics; +using osu.Game.Graphics.Containers; using osu.Game.Overlays.SearchableList; namespace osu.Game.Overlays.Direct @@ -42,7 +43,7 @@ namespace osu.Game.Overlays.Direct } } - private class RulesetToggleButton : ClickableContainer + private class RulesetToggleButton : OsuClickableContainer { private readonly TextAwesome icon; diff --git a/osu.Game/Overlays/Notifications/Notification.cs b/osu.Game/Overlays/Notifications/Notification.cs index 2833ef9f3a..3380c61385 100644 --- a/osu.Game/Overlays/Notifications/Notification.cs +++ b/osu.Game/Overlays/Notifications/Notification.cs @@ -13,6 +13,7 @@ using osu.Game.Graphics; using OpenTK; using OpenTK.Graphics; using osu.Framework.Graphics.Shapes; +using osu.Game.Graphics.Containers; namespace osu.Game.Overlays.Notifications { @@ -152,7 +153,7 @@ namespace osu.Game.Overlays.Notifications Expire(); } - private class CloseButton : ClickableContainer + private class CloseButton : OsuClickableContainer { private Color4 hoverColour; diff --git a/osu.Game/Overlays/Notifications/NotificationSection.cs b/osu.Game/Overlays/Notifications/NotificationSection.cs index b53f8e6b14..b4f35be733 100644 --- a/osu.Game/Overlays/Notifications/NotificationSection.cs +++ b/osu.Game/Overlays/Notifications/NotificationSection.cs @@ -11,6 +11,7 @@ using osu.Framework.Graphics.Containers; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; using OpenTK; +using osu.Game.Graphics.Containers; namespace osu.Game.Overlays.Notifications { @@ -131,7 +132,7 @@ namespace osu.Game.Overlays.Notifications countText.Text = notifications.Children.Count(c => c.Alpha > 0.99f).ToString(); } - private class ClearAllButton : ClickableContainer + private class ClearAllButton : OsuClickableContainer { private readonly OsuSpriteText text; diff --git a/osu.Game/Overlays/SearchableList/DisplayStyleControl.cs b/osu.Game/Overlays/SearchableList/DisplayStyleControl.cs index b37b0db139..7157861632 100644 --- a/osu.Game/Overlays/SearchableList/DisplayStyleControl.cs +++ b/osu.Game/Overlays/SearchableList/DisplayStyleControl.cs @@ -6,6 +6,7 @@ using osu.Framework.Configuration; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Graphics; +using osu.Game.Graphics.Containers; namespace osu.Game.Overlays.SearchableList { @@ -52,7 +53,7 @@ namespace osu.Game.Overlays.SearchableList DisplayStyle.Value = PanelDisplayStyle.Grid; } - private class DisplayStyleToggleButton : ClickableContainer + private class DisplayStyleToggleButton : OsuClickableContainer { private readonly TextAwesome icon; private readonly PanelDisplayStyle style; diff --git a/osu.Game/Overlays/Toolbar/ToolbarButton.cs b/osu.Game/Overlays/Toolbar/ToolbarButton.cs index bb3fc0783f..0866c68561 100644 --- a/osu.Game/Overlays/Toolbar/ToolbarButton.cs +++ b/osu.Game/Overlays/Toolbar/ToolbarButton.cs @@ -1,10 +1,8 @@ // Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using System; using osu.Framework.Allocation; using osu.Framework.Audio; -using osu.Framework.Audio.Sample; using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; @@ -16,10 +14,11 @@ using osu.Game.Graphics.Sprites; using OpenTK; using OpenTK.Graphics; using osu.Framework.Graphics.Shapes; +using osu.Game.Graphics.Containers; namespace osu.Game.Overlays.Toolbar { - public class ToolbarButton : Container + public class ToolbarButton : OsuClickableContainer { public const float WIDTH = Toolbar.HEIGHT * 1.4f; @@ -58,7 +57,6 @@ namespace osu.Game.Overlays.Toolbar protected virtual Anchor TooltipAnchor => Anchor.TopLeft; - public Action Action; protected TextAwesome DrawableIcon; protected SpriteText DrawableText; protected Box HoverBackground; @@ -66,7 +64,6 @@ namespace osu.Game.Overlays.Toolbar private readonly SpriteText tooltip1; private readonly SpriteText tooltip2; protected FillFlowContainer Flow; - private SampleChannel sampleClick; public ToolbarButton() { @@ -136,27 +133,19 @@ namespace osu.Game.Overlays.Toolbar }; } - [BackgroundDependencyLoader] - private void load(AudioManager audio) - { - sampleClick = audio.Sample.Get(@"Menu/menuclick"); - } - protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) => true; protected override bool OnClick(InputState state) { - Action?.Invoke(); - sampleClick.Play(); HoverBackground.FlashColour(Color4.White.Opacity(100), 500, EasingTypes.OutQuint); - return true; + return base.OnClick(state); } protected override bool OnHover(InputState state) { HoverBackground.FadeIn(200); tooltipContainer.FadeIn(100); - return false; + return base.OnHover(state); } protected override void OnHoverLost(InputState state) diff --git a/osu.Game/Screens/Multiplayer/DrawableRoom.cs b/osu.Game/Screens/Multiplayer/DrawableRoom.cs index 71114dd3a3..620797aff6 100644 --- a/osu.Game/Screens/Multiplayer/DrawableRoom.cs +++ b/osu.Game/Screens/Multiplayer/DrawableRoom.cs @@ -11,13 +11,14 @@ using osu.Framework.Graphics.Shapes; using osu.Framework.Localisation; using osu.Game.Database; using osu.Game.Graphics; +using osu.Game.Graphics.Containers; using osu.Game.Graphics.Sprites; using osu.Game.Online.Multiplayer; using osu.Game.Users; namespace osu.Game.Screens.Multiplayer { - public class DrawableRoom : ClickableContainer + public class DrawableRoom : OsuClickableContainer { private const float content_padding = 5; private const float height = 90; diff --git a/osu.Game/Screens/Play/MenuOverlay.cs b/osu.Game/Screens/Play/MenuOverlay.cs index adfa1a736b..368c53f12f 100644 --- a/osu.Game/Screens/Play/MenuOverlay.cs +++ b/osu.Game/Screens/Play/MenuOverlay.cs @@ -191,12 +191,6 @@ namespace osu.Game.Screens.Play public class Button : DialogButton { - [BackgroundDependencyLoader] - private void load(AudioManager audio) - { - SampleHover = audio.Sample.Get(@"Menu/menuclick"); - SampleClick = audio.Sample.Get(@"Menu/menuback"); - } } } } diff --git a/osu.Game/Screens/Play/SkipButton.cs b/osu.Game/Screens/Play/SkipButton.cs index b38a9b4934..15d252d742 100644 --- a/osu.Game/Screens/Play/SkipButton.cs +++ b/osu.Game/Screens/Play/SkipButton.cs @@ -16,8 +16,8 @@ using osu.Game.Screens.Ranking; using OpenTK; using OpenTK.Graphics; using OpenTK.Input; -using osu.Framework.Audio.Sample; using osu.Framework.Graphics.Shapes; +using osu.Game.Graphics.Containers; namespace osu.Game.Screens.Play { @@ -175,16 +175,14 @@ namespace osu.Game.Screens.Play } } - private class Button : Container + private class Button : OsuClickableContainer { - public Action Action; private Color4 colourNormal; private Color4 colourHover; private Box box; private FillFlowContainer flow; private Box background; private AspectContainer aspect; - private SampleChannel activationSound; public Button() { @@ -194,8 +192,6 @@ namespace osu.Game.Screens.Play [BackgroundDependencyLoader] private void load(OsuColour colours, AudioManager audio) { - activationSound = audio.Sample.Get(@"Menu/menuhit"); - colourNormal = colours.Yellow; colourHover = colours.YellowDark; @@ -282,13 +278,9 @@ namespace osu.Game.Screens.Play protected override bool OnClick(InputState state) { - Action?.Invoke(); - - activationSound.Play(); - box.FlashColour(Color4.White, 500, EasingTypes.OutQuint); aspect.ScaleTo(1.2f, 2000, EasingTypes.OutQuint); - return true; + return base.OnClick(state); } } } diff --git a/osu.Game/Screens/Select/FooterButton.cs b/osu.Game/Screens/Select/FooterButton.cs index 9be940e06a..536bf3971a 100644 --- a/osu.Game/Screens/Select/FooterButton.cs +++ b/osu.Game/Screens/Select/FooterButton.cs @@ -6,15 +6,15 @@ using OpenTK; using OpenTK.Graphics; using OpenTK.Input; using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.Sprites; using osu.Framework.Input; using osu.Game.Graphics.Sprites; +using osu.Game.Graphics.Containers; namespace osu.Game.Screens.Select { - public class FooterButton : ClickableContainer + public class FooterButton : OsuClickableContainer { private static readonly Vector2 shearing = new Vector2(0.15f, 0); diff --git a/osu.Game/Screens/Select/Leaderboards/LeaderboardScore.cs b/osu.Game/Screens/Select/Leaderboards/LeaderboardScore.cs index 32e6d9630b..48de4c2d3a 100644 --- a/osu.Game/Screens/Select/Leaderboards/LeaderboardScore.cs +++ b/osu.Game/Screens/Select/Leaderboards/LeaderboardScore.cs @@ -13,10 +13,11 @@ using osu.Game.Rulesets.Mods; using osu.Game.Users; using osu.Framework; using osu.Game.Rulesets.Scoring; +using osu.Game.Graphics.Containers; namespace osu.Game.Screens.Select.Leaderboards { - public class LeaderboardScore : ClickableContainer, IStateful + public class LeaderboardScore : OsuClickableContainer, IStateful { public static readonly float HEIGHT = 60; diff --git a/osu.Game/Screens/Select/Options/BeatmapOptionsButton.cs b/osu.Game/Screens/Select/Options/BeatmapOptionsButton.cs index 942d3a6a32..d9314d09ee 100644 --- a/osu.Game/Screens/Select/Options/BeatmapOptionsButton.cs +++ b/osu.Game/Screens/Select/Options/BeatmapOptionsButton.cs @@ -11,10 +11,11 @@ using osu.Game.Graphics.Sprites; using OpenTK; using OpenTK.Graphics; using OpenTK.Input; +using osu.Game.Graphics.Containers; namespace osu.Game.Screens.Select.Options { - public class BeatmapOptionsButton : ClickableContainer + public class BeatmapOptionsButton : OsuClickableContainer { private const float width = 130; diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 64b81ddc6a..7be7812478 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -76,6 +76,7 @@ + From 28f0da606a69f534c2625e0e63b9bac04ded659a Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 28 Jun 2017 10:18:12 -0700 Subject: [PATCH 13/31] Add OsuFocusedOverlayContainer with predefined sounds. --- .../Containers/OsuFocusedOverlayContainer.cs | 38 +++++++++++++++++++ .../Overlays/Chat/ChannelSelectionOverlay.cs | 3 +- osu.Game/Overlays/ChatOverlay.cs | 3 +- osu.Game/Overlays/Dialog/PopupDialog.cs | 3 +- osu.Game/Overlays/DialogOverlay.cs | 3 +- osu.Game/Overlays/LoginOverlay.cs | 3 +- osu.Game/Overlays/MusicController.cs | 3 +- osu.Game/Overlays/NotificationManager.cs | 3 +- osu.Game/Overlays/SettingsOverlay.cs | 2 +- osu.Game/Overlays/WaveOverlayContainer.cs | 3 +- .../Select/Options/BeatmapOptionsOverlay.cs | 2 +- osu.Game/osu.Game.csproj | 1 + 12 files changed, 57 insertions(+), 10 deletions(-) create mode 100644 osu.Game/Graphics/Containers/OsuFocusedOverlayContainer.cs diff --git a/osu.Game/Graphics/Containers/OsuFocusedOverlayContainer.cs b/osu.Game/Graphics/Containers/OsuFocusedOverlayContainer.cs new file mode 100644 index 0000000000..0713fa1a52 --- /dev/null +++ b/osu.Game/Graphics/Containers/OsuFocusedOverlayContainer.cs @@ -0,0 +1,38 @@ +// Copyright (c) 2007-2017 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Allocation; +using osu.Framework.Audio; +using osu.Framework.Audio.Sample; +using osu.Framework.Graphics.Containers; + +namespace osu.Game.Graphics.Containers +{ + public class OsuFocusedOverlayContainer : FocusedOverlayContainer + { + private SampleChannel samplePopIn; + private SampleChannel samplePopOut; + + [BackgroundDependencyLoader] + private void load(AudioManager audio) + { + samplePopIn = audio.Sample.Get(@"UI/melodic-5"); + samplePopOut = audio.Sample.Get(@"UI/melodic-4"); + + StateChanged += OsuFocusedOverlayContainer_StateChanged; + } + + private void OsuFocusedOverlayContainer_StateChanged(VisibilityContainer arg1, Visibility arg2) + { + switch (arg2) + { + case Visibility.Visible: + samplePopIn?.Play(); + break; + case Visibility.Hidden: + samplePopOut?.Play(); + break; + } + } + } +} diff --git a/osu.Game/Overlays/Chat/ChannelSelectionOverlay.cs b/osu.Game/Overlays/Chat/ChannelSelectionOverlay.cs index 7c10c4fb9b..9f61d13813 100644 --- a/osu.Game/Overlays/Chat/ChannelSelectionOverlay.cs +++ b/osu.Game/Overlays/Chat/ChannelSelectionOverlay.cs @@ -16,10 +16,11 @@ using osu.Game.Graphics.Backgrounds; using osu.Game.Graphics.Sprites; using osu.Game.Graphics.UserInterface; using osu.Game.Online.Chat; +using osu.Game.Graphics.Containers; namespace osu.Game.Overlays.Chat { - public class ChannelSelectionOverlay : FocusedOverlayContainer + public class ChannelSelectionOverlay : OsuFocusedOverlayContainer { public static readonly float WIDTH_PADDING = 170; diff --git a/osu.Game/Overlays/ChatOverlay.cs b/osu.Game/Overlays/ChatOverlay.cs index 97c7907874..22852f21a6 100644 --- a/osu.Game/Overlays/ChatOverlay.cs +++ b/osu.Game/Overlays/ChatOverlay.cs @@ -22,10 +22,11 @@ using osu.Framework.Input; using osu.Game.Configuration; using osu.Game.Graphics; using osu.Game.Overlays.Chat; +using osu.Game.Graphics.Containers; namespace osu.Game.Overlays { - public class ChatOverlay : FocusedOverlayContainer, IOnlineComponent + public class ChatOverlay : OsuFocusedOverlayContainer, IOnlineComponent { private const float textbox_height = 60; private const float channel_selection_min_height = 0.3f; diff --git a/osu.Game/Overlays/Dialog/PopupDialog.cs b/osu.Game/Overlays/Dialog/PopupDialog.cs index 5edb48e136..39338ba3e1 100644 --- a/osu.Game/Overlays/Dialog/PopupDialog.cs +++ b/osu.Game/Overlays/Dialog/PopupDialog.cs @@ -15,10 +15,11 @@ using OpenTK; using OpenTK.Graphics; using OpenTK.Input; using osu.Framework.Graphics.Shapes; +using osu.Game.Graphics.Containers; namespace osu.Game.Overlays.Dialog { - public class PopupDialog : FocusedOverlayContainer + public class PopupDialog : OsuFocusedOverlayContainer { public static readonly float ENTER_DURATION = 500; public static readonly float EXIT_DURATION = 200; diff --git a/osu.Game/Overlays/DialogOverlay.cs b/osu.Game/Overlays/DialogOverlay.cs index 757781a4ab..f1a6bc1681 100644 --- a/osu.Game/Overlays/DialogOverlay.cs +++ b/osu.Game/Overlays/DialogOverlay.cs @@ -7,10 +7,11 @@ using osu.Framework.Graphics.Containers; using osu.Game.Overlays.Dialog; using OpenTK.Graphics; using osu.Framework.Graphics.Shapes; +using osu.Game.Graphics.Containers; namespace osu.Game.Overlays { - public class DialogOverlay : FocusedOverlayContainer + public class DialogOverlay : OsuFocusedOverlayContainer { private readonly Container dialogContainer; private PopupDialog currentDialog; diff --git a/osu.Game/Overlays/LoginOverlay.cs b/osu.Game/Overlays/LoginOverlay.cs index b688bafd4d..790530342f 100644 --- a/osu.Game/Overlays/LoginOverlay.cs +++ b/osu.Game/Overlays/LoginOverlay.cs @@ -8,10 +8,11 @@ using osu.Game.Graphics; using osu.Game.Overlays.Settings.Sections.General; using OpenTK.Graphics; using osu.Framework.Graphics.Shapes; +using osu.Game.Graphics.Containers; namespace osu.Game.Overlays { - internal class LoginOverlay : FocusedOverlayContainer + internal class LoginOverlay : OsuFocusedOverlayContainer { private LoginSettings settingsSection; diff --git a/osu.Game/Overlays/MusicController.cs b/osu.Game/Overlays/MusicController.cs index e1e920ec0f..61439a26e0 100644 --- a/osu.Game/Overlays/MusicController.cs +++ b/osu.Game/Overlays/MusicController.cs @@ -24,10 +24,11 @@ using osu.Framework.Threading; using osu.Game.Overlays.Music; using osu.Game.Graphics.UserInterface; using osu.Framework.Graphics.Shapes; +using osu.Game.Graphics.Containers; namespace osu.Game.Overlays { - public class MusicController : FocusedOverlayContainer + public class MusicController : OsuFocusedOverlayContainer { private const float player_height = 130; diff --git a/osu.Game/Overlays/NotificationManager.cs b/osu.Game/Overlays/NotificationManager.cs index 34690013df..382683cbcc 100644 --- a/osu.Game/Overlays/NotificationManager.cs +++ b/osu.Game/Overlays/NotificationManager.cs @@ -9,10 +9,11 @@ using osu.Framework.Graphics.Containers; using osu.Game.Overlays.Notifications; using OpenTK.Graphics; using osu.Framework.Graphics.Shapes; +using osu.Game.Graphics.Containers; namespace osu.Game.Overlays { - public class NotificationManager : FocusedOverlayContainer + public class NotificationManager : OsuFocusedOverlayContainer { private const float width = 320; diff --git a/osu.Game/Overlays/SettingsOverlay.cs b/osu.Game/Overlays/SettingsOverlay.cs index 88f4599383..093b7c8c26 100644 --- a/osu.Game/Overlays/SettingsOverlay.cs +++ b/osu.Game/Overlays/SettingsOverlay.cs @@ -15,7 +15,7 @@ using osu.Game.Overlays.Settings.Sections; namespace osu.Game.Overlays { - public class SettingsOverlay : FocusedOverlayContainer + public class SettingsOverlay : OsuFocusedOverlayContainer { internal const float CONTENT_MARGINS = 10; diff --git a/osu.Game/Overlays/WaveOverlayContainer.cs b/osu.Game/Overlays/WaveOverlayContainer.cs index e744f23a3a..1bb7813d90 100644 --- a/osu.Game/Overlays/WaveOverlayContainer.cs +++ b/osu.Game/Overlays/WaveOverlayContainer.cs @@ -8,10 +8,11 @@ using osu.Framework.Graphics.Containers; using osu.Framework.Graphics; using System; using osu.Framework.Graphics.Shapes; +using osu.Game.Graphics.Containers; namespace osu.Game.Overlays { - public abstract class WaveOverlayContainer : FocusedOverlayContainer + public abstract class WaveOverlayContainer : OsuFocusedOverlayContainer { protected const float APPEAR_DURATION = 800; protected const float DISAPPEAR_DURATION = 500; diff --git a/osu.Game/Screens/Select/Options/BeatmapOptionsOverlay.cs b/osu.Game/Screens/Select/Options/BeatmapOptionsOverlay.cs index a6ad56b86f..f18080d6f5 100644 --- a/osu.Game/Screens/Select/Options/BeatmapOptionsOverlay.cs +++ b/osu.Game/Screens/Select/Options/BeatmapOptionsOverlay.cs @@ -14,7 +14,7 @@ using osu.Game.Graphics.Containers; namespace osu.Game.Screens.Select.Options { - public class BeatmapOptionsOverlay : FocusedOverlayContainer + public class BeatmapOptionsOverlay : OsuFocusedOverlayContainer { private const float transition_duration = 500; private const float x_position = 0.2f; diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 7be7812478..06d4da663e 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -77,6 +77,7 @@ + From ee96d39b93eaaaade69541de50f09b22a704b9c0 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 28 Jun 2017 10:19:04 -0700 Subject: [PATCH 14/31] Shuffle sound samples around and make more conformant --- osu.Game/Graphics/UserInterface/OsuButton.cs | 17 ++++++++++- .../Graphics/UserInterface/OsuCheckbox.cs | 4 +-- .../UserInterface/OsuContextMenuItem.cs | 4 +-- .../Graphics/UserInterface/OsuSliderBar.cs | 2 +- osu.Game/Overlays/Chat/ChannelListItem.cs | 3 +- .../Dialog/PopupDialogCancelButton.cs | 2 -- .../Overlays/Dialog/PopupDialogOkButton.cs | 4 +-- osu.Game/Screens/Menu/Button.cs | 16 ++++++----- osu.Game/Screens/Menu/ButtonSystem.cs | 28 ++++++++++++------- osu.Game/Screens/Menu/OsuLogo.cs | 24 +++++++++------- osu.Game/Screens/OsuScreen.cs | 14 +++++++++- osu.Game/Screens/Play/HotkeyRetryOverlay.cs | 3 -- osu.Game/Screens/Play/Player.cs | 6 ++++ osu.Game/Screens/ScreenWhiteBox.cs | 6 ---- 14 files changed, 84 insertions(+), 49 deletions(-) diff --git a/osu.Game/Graphics/UserInterface/OsuButton.cs b/osu.Game/Graphics/UserInterface/OsuButton.cs index 7bd58d38a5..6814308cb4 100644 --- a/osu.Game/Graphics/UserInterface/OsuButton.cs +++ b/osu.Game/Graphics/UserInterface/OsuButton.cs @@ -3,6 +3,8 @@ using OpenTK.Graphics; using osu.Framework.Allocation; +using osu.Framework.Audio; +using osu.Framework.Audio.Sample; using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Shapes; @@ -18,6 +20,9 @@ namespace osu.Game.Graphics.UserInterface { private Box hover; + private SampleChannel sampleClick; + private SampleChannel sampleHover; + public OsuButton() { Height = 40; @@ -34,7 +39,7 @@ namespace osu.Game.Graphics.UserInterface public override bool HandleInput => Action != null; [BackgroundDependencyLoader] - private void load(OsuColour colours) + private void load(OsuColour colours, AudioManager audio) { if (Action == null) Colour = OsuColour.Gray(0.5f); @@ -60,10 +65,20 @@ namespace osu.Game.Graphics.UserInterface Alpha = 0, }, }); + + sampleClick = audio.Sample.Get(@"UI/generic-click"); + sampleHover = audio.Sample.Get(@"UI/generic-hover"); + } + + protected override bool OnClick(InputState state) + { + sampleClick?.Play(); + return base.OnClick(state); } protected override bool OnHover(InputState state) { + sampleHover?.Play(); hover.FadeIn(200); return base.OnHover(state); } diff --git a/osu.Game/Graphics/UserInterface/OsuCheckbox.cs b/osu.Game/Graphics/UserInterface/OsuCheckbox.cs index 198a01b5a4..68ff99e593 100644 --- a/osu.Game/Graphics/UserInterface/OsuCheckbox.cs +++ b/osu.Game/Graphics/UserInterface/OsuCheckbox.cs @@ -106,8 +106,8 @@ namespace osu.Game.Graphics.UserInterface [BackgroundDependencyLoader] private void load(AudioManager audio) { - sampleChecked = audio.Sample.Get(@"Checkbox/check-on"); - sampleUnchecked = audio.Sample.Get(@"Checkbox/check-off"); + sampleChecked = audio.Sample.Get(@"UI/check-on"); + sampleUnchecked = audio.Sample.Get(@"UI/check-off"); } } } diff --git a/osu.Game/Graphics/UserInterface/OsuContextMenuItem.cs b/osu.Game/Graphics/UserInterface/OsuContextMenuItem.cs index 769df18566..5d12dadf5f 100644 --- a/osu.Game/Graphics/UserInterface/OsuContextMenuItem.cs +++ b/osu.Game/Graphics/UserInterface/OsuContextMenuItem.cs @@ -65,8 +65,8 @@ namespace osu.Game.Graphics.UserInterface [BackgroundDependencyLoader] private void load(AudioManager audio) { - sampleHover = audio.Sample.Get(@"Menu/menuclick"); - sampleClick = audio.Sample.Get(@"Menu/menuback"); + sampleHover = audio.Sample.Get(@"UI/generic-hover"); + sampleClick = audio.Sample.Get(@"UI/generic-click"); BackgroundColour = Color4.Transparent; BackgroundColourHover = OsuColour.FromHex(@"172023"); diff --git a/osu.Game/Graphics/UserInterface/OsuSliderBar.cs b/osu.Game/Graphics/UserInterface/OsuSliderBar.cs index 4f0ac28731..673a23afac 100644 --- a/osu.Game/Graphics/UserInterface/OsuSliderBar.cs +++ b/osu.Game/Graphics/UserInterface/OsuSliderBar.cs @@ -100,7 +100,7 @@ namespace osu.Game.Graphics.UserInterface [BackgroundDependencyLoader] private void load(AudioManager audio, OsuColour colours) { - sample = audio.Sample.Get(@"Sliderbar/sliderbar"); + sample = audio.Sample.Get(@"UI/sliderbar-notch"); AccentColour = colours.Pink; } diff --git a/osu.Game/Overlays/Chat/ChannelListItem.cs b/osu.Game/Overlays/Chat/ChannelListItem.cs index 9aa11cdd4f..aca65bbc17 100644 --- a/osu.Game/Overlays/Chat/ChannelListItem.cs +++ b/osu.Game/Overlays/Chat/ChannelListItem.cs @@ -12,10 +12,11 @@ using osu.Framework.Input; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; using osu.Game.Online.Chat; +using osu.Game.Graphics.Containers; namespace osu.Game.Overlays.Chat { - public class ChannelListItem : ClickableContainer, IFilterable + public class ChannelListItem : OsuClickableContainer, IFilterable { private const float width_padding = 5; private const float channel_width = 150; diff --git a/osu.Game/Overlays/Dialog/PopupDialogCancelButton.cs b/osu.Game/Overlays/Dialog/PopupDialogCancelButton.cs index 1449577b21..28b6e1b5fb 100644 --- a/osu.Game/Overlays/Dialog/PopupDialogCancelButton.cs +++ b/osu.Game/Overlays/Dialog/PopupDialogCancelButton.cs @@ -13,8 +13,6 @@ namespace osu.Game.Overlays.Dialog private void load(OsuColour colours, AudioManager audio) { ButtonColour = colours.Blue; - SampleHover = audio.Sample.Get(@"Menu/menuclick"); - SampleClick = audio.Sample.Get(@"Menu/menuback"); } } } diff --git a/osu.Game/Overlays/Dialog/PopupDialogOkButton.cs b/osu.Game/Overlays/Dialog/PopupDialogOkButton.cs index 46bf3debc4..8bc8ad76b9 100644 --- a/osu.Game/Overlays/Dialog/PopupDialogOkButton.cs +++ b/osu.Game/Overlays/Dialog/PopupDialogOkButton.cs @@ -10,11 +10,9 @@ namespace osu.Game.Overlays.Dialog public class PopupDialogOkButton : PopupDialogButton { [BackgroundDependencyLoader] - private void load(OsuColour colours, AudioManager audio) + private void load(OsuColour colours) { ButtonColour = colours.Pink; - SampleHover = audio.Sample.Get(@"Menu/menuclick"); - SampleClick = audio.Sample.Get(@"Menu/menu-play-click"); } } } diff --git a/osu.Game/Screens/Menu/Button.cs b/osu.Game/Screens/Menu/Button.cs index cdff79c94f..3e9f51ebe9 100644 --- a/osu.Game/Screens/Menu/Button.cs +++ b/osu.Game/Screens/Menu/Button.cs @@ -30,16 +30,17 @@ namespace osu.Game.Screens.Menu private readonly Container box; private readonly Box boxHoverLayer; private readonly TextAwesome icon; - private readonly string internalName; + private readonly string sampleName; private readonly Action clickAction; private readonly Key triggerKey; private SampleChannel sampleClick; + private SampleChannel sampleHover; public override bool Contains(Vector2 screenSpacePos) => box.Contains(screenSpacePos); - public Button(string text, string internalName, FontAwesome symbol, Color4 colour, Action clickAction = null, float extraWidth = 0, Key triggerKey = Key.Unknown) + public Button(string text, string sampleName, FontAwesome symbol, Color4 colour, Action clickAction = null, float extraWidth = 0, Key triggerKey = Key.Unknown) { - this.internalName = internalName; + this.sampleName = sampleName; this.clickAction = clickAction; this.triggerKey = triggerKey; @@ -120,8 +121,7 @@ namespace osu.Game.Screens.Menu { if (State != ButtonState.Expanded) return true; - //if (OsuGame.Instance.IsActive) - // Game.Audio.PlaySamplePositional($@"menu-{internalName}-hover", @"menuclick"); + sampleHover?.Play(); box.ScaleTo(new Vector2(1.5f, 1), 500, EasingTypes.OutElastic); @@ -222,7 +222,9 @@ namespace osu.Game.Screens.Menu [BackgroundDependencyLoader] private void load(AudioManager audio) { - sampleClick = audio.Sample.Get($@"Menu/menu-{internalName}-click") ?? audio.Sample.Get(internalName.Contains(@"back") ? @"Menu/menuback" : @"Menu/menuhit"); + sampleHover = audio.Sample.Get(@"Menu/hover"); + if (!string.IsNullOrEmpty(sampleName)) + sampleClick = audio.Sample.Get($@"Menu/{sampleName}"); } protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) @@ -259,7 +261,7 @@ namespace osu.Game.Screens.Menu private void trigger() { - sampleClick.Play(); + sampleClick?.Play(); clickAction?.Invoke(); diff --git a/osu.Game/Screens/Menu/ButtonSystem.cs b/osu.Game/Screens/Menu/ButtonSystem.cs index 82b7335a9b..9ba16ab1ca 100644 --- a/osu.Game/Screens/Menu/ButtonSystem.cs +++ b/osu.Game/Screens/Menu/ButtonSystem.cs @@ -15,6 +15,8 @@ using osu.Game.Overlays.Toolbar; using OpenTK; using OpenTK.Graphics; using OpenTK.Input; +using osu.Framework.Audio.Sample; +using osu.Framework.Audio; namespace osu.Game.Screens.Menu { @@ -51,6 +53,8 @@ namespace osu.Game.Screens.Menu private readonly List