Particles/CircleEmitter.cs
using Sandbox;
using System;
[Title( "Circle Forward Emitter" )]
[Category( "Particles" )]
public sealed class ParticleCircleForwardEmitter : ParticleEmitter
{
[Property, Group( "Circle" )]
public float Radius { get; set; } = 10.0f;
protected override void DrawGizmos()
{
if ( !Gizmo.IsSelected )
return;
Gizmo.Draw.LineThickness = 6;
Gizmo.Draw.Color = Color.Green.WithAlpha( 0.3f );
Gizmo.Draw.LineCircle( Vector3.Zero, Radius );
}
public override bool Emit( ParticleEffect target )
{
var len = Random.Shared.Float( 0, Radius );
var angle = len * MathF.PI * 2.0f;
//var pos = new Vector3( MathF.Cos( angle ), MathF.Sin( angle ), 0 ) * Radius;
var pos = Vector3.Forward * 0.1f;
var rand = angle;
pos += Vector3.Left * MathF.Sin( angle ) * len;
pos += Vector3.Up * MathF.Cos( angle ) * len;
var emitPos = pos;
var p = target.Emit( Transform.World.PointToWorld( emitPos ) );
p.Velocity = Transform.World.NormalToWorld( Vector3.Forward ) * p.Velocity.Length;
return true;
}
}