Exemple #1
0
    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);
    }
Exemple #2
0
    void OnParticleCollision(GameObject objectHit)
    {
        F3DDamage damage = objectHit.GetComponentInParent <F3DDamage>();

        if (damage)
        {
            Flames.GetCollisionEvents(objectHit, CollisionEvents);
            FlameThrower.OnFlameHit(damage, CollisionEvents[0].intersection, CollisionEvents[0].normal);
        }
    }
Exemple #3
0
 public void OnFlameHit(F3DDamage damage, Vector2 hitPoint, Vector2 hitNormal)
 {
     damage.OnDamage(transform.root.gameObject, F3DDamage.DamageType.Fire, DamageAmount, hitPoint, hitNormal);
 }