swb_base/bullets/BulletInfo.Base.cs
using System;

namespace SWB.Base;

public abstract class BulletInfo : Component
{
	public abstract void Shoot( Weapon weapon, bool isPrimary, Vector3 spreadOffset );

	public Vector3 GetRandomSpread( float spread )
	{
		return (Vector3.Random + Vector3.Random + Vector3.Random + Vector3.Random) * spread * 0.25f;
	}

	public virtual bool ShouldSpawnTracer( ShootInfo shootInfo )
	{
		if ( shootInfo.BulletTracerParticle is null )
			return false;

		var randVal = Random.Shared.NextDouble();
		return randVal < shootInfo.BulletTracerChance;
	}
}