Effects/ParticleTracer.cs
namespace PlanetMeat;

[Group( "Planet Meat - Effects" ), Title( "Particle Tracer" ), Icon( "auto_graph" )]
public sealed class ParticleTracer : Component, ITargetedEffect
{
	[Property] private float BaseBurst { get; set; } = 100.0f;

	public void SetTarget( SceneAnchor target )
	{
		var targetPos = target.ToWorld().Position;
		var toTarget = targetPos - WorldPosition;
		WorldRotation = Rotation.LookAt( toTarget );
		if ( Components.Get<ParticleBoxEmitter>( FindMode.EnabledInSelfAndDescendants ) is ParticleBoxEmitter emitter )
		{
			var targetDistance = toTarget.Length;

			emitter.Burst = BaseBurst * targetDistance / emitter.Size.x;
			emitter.Size = emitter.Size.WithX( targetDistance );
			emitter.LocalPosition = emitter.LocalPosition.WithX( targetDistance * 0.5f );
			emitter.ResetEmitter();
		}
	}
}