private void Killed(Vector2 forceDir) { gameCtrl.waveCtrl.EnemyKilled(this); state = EnemyState.DESTROYED; if (Random.Range(0, 1f) > 0.1f) //Crash? { rb.gravityScale = 1f; rb.AddForce(forceDir * Random.Range(1.5f, 3.0f), ForceMode2D.Impulse); rb.AddTorque(Random.Range(-5f, 5f)); crashParticSys = gameCtrl.partCtrl.AttachParticlesTo(ParticleType.CRASH, transform); } else //Or explode immidetly { Explode(); } // Debug.Log("Killed! - forceDir: " + forceDir); // GameObject.Destroy(gameObject); }
private IEnumerator PlayCR(ParticleType type, BaseParticleSys part) { part.Play(); yield return(new WaitForSeconds(part.GetLifetime())); ReturnSystem(type, part); }
public void CreateParticlesAt(ParticleType type, Vector2 pos) { BaseParticleSys part = CreateAndStartParticles(type); if (part != null) { part.transform.position = pos; part.transform.SetParent(systemContainer.transform); StartCoroutine(PlayCR(type, part)); } }
private BaseParticleSys CreateAndStartParticles(ParticleType type) { BaseParticleSys part = particlesPool[type].TryGet(); if (part == null) { part = (BaseParticleSys)Instantiate(particlePrefabDict[type]); } part.gameObject.SetActive(true); return(part); }
public BaseParticleSys AttachParticlesTo(ParticleType type, Transform parent) { BaseParticleSys part = CreateAndStartParticles(type); if (part != null) { part.transform.SetParent(parent); part.transform.localPosition = Vector2.zero; StartCoroutine(PlayCR(type, part)); } return(part); }
private void Killed(Vector2 forceDir) { gameCtrl.waveCtrl.EnemyKilled(this); state = EnemyState.DESTROYED; if (Random.Range(0, 1f) > 0.1f){ //Crash? rb.gravityScale = 1f; rb.AddForce(forceDir * Random.Range(1.5f, 3.0f), ForceMode2D.Impulse); rb.AddTorque(Random.Range(-5f, 5f)); crashParticSys = gameCtrl.partCtrl.AttachParticlesTo(ParticleType.CRASH, transform); }else{ //Or explode immidetly Explode(); } // Debug.Log("Killed! - forceDir: " + forceDir); // GameObject.Destroy(gameObject); }
private void ReturnSystem(ParticleType type, BaseParticleSys part) { part.Clear(); part.gameObject.SetActive(false); particlesPool[type].Return(part); }
private IEnumerator PlayCR(ParticleType type, BaseParticleSys part) { part.Play(); yield return new WaitForSeconds(part.GetLifetime()); ReturnSystem(type, part); }