/// <summary> /// Play the specified _particleGameObject in _positio. And set if autoCache it /// </summary> public void Play(GameObject _particleGameObject, Vector3 _position, bool _autoCache) { ParticleCacheData particleSystemToUse = ConfigureParticleSystemForPlay(_particleGameObject, _position, _autoCache); if (particleSystemToUse != null) { StartCoroutine(DelayedParticlePlay(particleSystemToUse.cachedParticleSystem[0])); } // else // Debug.LogError(string.Format("You are trying to emit from {0} without having caching it before" + _particleGameObject.name)); }
/// <summary> /// Configures the particle system for play. /// </summary> private ParticleCacheData ConfigureParticleSystemForPlay(GameObject _particleGameObject, Vector3 _position, bool _autoCache) { if (_autoCache) { CacheParticleSystem(_particleGameObject); } ParticleCacheData particleSystemToUse = particleObjectReferences[_particleGameObject]; if (particleSystemToUse != null) { particleSystemToUse.cachedTransform.position = _position; particleSystemToUse.instantiatedGameObject.SetActive(true); return(particleSystemToUse); } return(null); }
/// <summary> /// Play the specified _particleGameObject in _positio. And set if autoCache it /// </summary> public void Emit(GameObject _particleGameObject, Vector3 _position, bool _autoCache) { ParticleCacheData particleSystemToUse = ConfigureParticleSystemForPlay(_particleGameObject, _position, _autoCache); if (particleSystemToUse.burstQuantity.Length != particleSystemToUse.cachedParticleSystem.Length) //Protection to use Emit in a not ready prefab { Play(_particleGameObject, _position, _autoCache); } if (particleSystemToUse != null) { for (int i = 0; i < particleSystemToUse.cachedParticleSystem.Length; i++) { particleSystemToUse.cachedParticleSystem[i].Emit(particleSystemToUse.burstQuantity[i].burstQuantity); } } // else // Debug.LogError(string.Format("You are trying to emit from {0} without having caching it before" + _particleGameObject.name)); }
/// <summary> /// Caches the particle system. /// </summary> public GameObject CacheParticleSystem(GameObject _particleGameObject, bool alreadyInstantiated = false) { //Check if its already on the dictionary if (!particleObjectReferences.ContainsKey(_particleGameObject)) { GameObject tempInstantiatedParticleObject; if ( !alreadyInstantiated ) { tempInstantiatedParticleObject = Instantiate(_particleGameObject) as GameObject; } else { tempInstantiatedParticleObject = _particleGameObject; } ParticleCacheData tempParticleCacheData = new ParticleCacheData(tempInstantiatedParticleObject); particleObjectReferences.Add(_particleGameObject, tempParticleCacheData); tempInstantiatedParticleObject.SetActive(false); //Disabled until you need it return tempInstantiatedParticleObject; } return null; }
/// <summary> /// Caches the particle system. /// </summary> public GameObject CacheParticleSystem(GameObject _particleGameObject, bool alreadyInstantiated = false) { //Check if its already on the dictionary if (!particleObjectReferences.ContainsKey(_particleGameObject)) { GameObject tempInstantiatedParticleObject; if (!alreadyInstantiated) { tempInstantiatedParticleObject = Instantiate(_particleGameObject) as GameObject; } else { tempInstantiatedParticleObject = _particleGameObject; } ParticleCacheData tempParticleCacheData = new ParticleCacheData(tempInstantiatedParticleObject); particleObjectReferences.Add(_particleGameObject, tempParticleCacheData); tempInstantiatedParticleObject.SetActive(false); //Disabled until you need it return(tempInstantiatedParticleObject); } return(null); }