diff --git a/osu.Game/VolumeControl.cs b/osu.Game/VolumeControl.cs index 0ea9aab67e..79f8712c31 100644 --- a/osu.Game/VolumeControl.cs +++ b/osu.Game/VolumeControl.cs @@ -1,19 +1,18 @@ -using System; -using OpenTK; -using OpenTK.Graphics; -using osu.Framework.Configuration; +using osu.Framework.Configuration; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; -using osu.Framework.Graphics.Drawables; using osu.Framework.Input; using osu.Framework.Graphics.Transformations; +using OpenTK; namespace osu.Game { internal class VolumeControl : Container { - private Box meterFill; - private Container meterContainer; + private FlowContainer volumeMetersContainer; + private VolumeMeter VolumeMeterGlobal; + private VolumeMeter VolumeMeterSample; + private VolumeMeter VolumeMeterTrack; public BindableDouble VolumeGlobal { get; set; } public BindableDouble VolumeSample { get; set; } @@ -29,41 +28,17 @@ namespace osu.Game base.Load(); Children = new Drawable[] { - meterContainer = new Container { + volumeMetersContainer = new FlowContainer() { Anchor = Anchor.BottomRight, Origin = Anchor.BottomRight, - Position = new Vector2(10, 10), - Size = new Vector2(40, 180), + Position = new Vector2(10, 30), Alpha = 0, + Padding = new Vector2(15,0), Children = new Drawable[] { - new Box - { - Colour = Color4.Black, - RelativeSizeAxes = Axes.Both, - }, - new Container - { - RelativeSizeAxes = Axes.Both, - Size = new Vector2(0.5f, 0.9f), - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - Children = new Drawable[] - { - new Box - { - Colour = Color4.DarkGray, - RelativeSizeAxes = Axes.Both, - }, - meterFill = new Box - { - Colour = Color4.White, - RelativeSizeAxes = Axes.Both, - Origin = Anchor.BottomCentre, - Anchor = Anchor.BottomCentre - }, - } - } + VolumeMeterGlobal = new VolumeMeter("Master"), + VolumeMeterSample= new VolumeMeter("Effects"), + VolumeMeterTrack= new VolumeMeter("Music") } } }; @@ -75,7 +50,19 @@ namespace osu.Game { appear(); - VolumeGlobal.Value -= 0.05f; + if (VolumeMeterSample.Contains(state.Mouse.Position)) + { + VolumeSample.Value -= 0.05f; + } + else if (VolumeMeterTrack.Contains(state.Mouse.Position)) + { + VolumeTrack.Value -= 0.05f; + } + else + { + VolumeGlobal.Value -= 0.05f; + } + updateFill(); return base.OnWheelDown(state); @@ -85,7 +72,19 @@ namespace osu.Game { appear(); - VolumeGlobal.Value += 0.05f; + if (VolumeMeterSample.Contains(state.Mouse.Position)) + { + VolumeSample.Value += 0.05f; + } + else if (VolumeMeterTrack.Contains(state.Mouse.Position)) + { + VolumeTrack.Value += 0.05f; + } + else + { + VolumeGlobal.Value += 0.05f; + } + updateFill(); return base.OnWheelUp(state); @@ -93,15 +92,17 @@ namespace osu.Game private void updateFill() { - meterFill.ScaleTo(new Vector2(1, (float)VolumeGlobal.Value), 300, EasingTypes.OutQuint); + VolumeMeterGlobal.MeterFill.ScaleTo(new Vector2(1, (float)VolumeGlobal.Value), 300, EasingTypes.OutQuint); + VolumeMeterSample.MeterFill.ScaleTo(new Vector2(1, (float)VolumeSample.Value), 300, EasingTypes.OutQuint); + VolumeMeterTrack.MeterFill.ScaleTo(new Vector2(1, (float)VolumeTrack.Value), 300, EasingTypes.OutQuint); } private void appear() { - meterContainer.ClearTransformations(); - meterContainer.FadeIn(100); - meterContainer.Delay(1000); - meterContainer.FadeOut(100); + volumeMetersContainer.ClearTransformations(); + volumeMetersContainer.FadeIn(100); + volumeMetersContainer.Delay(1000); + volumeMetersContainer.FadeOut(100); } } } \ No newline at end of file diff --git a/osu.Game/VolumeMeter.cs b/osu.Game/VolumeMeter.cs new file mode 100644 index 0000000000..9c437e59ae --- /dev/null +++ b/osu.Game/VolumeMeter.cs @@ -0,0 +1,49 @@ +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Drawables; +using osu.Framework.Graphics.Sprites; +using OpenTK; +using OpenTK.Graphics; + +namespace osu.Game +{ + internal class VolumeMeter : Container + { + public Box MeterFill { get; set; } + public VolumeMeter(string meterName) + { + Size = new Vector2(40, 180); + Children = new Drawable[] + { + new Box + { + Colour = Color4.Black, + RelativeSizeAxes = Axes.Both, + }, + new Container + { + RelativeSizeAxes = Axes.Both, + Size = new Vector2(0.5f, 0.9f), + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Children = new Drawable[] + { + new Box + { + Colour = Color4.DarkGray, + RelativeSizeAxes = Axes.Both, + }, + MeterFill = new Box + { + Colour = Color4.White, + RelativeSizeAxes = Axes.Both, + Origin = Anchor.BottomCentre, + Anchor = Anchor.BottomCentre + }, + } + }, + new SpriteText {Text = meterName, Anchor = Anchor.BottomCentre,Origin = Anchor.BottomCentre,Position = new Vector2(0,-20)} + }; + } + } +} \ No newline at end of file diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 7852d68e33..e6cc35ee08 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -133,6 +133,7 @@ +