Advertisement
Guest User

MultipleParticleTrigger

a guest
Jan 25th, 2020
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.95 KB | None | 0 0
  1. ///-----------------------------------------------------------------
  2. ///   Author : Sebastien RAYMONDAUD                    
  3. ///   Date   : 01/12/2019 14:24
  4. ///-----------------------------------------------------------------
  5.  
  6. using Convoy.Interfaces;
  7. using Fr.RaymondaudSebastien.PoolingObject;
  8. using System.Collections;
  9. using System.Collections.Generic;
  10. using UnityEngine;
  11.  
  12. namespace Convoy.Juiciness
  13. {
  14.     [System.Serializable]
  15.     public class ParticlesListener
  16.     {
  17.         [RequireInterface(typeof(IMultipleParticleEmitter))] [SerializeField] protected Object m_particleEmitter = null;
  18.         protected IMultipleParticleEmitter _particleEmitter = null;
  19.  
  20.         [SerializeField] private PoolParticle m_poolParticle = null;
  21.  
  22.         private List<Particle> particuleList = new List<Particle>();
  23.  
  24.         private Transform parent = null;
  25.         private MultipleParticleTrigger manager = null;
  26.         private int id = 0;
  27.  
  28.         public void SetInfo(int id, MultipleParticleTrigger manager)
  29.         {
  30.             this.id = id;
  31.             this.manager = manager;
  32.         }
  33.  
  34.         public void Start(Transform transform)
  35.         {
  36.             parent = transform;
  37.             _particleEmitter = m_particleEmitter as IMultipleParticleEmitter;
  38.             _particleEmitter.OnPlayParticle += Emitter_PlayParticle;
  39.         }
  40.  
  41.         private void Emitter_PlayParticle(int idParticle, bool destroy, Vector3 position)
  42.         {
  43.             if (id != idParticle)
  44.                 return;
  45.  
  46.             particuleList.Add(new Particle(m_poolParticle.TypePool, parent, destroy, position, RemoveParticleInList));
  47.         }
  48.  
  49.         protected void RemoveParticleInList(Particle p, bool destroy)
  50.         {
  51.             particuleList.Remove(p);
  52.             //if (destroy)
  53.                //manager.Remove(this);
  54.         }
  55.  
  56.         public void ManualUpdate()
  57.         {
  58.             for (int i = particuleList.Count - 1; i >= 0; i--)
  59.             {
  60.                 particuleList[i].ManualUpdate();
  61.             }
  62.         }
  63.  
  64.         public void Destroy()
  65.         {
  66.             if (_particleEmitter != null)
  67.                 _particleEmitter.OnPlayParticle -= Emitter_PlayParticle;
  68.         }
  69.     }
  70.  
  71.     public class MultipleParticleTrigger : MonoBehaviour
  72.     {
  73.         [SerializeField] private List<ParticlesListener> m_listParticle = new List<ParticlesListener>();
  74.  
  75.         private void Start()
  76.         {
  77.             for (int i = m_listParticle.Count -1; i >= 0; i--)
  78.             {
  79.                 m_listParticle[i].SetInfo(i, this);
  80.                 m_listParticle[i].Start(transform);
  81.             }
  82.         }
  83.  
  84.         private void Update()
  85.         {
  86.             for (int i = m_listParticle.Count - 1; i >= 0; i--)
  87.             {
  88.                 m_listParticle[i].ManualUpdate();
  89.             }
  90.         }
  91.  
  92.         public void Remove(ParticlesListener particle)
  93.         {
  94.             m_listParticle.Remove(particle);
  95.         }
  96.     }
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement