ExplosionEffect.cs
using Sandbox;
using SpriteTools;
public sealed class ExplosionEffect : Component
{
[Property] public SpriteRendererLayer Sprite { get; set; }
private TimeSince _spawnTime;
public float Lifetime { get; set; }
public Color ColorA { get; private set; }
public Color ColorB { get; private set; }
public float Opacity { get; set; }
protected override void OnAwake()
{
base.OnAwake();
LocalScale = new Vector3( 1f, 0.925f, 1f ) * 2.85f * Globals.SPRITE_SCALE;
//Sprite.Size = new Vector2( 1f, 0.95f ) * 2.85f;
_spawnTime = 0f;
Sprite.PlaybackSpeed = 1.75f;
}
public void Init( Color colorA, Color colorB, float opacity )
{
ColorA = colorA;
ColorB = colorB;
Opacity = opacity;
Sprite.Tint = colorA.WithAlpha( opacity );
}
protected override void OnUpdate()
{
Sprite.Tint = Color.Lerp(ColorA, ColorB, Utils.Map( _spawnTime, 0f, Lifetime, 0f, 1f, EasingType.QuartOut ) ).WithAlpha( Utils.Map( _spawnTime, 0f, Lifetime, Opacity, 0f, EasingType.Linear ) );
if ( _spawnTime > Lifetime )
{
Manager.Instance.RemoveExplosionEffect( this );
GameObject.Destroy();
}
}
}