CardBreaker.cs
using Sandbox;

public sealed class CardBreaker : Component
{
	protected override void OnStart()
	{

	}

	public void Init(Material material, Rotation rot, float scale)
	{
		LocalRotation = rot;
		LocalScale = new Vector3( scale );

		for ( int i = GameObject.Children.Count - 1; i >= 0; i-- )
		{
			var child = GameObject.Children[i];
			child.SetParent( null );

			var modelRenderer = child.Components.Get<ModelRenderer>();
			modelRenderer.Tint = Color.White;
			modelRenderer.MaterialOverride = material;

			var rigidBody = child.Components.Get<Rigidbody>();
			rigidBody.ApplyImpulse( (child.WorldPosition - WorldPosition).Normal * Game.Random.Float( 10f, 100f ) * rigidBody.PhysicsBody.Mass );
			rigidBody.ApplyImpulse( new Vector3( 0f, 0f, 1f ) * Game.Random.Float( 400f, 800f ) * rigidBody.PhysicsBody.Mass );
			rigidBody.AngularVelocity = Vector3.Random * Game.Random.Float( -10f, 10f );
		}

		GameObject.Destroy();
	}
}