46 lines
1.1 KiB
C#
46 lines
1.1 KiB
C#
|
using Godot;
|
||
|
|
||
|
namespace SupaLidlGame.Audio;
|
||
|
|
||
|
public sealed partial class ManagedAudioPlayer : AudioStreamPlayer
|
||
|
{
|
||
|
private Tween _tween;
|
||
|
|
||
|
public bool IsDead { get; set; }
|
||
|
|
||
|
private Tween GetNewTween()
|
||
|
{
|
||
|
if (_tween is not null && IsInstanceValid(_tween))
|
||
|
{
|
||
|
_tween.Kill();
|
||
|
}
|
||
|
|
||
|
return _tween = GetTree().CreateTween().BindNode(this);
|
||
|
}
|
||
|
|
||
|
public void FadeOut(float time, bool kill = false, bool pause = false)
|
||
|
{
|
||
|
GetNewTween();
|
||
|
_tween.TweenProperty(this, "volume_db", -80, time);
|
||
|
if (kill)
|
||
|
{
|
||
|
IsDead = true;
|
||
|
_tween.TweenCallback(Callable.From(QueueFree));
|
||
|
}
|
||
|
else if (pause)
|
||
|
{
|
||
|
_tween.TweenCallback(Callable.From(() => StreamPaused = true));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void FadeIn(float time, bool unpause = false)
|
||
|
{
|
||
|
GetNewTween();
|
||
|
_tween.TweenProperty(this, "volume_db", 0, time);
|
||
|
if (unpause)
|
||
|
{
|
||
|
_tween.TweenCallback(Callable.From(() => StreamPaused = false));
|
||
|
}
|
||
|
}
|
||
|
}
|