Effects/Ring/StrikeRing.cs
namespace PlanetMeat;

[Group( "Planet Meat - Effects" ), Title( "Strike Ring" ), Icon( "radar" )]
public sealed class StrikeRing : TimedRing
{
	private static GameObject Prefab => GameObject.GetPrefab( "tools/strike/strike_ring.prefab" );
	public static StrikeRing Create( Vector3 position, float impactRadius, float scatterDistance )
	{
		var go = Prefab.Clone( position );
		if ( go.Components.Get<StrikeRing>() is StrikeRing strike )
		{
			strike.EffectRadius = impactRadius;
			strike.ScatterDistance = scatterDistance;
			return strike;
		}
		return null;
	}

	[Property] public AoeRing ScatterRing { get; set; }

	public float ScatterDistance
	{
		get => ScatterRing.Radius - EffectRing.Radius;
		set => ScatterRing.Radius = TimerRing.Radius = EffectRing.Radius + value;
	}

	private Vector3 FinalPosition { get; set; }

	public override void MultiplyAlpha( float mult )
	{
		base.MultiplyAlpha( mult );
		ScatterRing.RingColor = ScatterRing.RingColor.WithAlphaMultiplied( mult );
	}

	public void ZeroInOn( Vector3 finalPosition, float finalRadius, float duration )
	{
		TimerStartRadius = ScatterRing.Radius;
		TimerFinalRadius = finalRadius;
		FinalPosition = finalPosition.WithZ( EffectRing.WorldPosition.z );

		StartTimer( duration );
	}

	protected override void Lerp( float frac )
	{
		if ( frac >= 1.0f )
		{
			GameObject.Destroy();
		}
		else
		{
			base.Lerp( frac );

			TimerRing.WorldPosition = WorldPosition.LerpTo( FinalPosition, frac );
			EffectRing.WorldPosition = WorldPosition.LerpTo( FinalPosition, frac );
		}
	}

}