private void ProcessExplosion(Vector3 blastPoint) { bool success = false; //Debug.DrawLine(transform.position, transform.position + Vector3.up * BlastRadius, Color.red, 5.0f); //Debug.DrawLine(transform.position, transform.position + Vector3.down * BlastRadius, Color.red, 5.0f); //Debug.DrawLine(transform.position, transform.position + Vector3.right * BlastRadius, Color.red, 5.0f); //Debug.DrawLine(transform.position, transform.position + Vector3.left * BlastRadius, Color.red, 5.0f); //Debug.DrawLine(transform.position, transform.position + Vector3.forward * BlastRadius, Color.red, 5.0f); //Debug.DrawLine(transform.position, transform.position + Vector3.back * BlastRadius, Color.red, 5.0f); Collider[] Blast = Physics.OverlapSphere(blastPoint, BlastRadius, BlastableLayers); if (Blast != null) { //Debug.Log("Blast Area: " + Blast.Length + "\n"); for (int i = 0; i < Blast.Length; i++) { Explodable affected = Blast[i].GetComponent <Explodable>(); if (affected && BlastRadius > 0) { //Debug.Log("Blast Area: " + Blast.Length + "\n" + affected.gameObject.name + " " + name, this); if (affected.gameObject != gameObject) { float range = Vector3.Distance(blastPoint, Blast[i].gameObject.transform.position); //A multiplier for objects being knocked around float damage = Mathf.Clamp(1 - ((range - affected.MinSphereRadius) / BlastRadius), .25f, 1); //Debug.Log("Radius [" + BlastRadius + "] Dist [" + range + "] bonusRadius [" + affected.MinSphereRadius + "]\n"); Vector3 startPoint = (alternateExplosionPoint == null) ? transform.position : alternateExplosionPoint.transform.position; ExplosionInfo info = new ExplosionInfo(this, affected, startPoint, new Vector3(1, 1.25f, 1) * damage * BlastForce / 4); info.ClampBlastDamage = ClampBlastDamage; info.explosionSequence = explosionSequence; //Debug.Log(info.ToString() + "\n"); success = affected.RecieveExplosion(info); if (!success) { Debug.Log("Failed to apply explosion\n" + info.ToString() + "\n"); } } } } } if (ShockwaveSize > 0) { ProcessShockwave(blastPoint); } }