From e51477bbc418e1f941195f9336e961cf834951f3 Mon Sep 17 00:00:00 2001 From: flustix Date: Tue, 27 Aug 2024 15:38:30 +0200 Subject: [PATCH] allow pausing music in a multi lobby --- fluXis.Game/FluXisGame.cs | 29 +++++++++---------- fluXis.Game/Overlay/Music/MusicPlayer.cs | 2 +- fluXis.Game/Screens/FluXisScreen.cs | 1 + fluXis.Game/Screens/FluXisScreenStack.cs | 1 + .../Screens/Multiplayer/MultiSubScreen.cs | 1 + .../Screens/Multiplayer/MultiplayerScreen.cs | 1 + .../SubScreens/Open/Lobby/MultiLobby.cs | 3 +- 7 files changed, 20 insertions(+), 18 deletions(-) diff --git a/fluXis.Game/FluXisGame.cs b/fluXis.Game/FluXisGame.cs index a1fc79e8..8ec54b01 100644 --- a/fluXis.Game/FluXisGame.cs +++ b/fluXis.Game/FluXisGame.cs @@ -392,23 +392,20 @@ public bool OnPressed(KeyBindingPressEvent e) return true; } - if (screenStack.AllowMusicControl) + switch (e.Action) { - switch (e.Action) - { - case FluXisGlobalKeybind.MusicPause: - if (globalClock.IsRunning) globalClock.Stop(); - else globalClock.Start(); - return true; - - case FluXisGlobalKeybind.MusicPrevious: - PreviousSong(); - return true; - - case FluXisGlobalKeybind.MusicNext: - NextSong(); - return true; - } + case FluXisGlobalKeybind.MusicPause when screenStack.AllowMusicPausing: + if (globalClock.IsRunning) globalClock.Stop(); + else globalClock.Start(); + return true; + + case FluXisGlobalKeybind.MusicPrevious when screenStack.AllowMusicControl: + PreviousSong(); + return true; + + case FluXisGlobalKeybind.MusicNext when screenStack.AllowMusicControl: + NextSong(); + return true; } return false; diff --git a/fluXis.Game/Overlay/Music/MusicPlayer.cs b/fluXis.Game/Overlay/Music/MusicPlayer.cs index 73e6c3ea..f9ed189c 100644 --- a/fluXis.Game/Overlay/Music/MusicPlayer.cs +++ b/fluXis.Game/Overlay/Music/MusicPlayer.cs @@ -190,7 +190,7 @@ private void load() Icon = FontAwesome6.Solid.Play, Action = () => { - if (!screens.AllowMusicControl) + if (!screens.AllowMusicPausing) return; if (globalClock.IsRunning) diff --git a/fluXis.Game/Screens/FluXisScreen.cs b/fluXis.Game/Screens/FluXisScreen.cs index d8dc00d4..d9bd0672 100644 --- a/fluXis.Game/Screens/FluXisScreen.cs +++ b/fluXis.Game/Screens/FluXisScreen.cs @@ -15,6 +15,7 @@ public partial class FluXisScreen : Screen public virtual float BackgroundDim => 0.25f; public virtual float BackgroundBlur => 0f; public virtual bool AllowMusicControl => true; + public virtual bool AllowMusicPausing => AllowMusicControl; public virtual bool ShowCursor => true; public virtual bool ApplyValuesAfterLoad => false; public virtual bool AllowExit => true; diff --git a/fluXis.Game/Screens/FluXisScreenStack.cs b/fluXis.Game/Screens/FluXisScreenStack.cs index 47ee38a3..16033c26 100644 --- a/fluXis.Game/Screens/FluXisScreenStack.cs +++ b/fluXis.Game/Screens/FluXisScreenStack.cs @@ -20,6 +20,7 @@ public partial class FluXisScreenStack : ScreenStack private Toolbar toolbar { get; set; } public bool AllowMusicControl => CurrentScreen is FluXisScreen { AllowMusicControl: true }; + public bool AllowMusicPausing => CurrentScreen is FluXisScreen { AllowMusicPausing: true }; private Bindable activity { get; } = new(); private Bindable allowOverlays { get; } = new(); diff --git a/fluXis.Game/Screens/Multiplayer/MultiSubScreen.cs b/fluXis.Game/Screens/Multiplayer/MultiSubScreen.cs index 83794d71..1bd1e4b7 100644 --- a/fluXis.Game/Screens/Multiplayer/MultiSubScreen.cs +++ b/fluXis.Game/Screens/Multiplayer/MultiSubScreen.cs @@ -26,6 +26,7 @@ public partial class MultiSubScreen : Screen, IKeyBindingHandler Activity => MultiScreen.Activity; protected virtual UserActivity InitialActivity => new UserActivity.MenuGeneral(); + public virtual bool AllowMusicPausing => false; private Container titleContainer; private Box titleLine; diff --git a/fluXis.Game/Screens/Multiplayer/MultiplayerScreen.cs b/fluXis.Game/Screens/Multiplayer/MultiplayerScreen.cs index ccec0999..922b3c21 100644 --- a/fluXis.Game/Screens/Multiplayer/MultiplayerScreen.cs +++ b/fluXis.Game/Screens/Multiplayer/MultiplayerScreen.cs @@ -16,6 +16,7 @@ public partial class MultiplayerScreen : FluXisScreen public override float BackgroundDim => .5f; public override float BackgroundBlur => .2f; public override bool AllowMusicControl => false; + public override bool AllowMusicPausing => screenStack?.CurrentScreen is MultiSubScreen { AllowMusicPausing: true }; public override bool AllowExit => canExit(); [Resolved] diff --git a/fluXis.Game/Screens/Multiplayer/SubScreens/Open/Lobby/MultiLobby.cs b/fluXis.Game/Screens/Multiplayer/SubScreens/Open/Lobby/MultiLobby.cs index b97b07d0..b39f8fa3 100644 --- a/fluXis.Game/Screens/Multiplayer/SubScreens/Open/Lobby/MultiLobby.cs +++ b/fluXis.Game/Screens/Multiplayer/SubScreens/Open/Lobby/MultiLobby.cs @@ -35,6 +35,7 @@ public partial class MultiLobby : MultiSubScreen public override string SubTitle => "Lobby"; protected override UserActivity InitialActivity => new UserActivity.MultiLobby(Room); + public override bool AllowMusicPausing => true; [Resolved] private MapStore mapStore { get; set; } @@ -216,7 +217,7 @@ protected override void Dispose(bool isDisposing) private void onDisconnect() { - if (MultiScreen.IsCurrentScreen()) + if (IsCurrentScreen) { clock.Stop(); panels.Content = new DisconnectedPanel(() =>