using UnityEngine;
namespace MoreMountains.Tools
{
///
/// Add this class to a ParticleSystem so it auto destroys once it has stopped emitting.
/// Make sure your ParticleSystem isn't looping, otherwise this script will be useless
///
[AddComponentMenu("More Mountains/Tools/Particles/MM Auto Destroy Particle System")]
public class MMAutoDestroyParticleSystem : MonoBehaviour
{
/// True if the ParticleSystem should also destroy its parent
public bool DestroyParent;
/// If for some reason your particles don't get destroyed automatically at the end of the emission, you can force a destroy after a delay. Leave it at zero otherwise.
public float DestroyDelay;
protected ParticleSystem _particleSystem;
protected bool _started;
protected float _startTime;
///
/// Initialization, we get the ParticleSystem component
///
protected virtual void Start()
{
_started = false;
_particleSystem = GetComponent();
if (DestroyDelay != 0) _startTime = Time.time;
}
///
/// When the ParticleSystem stops playing, we destroy it.
///
protected virtual void Update()
{
if (DestroyDelay != 0 && Time.time - _startTime > DestroyDelay) DestroyParticleSystem();
if (_particleSystem.isPlaying)
{
_started = true;
return;
}
DestroyParticleSystem();
}
///
/// Destroys the particle system.
///
protected virtual void DestroyParticleSystem()
{
if (!_started) return;
if (transform.parent != null)
if (DestroyParent)
Destroy(transform.parent.gameObject);
Destroy(gameObject);
}
}
}