RandomDebrisSpawner.cs
using System;
using Sandbox;

public sealed class RandomDebrisSpawner : Component
{
	[Property]
	public RangedFloat Range { get; set; } = new RangedFloat( 100f, 1000f );

	[Property]
	public List<Model> Models { get; set; }

	[Property]
	public int Amount { get; set; } = 100;

	Vector2 AwayFromZero(Vector2 input, Vector2 offset)
	{
		return new Vector2(
			input.x + (input.x > 0 ? 1 : -1 * offset.x),
			input.y + (input.y > 0 ? 1 : -1 * offset.y)
		);
	}

	protected override void OnEnabled()
	{
		base.OnEnabled();

		var minOffset = new Vector2( Range.Min, Range.Min );

		for (var i = 0; i < Amount; i++ )
		{
			var go = new GameObject(GameObject);
			var model = go.AddComponent<ModelRenderer>();
			model.Model = Game.Random.FromList( Models );
			var scale = Game.Random.Float( 3.4f, 5.1f );
			var minusZ = (scale - 3.4f) / (5.1f - 3.4f) * -0.4f;

			//go.WorldPosition = new Vector3( Range.GetValue(), 0, minusZ ).RotateAround(Vector3.Zero, Rotation.FromYaw(Game.Random.Float(360f)));
			
			go.WorldPosition = new Vector3(AwayFromZero(Game.Random.VectorInCircle( Range.Max - Range.Min ), minOffset), minusZ);
			go.WorldRotation = Game.Random.Rotation();
			go.WorldScale = scale;
		}
	}

	protected override void DrawGizmos()
	{
		base.DrawGizmos();

		if ( !Gizmo.IsSelected ) return;

		Gizmo.Draw.Color = Color.Blue;
		Gizmo.Draw.LineCircle( Vector3.Zero, Vector3.Up, Vector3.Forward, Range.Min, 0, 360, 64 );

		Gizmo.Draw.Color = Color.Magenta;
		Gizmo.Draw.LineCircle( Vector3.Zero, Vector3.Up, Vector3.Forward, Range.Max, 0, 360, 64 );
	}
}