public void Explode(object other, float pwr) { print("Vibrate!"); // Handheld.Vibrate(); GameObject.Destroy(this.gameObject); if (other is Explodable) { Explodable e = other as Explodable; // check if its not a bullet as it will explode on its own if (!e.GetTag().Equals(GetTag())) { e.Explode(this, pwr); } else { // handle bullet double explosion, make sure only one explodes if (GetHashCode() > e.GetHashCode()) { GameObject.Instantiate(explosion, transform.position, transform.rotation); } return; } } // blow up the rest of the things if (ranger.Objects.Count != 0) { // blow those guys up aswell for (var i = 0; i < ranger.Objects.Count; i++) { GameObject o = (GameObject)ranger.Objects[i]; // trigger explosion if explodable var e = o.GetComponent(typeof(Explodable)) as Explodable; if (e != null && e != other) { // explode it e.Explode(this, pwr); if (e.DoShowIndirectExplosions()) { GameObject.Instantiate(explosion, o.transform.position, o.transform.rotation); } } else if (e != other) { // show explosions GameObject.Instantiate(explosion, o.transform.position, o.transform.rotation); } } } if (other is Explodable && !(other as Explodable).DoShowExplosion()) { // do nothing } else { GameObject.Instantiate(explosion, transform.position, transform.rotation); } }