Esempio n. 1
0
    private IEnumerator Explode()
    {
        audioSource.PlayOneShot(explodeSound, randomPitch);
        GameObject expInstance = Instantiate(explosion, transform.position, transform.rotation);

        Destroy(expInstance, 0.8f);
        GetComponent <SpriteRenderer>().enabled = false;
        Collider2D[] colliders = Physics2D.OverlapCircleAll(new Vector2(detonationPoint.position.x, detonationPoint.position.y), radius);

        foreach (Collider2D hit in colliders)
        {
            detonate = true;
            Rigidbody2D  rb        = hit.GetComponent <Rigidbody2D>();
            PlayerCombat player    = hit.GetComponent <PlayerCombat>();
            TakeDamage   creature  = hit.GetComponent <TakeDamage>();
            Vector3      direction = transform.position - hit.transform.position;
            float        distance  = Vector3.Distance(transform.position, hit.transform.position);

            if (rb != null && !hit.gameObject.name.Contains("Popper") && !hit.gameObject.name.Contains("Stratum"))
            {
                rb.AddForce(-direction * rb.mass * Mathf.Sqrt(Physics2D.gravity.magnitude) * radius / distance, ForceMode2D.Impulse);
            }

            if (player != null)
            {
                player.TakeDamage(Mathf.RoundToInt(250 * radius / distance));
            }
            else if (creature != null)
            {
                creature.ReceiveDamage(Mathf.RoundToInt(250 * radius / distance));
            }
        }

        detonate = false;
        yield return(new WaitForSeconds(explodeSound.length));

        Destroy(gameObject);
    }