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); }