FadingPanel.cs
using Sandbox;
using System;
namespace FadingScreens
{
public partial class FadingPanel : PanelComponent
{
bool IsFading;
float Current;
float Duration;
Color ColorFrom = Color.Transparent;
Color ColorTo = Color.Transparent;
Action OnFadingDone;
Color GetColor()
{
return Color.Lerp(ColorFrom, ColorTo, Current / Duration);
}
public void Fade( float duration, Color colorFrom, Color colorTo, Action onFadingComplete )
{
Duration = duration;
ColorFrom = colorFrom;
ColorFrom = colorFrom;
ColorTo = colorTo;
Current = 0;
IsFading = true;
OnFadingDone += onFadingComplete;
}
protected override void OnUpdate()
{
if(IsFading)
{
Current += Time.Delta;
if( Current >= Duration)
{
Current = Duration;
IsFading = false;
OnFadingDone.Invoke();
}
}
base.OnUpdate();
}
protected override int BuildHash()
{
return base.BuildHash() + IsFading.GetHashCode() + Current.GetHashCode();
}
}
}