private IEnumerator MakeDamageAround(GameObject source) { yield return(new WaitForSeconds(damageDelay)); Collider2D[] collidersAround = Physics2D.OverlapCircleAll(transform.position, lowDamageRadius, explositionHitLayerMask); RaycastHit2D[] explosionHits = new RaycastHit2D[1]; foreach (Collider2D colliderAround in collidersAround) { Vector2 raycastDirection = colliderAround.bounds.center - transform.position; int numberOfHits = explosiveCollider.Raycast(raycastDirection, explosionHits, lowDamageRadius, explositionHitLayerMask); if (numberOfHits == 0 || explosionHits[0].collider != colliderAround) { continue; } GameObject objectHit = colliderAround.gameObject; F3DDamage damage = objectHit.GetComponentInParent <F3DDamage>(); if (damage) { float sqrMagnitude = (objectHit.transform.position - transform.position).sqrMagnitude; var damageAmount = (sqrMagnitude < highDamageRadius * highDamageRadius) ? highDamageAmount : lowDamageAmount; damage.OnDamage(source, F3DDamage.DamageType.Shot, damageAmount, explosionHits[0].point, explosionHits[0].normal); } } Destroy(gameObject); }
void OnParticleCollision(GameObject objectHit) { F3DDamage damage = objectHit.GetComponentInParent <F3DDamage>(); if (damage) { Flames.GetCollisionEvents(objectHit, CollisionEvents); FlameThrower.OnFlameHit(damage, CollisionEvents[0].intersection, CollisionEvents[0].normal); } }
public void OnFlameHit(F3DDamage damage, Vector2 hitPoint, Vector2 hitNormal) { damage.OnDamage(transform.root.gameObject, F3DDamage.DamageType.Fire, DamageAmount, hitPoint, hitNormal); }