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