Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ///-----------------------------------------------------------------
- /// Author : Sebastien RAYMONDAUD
- /// Date : 28/11/2019 10:38
- ///-----------------------------------------------------------------
- using Convoy.Interfaces;
- using Fr.RaymondaudSebastien.PoolingObject;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- namespace Convoy.Juiciness
- {
- public class Particle
- {
- private float elapsedTime = 0;
- public float duration = 0;
- public PoolParticle particle = null;
- public bool onPlay = false;
- public Transform parent = null;
- public System.Action<Particle, bool> callBackRemove = null;
- private bool destroy = false;
- public Particle(string type, Transform parent, bool destroy, Vector3 position, System.Action<Particle, bool> callBackRemove)
- {
- this.parent = parent;
- this.callBackRemove = callBackRemove;
- this.destroy = destroy;
- particle = (PoolParticle)PoolManager.GetFromPool(type);
- particle.transform.parent = null;
- particle.transform.position = position;
- particle.transform.localScale = Vector3.one;
- particle.particle.Play();
- duration = particle.particle.main.duration;
- elapsedTime = 0;
- onPlay = true;
- }
- public void ManualUpdate()
- {
- if (!onPlay)
- return;
- elapsedTime += Time.deltaTime;
- if (elapsedTime >= duration)
- {
- particle.transform.SetParent(parent, false);
- particle.transform.localPosition = Vector3.zero;
- onPlay = false;
- elapsedTime = 0;
- particle.Dispose();
- callBackRemove?.Invoke(this, destroy);
- }
- }
- }
- public class ParticleTrigger : MonoBehaviour
- {
- #region PROPERTIES
- [RequireInterface(typeof(IParticleEmitter))] [SerializeField] protected Object m_particleEmitter = null;
- protected IParticleEmitter _particleEmitter = null;
- [SerializeField] private PoolParticle m_poolParticle = null;
- private List<Particle> particuleList = new List<Particle>();
- #endregion
- virtual protected void Start()
- {
- _particleEmitter = m_particleEmitter as IParticleEmitter;
- _particleEmitter.OnPlayParticle += Emitter_PlayParticle;
- _particleEmitter.OnPlayParticleWithCallback += Emitter_PlayParticleWithCallback;
- }
- virtual protected void Emitter_PlayParticle(bool destroy, Vector3 position)
- {
- particuleList.Add(new Particle(m_poolParticle.TypePool, transform, destroy, position, RemoveParticleInList));
- }
- virtual protected void Emitter_PlayParticleWithCallback(bool destroy, Vector3 position, System.Action callback)
- {
- particuleList.Add(new Particle(m_poolParticle.TypePool, transform, destroy, position,
- (Particle p, bool d) => { callback?.Invoke();
- RemoveParticleInList(p, d);
- }));
- }
- protected void RemoveParticleInList(Particle p, bool destroy)
- {
- particuleList.Remove(p);
- //if (destroy)
- //Destroy(this);
- }
- virtual protected void Update()
- {
- for (int i = particuleList.Count - 1; i >= 0; i--)
- {
- particuleList[i].ManualUpdate();
- }
- }
- virtual protected void OnDestroy()
- {
- if (_particleEmitter != null)
- {
- _particleEmitter.OnPlayParticle -= Emitter_PlayParticle;
- _particleEmitter.OnPlayParticleWithCallback -= Emitter_PlayParticleWithCallback;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement