Code/Util/SelfDestruct.cs
using Sandbox;
namespace Meteor.VehicleTool.Util;

public class SelfDestruct : Component
{
	public enum DestructionMode
	{
		DestroyGameObject,
		DisableComponent,
		DisableGameObject
	}
	[Property] public DestructionMode Mode { get; set; } = DestructionMode.DestroyGameObject;
	[Property] public bool StartOnSpawn { get; set; } = true;
	[Property] public RangedFloat Lifetime { get; set; } = 0.5f;

	private TimeUntil _timeUntilStart;
	private bool _isRunning = false;

	protected override void OnStart()
	{
		if ( StartOnSpawn )
		{
			StartDestruction();
		}
	}

	public void StartDestruction()
	{

		_timeUntilStart = Lifetime.GetValue();
		_isRunning = true;
	}

	protected override void OnUpdate()
	{
		if ( !_isRunning ) return;

		if ( _timeUntilStart )
			ExecuteDestruction();
	}

	private void ExecuteDestruction()
	{
		switch ( Mode )
		{
			case DestructionMode.DestroyGameObject:
				GameObject.Destroy();
				break;

			case DestructionMode.DisableComponent:
				Enabled = false;
				break;

			case DestructionMode.DisableGameObject:
				GameObject.Enabled = false;
				break;
		}

		_isRunning = false;
	}
}