2019-01-24 16:43:03 +08:00
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
2018-05-10 16:07:19 +08:00
using osu.Framework.Allocation ;
2019-06-04 17:37:26 +08:00
using osu.Framework.Audio ;
using osu.Framework.Bindables ;
2018-05-10 16:07:19 +08:00
using osu.Framework.Graphics ;
using osu.Framework.Graphics.Shapes ;
2018-05-22 00:44:06 +08:00
using osu.Game.Graphics.Containers ;
2018-11-20 15:51:59 +08:00
using osuTK.Graphics ;
2018-05-10 16:07:19 +08:00
namespace osu.Game.Overlays
{
/// <summary>
/// An overlay which will display a black screen that dims over a period before confirming an exit action.
2019-04-25 16:36:17 +08:00
/// Action is BYO (derived class will need to call <see cref="HoldToConfirmContainer.BeginConfirm"/> and <see cref="HoldToConfirmContainer.AbortConfirm"/> from a user event).
2018-05-10 16:07:19 +08:00
/// </summary>
2018-05-22 15:04:36 +08:00
public abstract class HoldToConfirmOverlay : HoldToConfirmContainer
2018-05-10 16:07:19 +08:00
{
private Box overlay ;
2019-06-04 17:37:26 +08:00
private readonly BindableDouble audioVolume = new BindableDouble ( 1 ) ;
[Resolved]
private AudioManager audio { get ; set ; }
2021-01-18 17:22:21 +08:00
private readonly float finalFillAlpha ;
protected HoldToConfirmOverlay ( float finalFillAlpha = 1 )
{
this . finalFillAlpha = finalFillAlpha ;
}
2018-05-10 16:07:19 +08:00
[BackgroundDependencyLoader]
private void load ( )
{
RelativeSizeAxes = Axes . Both ;
AlwaysPresent = true ;
Children = new Drawable [ ]
{
overlay = new Box
{
Alpha = 0 ,
Colour = Color4 . Black ,
RelativeSizeAxes = Axes . Both ,
}
} ;
2019-06-04 17:37:26 +08:00
Progress . ValueChanged + = p = >
{
2021-10-27 12:04:41 +08:00
double target = p . NewValue * finalFillAlpha ;
2021-01-18 17:22:21 +08:00
audioVolume . Value = 1 - target ;
overlay . Alpha = ( float ) target ;
2019-06-04 17:37:26 +08:00
} ;
audio . Tracks . AddAdjustment ( AdjustableProperty . Volume , audioVolume ) ;
}
protected override void Dispose ( bool isDisposing )
{
2019-09-19 13:04:51 +08:00
audio ? . Tracks . RemoveAdjustment ( AdjustableProperty . Volume , audioVolume ) ;
2019-06-04 17:37:26 +08:00
base . Dispose ( isDisposing ) ;
2018-05-10 16:07:19 +08:00
}
}
}