예제 #1
0
    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);
    }
예제 #2
0
    private IEnumerator PlayCR(ParticleType type, BaseParticleSys part)
    {
        part.Play();
        yield return(new WaitForSeconds(part.GetLifetime()));

        ReturnSystem(type, part);
    }
예제 #3
0
    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));
        }
    }
예제 #4
0
    private BaseParticleSys CreateAndStartParticles(ParticleType type)
    {
        BaseParticleSys part = particlesPool[type].TryGet();

        if (part == null)
        {
            part = (BaseParticleSys)Instantiate(particlePrefabDict[type]);
        }
        part.gameObject.SetActive(true);


        return(part);
    }
예제 #5
0
    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);
    }
예제 #6
0
파일: Enemy.cs 프로젝트: torybash/Defenders
    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);
    }
예제 #7
0
 private void ReturnSystem(ParticleType type, BaseParticleSys part)
 {
     part.Clear();
     part.gameObject.SetActive(false);
     particlesPool[type].Return(part);
 }
예제 #8
0
 private IEnumerator PlayCR(ParticleType type, BaseParticleSys part)
 {
     part.Play();
     yield return new WaitForSeconds(part.GetLifetime());
     ReturnSystem(type, part);
 }
예제 #9
0
 private void ReturnSystem(ParticleType type, BaseParticleSys part)
 {
     part.Clear();
     part.gameObject.SetActive(false);
     particlesPool[type].Return(part);
 }