Lighting/LightAnimator.cs
using Sandbox;
public sealed class LightAnimator : Component, Component.ExecuteInEditor
{
[Property] public Curve Curve { get; set; } = new Curve( new Curve.Frame( 0.0f, 0.5f ), new Curve.Frame( 1.0f, 1.0f ) );
[Property, Range(0,1)] public float Speed { get; set; } = 1.0f;
SpotLight spotlight;
PointLight pointlight;
float time;
float seedRand;
protected override void OnEnabled()
{
spotlight = Components.Get<SpotLight>( FindMode.EverythingInSelf );
if( !spotlight.IsValid() )
{
pointlight = Components.Get<PointLight>(FindMode.EverythingInSelf);
}
seedRand = Random.Shared.Float( 0, 1000 );
}
protected override void OnUpdate()
{
if ( spotlight.IsValid() )
{
time = MathF.Sin( Speed * MathF.PI * (Time.Now + seedRand) ).Remap( -1, 1, 0, 1 );
spotlight.Attenuation = Curve.Evaluate( time );
}
else if ( pointlight.IsValid() )
{
time = MathF.Sin( Speed * MathF.PI * (Time.Now + seedRand) ).Remap( -1, 1, 0, 1 );
pointlight.Attenuation = Curve.Evaluate( time );
}
}
}