public override void OnHit(Hit hit) { base.OnHit(hit); }
public virtual void OnHit(Hit hit) { Deal(hit.Damage); }
private void explode() { if (_hasExploded || !_isActivated) { return; } _hasExploded = true; if (Explosion != null) { var particle = GameObject.Instantiate(Explosion); particle.transform.parent = null; particle.transform.position = transform.position; particle.SetActive(true); } var colliders = Physics.OverlapSphere(transform.position, ExplosionRadius); foreach (var collider in colliders) { if (!collider.isTrigger) { var part = collider.GetComponent <BodyPartHealth>(); if (part == null) { var closest = collider.transform.position; if (collider.GetType() == typeof(MeshCollider)) { if (((MeshCollider)collider).convex) { closest = collider.ClosestPoint(transform.position); } } var vector = transform.position - closest; var distance = vector.magnitude; if (distance < ExplosionRadius) { Vector3 normal; if (distance > float.Epsilon) { normal = vector / distance; } else { normal = (closest - collider.transform.position).normalized; } var hit = new Hit(closest, normal, CenterDamage * (1 - distance / ExplosionRadius), null, collider.gameObject); collider.gameObject.SendMessage("OnHit", hit, SendMessageOptions.DontRequireReceiver); } } } } GameObject.Destroy(gameObject); }