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 );
		}
	}
}