public void ReturnToInactivePool(PooledParticleEffect effect) { if (effect.gameObject.activeSelf) { effect.gameObject.SetActive(false); activeEffects.Remove(effect); inactiveEffects.Add(effect); } }
public PooledParticleEffect NewEffect(Vector3 position, Vector3 direction, Transform parent, int layer) { PooledParticleEffect effect = NewEffect(); effect.gameObject.transform.parent = parent; effect.transform.position = position; effect.transform.localRotation = Quaternion.LookRotation(direction); effect.SetLayerIncludingAllChildren(effect.gameObject, layer); effect.ScaleIncludingAllChildren(effect.gameObject, Vector3.one); return(effect); }
bool TryTakeEffectFromInactivePool(out PooledParticleEffect effect) { int count = inactiveEffects.Count; if (count > 0) { int index = count - 1; effect = inactiveEffects[index]; inactiveEffects.RemoveAt(index); return(true); } else { effect = null; return(false); } }
IEnumerator ChargeAndShoot(float chargeTime) { PooledParticleEffect[] chargeEffects = new PooledParticleEffect[bulletOrigins.Length]; for (int i = 0; i < bulletOrigins.Length; i++) { chargeEffects[i] = chargeEffectPool.NewEffect(); chargeEffects[i].gameObject.layer = LayerMask.NameToLayer("Default"); chargeEffects[i].transform.parent = bulletOrigins[i].transform; chargeEffects[i].transform.localPosition = Vector3.zero; chargeEffects[i].transform.localRotation = Quaternion.identity; } yield return(new WaitForSeconds(chargeTime)); for (int i = 0; i < chargeEffects.Length; i++) { chargeEffects[i].Deactivate(true); } ActuallyShoot(); }