mirror of
https://github.com/ppy/osu.git
synced 2024-12-15 14:02:55 +08:00
4f6263ef86
This is important when using dynamic compiling to rapidly iterate. Until we actually split projects out into pieces (like the abstract ruleset project we have talked about) there is no advantage to using internal in the osu! game code.
123 lines
3.8 KiB
C#
123 lines
3.8 KiB
C#
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
|
|
|
using osu.Framework.Graphics;
|
|
using osu.Framework.Graphics.Containers;
|
|
using osu.Framework.Threading;
|
|
using OpenTK;
|
|
using osu.Framework.Audio;
|
|
using osu.Framework.Allocation;
|
|
using osu.Game.Input.Bindings;
|
|
|
|
namespace osu.Game.Graphics.UserInterface.Volume
|
|
{
|
|
public class VolumeControl : OverlayContainer
|
|
{
|
|
private readonly VolumeMeter volumeMeterMaster;
|
|
|
|
protected override bool BlockPassThroughMouse => false;
|
|
|
|
public VolumeControl()
|
|
{
|
|
AutoSizeAxes = Axes.Both;
|
|
Anchor = Anchor.BottomRight;
|
|
Origin = Anchor.BottomRight;
|
|
|
|
Children = new Drawable[]
|
|
{
|
|
new FillFlowContainer
|
|
{
|
|
AutoSizeAxes = Axes.Both,
|
|
Anchor = Anchor.BottomRight,
|
|
Origin = Anchor.BottomRight,
|
|
Margin = new MarginPadding { Left = 10, Right = 10, Top = 30, Bottom = 30 },
|
|
Spacing = new Vector2(15, 0),
|
|
Children = new Drawable[]
|
|
{
|
|
volumeMeterMaster = new VolumeMeter("Master"),
|
|
volumeMeterEffect = new VolumeMeter("Effects"),
|
|
volumeMeterMusic = new VolumeMeter("Music")
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
protected override void LoadComplete()
|
|
{
|
|
base.LoadComplete();
|
|
|
|
volumeMeterMaster.Bindable.ValueChanged += volumeChanged;
|
|
volumeMeterEffect.Bindable.ValueChanged += volumeChanged;
|
|
volumeMeterMusic.Bindable.ValueChanged += volumeChanged;
|
|
}
|
|
|
|
protected override void Dispose(bool isDisposing)
|
|
{
|
|
base.Dispose(isDisposing);
|
|
|
|
volumeMeterMaster.Bindable.ValueChanged -= volumeChanged;
|
|
volumeMeterEffect.Bindable.ValueChanged -= volumeChanged;
|
|
volumeMeterMusic.Bindable.ValueChanged -= volumeChanged;
|
|
}
|
|
|
|
public bool Adjust(GlobalAction action)
|
|
{
|
|
switch (action)
|
|
{
|
|
case GlobalAction.DecreaseVolume:
|
|
if (State == Visibility.Hidden)
|
|
Show();
|
|
else
|
|
volumeMeterMaster.Decrease();
|
|
return true;
|
|
case GlobalAction.IncreaseVolume:
|
|
if (State == Visibility.Hidden)
|
|
Show();
|
|
else
|
|
volumeMeterMaster.Increase();
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
private void volumeChanged(double newVolume)
|
|
{
|
|
Show();
|
|
schedulePopOut();
|
|
}
|
|
|
|
[BackgroundDependencyLoader]
|
|
private void load(AudioManager audio)
|
|
{
|
|
volumeMeterMaster.Bindable.BindTo(audio.Volume);
|
|
volumeMeterEffect.Bindable.BindTo(audio.VolumeSample);
|
|
volumeMeterMusic.Bindable.BindTo(audio.VolumeTrack);
|
|
}
|
|
|
|
private ScheduledDelegate popOutDelegate;
|
|
|
|
private readonly VolumeMeter volumeMeterEffect;
|
|
private readonly VolumeMeter volumeMeterMusic;
|
|
|
|
protected override void PopIn()
|
|
{
|
|
ClearTransforms();
|
|
this.FadeIn(100);
|
|
|
|
schedulePopOut();
|
|
}
|
|
|
|
protected override void PopOut()
|
|
{
|
|
this.FadeOut(100);
|
|
}
|
|
|
|
private void schedulePopOut()
|
|
{
|
|
popOutDelegate?.Cancel();
|
|
this.Delay(1000).Schedule(Hide, out popOutDelegate);
|
|
}
|
|
}
|
|
}
|