diff --git a/osu.Game/GameModes/Menu/ButtonSystem.cs b/osu.Game/GameModes/Menu/ButtonSystem.cs index 2bc2913756..b607d65df6 100644 --- a/osu.Game/GameModes/Menu/ButtonSystem.cs +++ b/osu.Game/GameModes/Menu/ButtonSystem.cs @@ -133,7 +133,7 @@ namespace osu.Game.GameModes.Menu return true; } - return true; + return false; } private void onPlay() diff --git a/osu.Game/VolumeControl.cs b/osu.Game/Graphics/UserInterface/Volume/VolumeControl.cs similarity index 69% rename from osu.Game/VolumeControl.cs rename to osu.Game/Graphics/UserInterface/Volume/VolumeControl.cs index ca1c27198b..de4c441336 100644 --- a/osu.Game/VolumeControl.cs +++ b/osu.Game/Graphics/UserInterface/Volume/VolumeControl.cs @@ -1,53 +1,52 @@ -using osu.Framework; +using System; +using osu.Framework; using osu.Framework.Configuration; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Input; +using osu.Framework.Threading; using OpenTK; -using osu.Framework.Graphics.Primitives; -namespace osu.Game +namespace osu.Game.Graphics.UserInterface.Volume { - internal class VolumeControl : Container + internal class VolumeControl : OverlayContainer { - private FlowContainer volumeMetersContainer; - private VolumeMeter volumeMeterMaster; public BindableDouble VolumeGlobal { get; set; } public BindableDouble VolumeSample { get; set; } public BindableDouble VolumeTrack { get; set; } + private VolumeMeter volumeMeterMaster; + public override bool Contains(Vector2 screenSpacePos) => true; - private void volumeChanged(object sender, System.EventArgs e) + private void volumeChanged(object sender, EventArgs e) { - appear(); - - Anchor = Anchor.BottomRight; - Origin = Anchor.BottomRight; + Show(); + schedulePopOut(); } public VolumeControl() { AutoSizeAxes = Axes.Both; + Anchor = Anchor.BottomRight; + Origin = Anchor.BottomRight; } public override void Load(BaseGame game) { - base.Load(game); VolumeGlobal.ValueChanged += volumeChanged; VolumeSample.ValueChanged += volumeChanged; VolumeTrack.ValueChanged += volumeChanged; Children = new Drawable[] { - volumeMetersContainer = new FlowContainer + new FlowContainer { AutoSizeAxes = Axes.Both, Anchor = Anchor.BottomRight, Origin = Anchor.BottomRight, Position = new Vector2(10, 30), Spacing = new Vector2(15,0), - Alpha = 0, Children = new Drawable[] { volumeMeterMaster = new VolumeMeter("Master", VolumeGlobal), @@ -56,6 +55,8 @@ namespace osu.Game } } }; + + base.Load(game); } protected override void Dispose(bool isDisposing) @@ -68,22 +69,42 @@ namespace osu.Game protected override bool OnWheelDown(InputState state) { + if (!IsVisible) + return false; + volumeMeterMaster.TriggerWheelDown(state); return true; } protected override bool OnWheelUp(InputState state) { + if (!IsVisible) + return false; + volumeMeterMaster.TriggerWheelUp(state); return true; } - private void appear() + ScheduledDelegate popOutDelegate; + + protected override void PopIn() { - volumeMetersContainer.ClearTransformations(); - volumeMetersContainer.FadeIn(100); - volumeMetersContainer.Delay(1000); - volumeMetersContainer.FadeOut(100); + ClearTransformations(); + FadeIn(100); + + schedulePopOut(); + } + + protected override void PopOut() + { + FadeOut(100); + } + + private void schedulePopOut() + { + popOutDelegate?.Cancel(); + Delay(1000); + popOutDelegate = Schedule(Hide); } } } \ No newline at end of file diff --git a/osu.Game/Graphics/UserInterface/Volume/VolumeControlReceptor.cs b/osu.Game/Graphics/UserInterface/Volume/VolumeControlReceptor.cs new file mode 100644 index 0000000000..1601c2a883 --- /dev/null +++ b/osu.Game/Graphics/UserInterface/Volume/VolumeControlReceptor.cs @@ -0,0 +1,42 @@ +//Copyright (c) 2007-2016 ppy Pty Ltd . +//Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Input; +using OpenTK.Input; +using OpenTK; + +namespace osu.Game.Graphics.UserInterface.Volume +{ + class VolumeControlReceptor : Container + { + public Action ActivateRequested; + + protected override bool OnWheelDown(InputState state) + { + ActivateRequested?.Invoke(); + return true; + } + + protected override bool OnWheelUp(InputState state) + { + ActivateRequested?.Invoke(); + return true; + } + + protected override bool OnKeyDown(InputState state, KeyDownEventArgs args) + { + switch (args.Key) + { + case Key.Up: + case Key.Down: + ActivateRequested?.Invoke(); + return true; + } + + return base.OnKeyDown(state, args); + } + } +} diff --git a/osu.Game/VolumeMeter.cs b/osu.Game/Graphics/UserInterface/Volume/VolumeMeter.cs similarity index 92% rename from osu.Game/VolumeMeter.cs rename to osu.Game/Graphics/UserInterface/Volume/VolumeMeter.cs index cfebf2e32c..b88d819afd 100644 --- a/osu.Game/VolumeMeter.cs +++ b/osu.Game/Graphics/UserInterface/Volume/VolumeMeter.cs @@ -1,4 +1,5 @@ -using osu.Framework.Configuration; +using osu.Framework; +using osu.Framework.Configuration; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Sprites; @@ -6,9 +7,8 @@ using osu.Framework.Graphics.Transformations; using osu.Framework.Input; using OpenTK; using OpenTK.Graphics; -using osu.Framework; -namespace osu.Game +namespace osu.Game.Graphics.UserInterface.Volume { internal class VolumeMeter : Container { diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index b0a4ec94e8..d8511036cc 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -23,6 +23,7 @@ using OpenTK.Input; using System.IO; using osu.Game.Beatmaps.IO; using osu.Framework.Logging; +using osu.Game.Graphics.UserInterface.Volume; namespace osu.Game { @@ -40,6 +41,8 @@ namespace osu.Game private string[] args; private IpcChannel BeatmapIPC; + private VolumeControl volume; + public Bindable PlayMode; public OsuGame(string[] args) @@ -92,6 +95,11 @@ namespace osu.Game Audio.VolumeTrack.Weld(Config.GetBindable(OsuConfig.VolumeMusic)); Add(new Drawable[] { + new VolumeControlReceptor + { + RelativeSizeAxes = Axes.Both, + ActivateRequested = delegate { volume.Show(); } + }, intro = new Intro(), Toolbar = new Toolbar { @@ -100,7 +108,7 @@ namespace osu.Game OnPlayModeChange = delegate (PlayMode m) { PlayMode.Value = m; }, }, Chat = new ChatConsole(API), - new VolumeControl + volume = new VolumeControl { VolumeGlobal = Audio.Volume, VolumeSample = Audio.VolumeSample, diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 545d777098..badd7a3221 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -138,6 +138,7 @@ + @@ -176,14 +177,14 @@ - + - +