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