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