public override void Do()
    {
        if (damageScript == null)
        {
            GetDamageScript();
        }

        if (damageScript != null)
        {
            damageScript.DoDamage(null, damagePerSecond * Time.deltaTime);
        }
    }
示例#2
0
    private void DoDamage(GameObject victim, DamageAbleObject damageAbleObject, float damage, bool teamDamage)
    {
        HitEventArgs hitArgs = new HitEventArgs(damage * (DoTeamDamage ? TeamDamageMultiplicator : 1), attacker, victim, teamDamage, false);

        if (OnHit != null)
        {
            OnHit(this, hitArgs);
        }

        if (!hitArgs.Cancel && hitArgs.FinalDamage > 0)
        {
            damageAbleObject.DoDamage(attacker, hitArgs.FinalDamage, StatusEffect);
        }
    }
    private void OnTriggerEnter(Collider other)
    {
        bool isTeam = false;

        if (owner != null)
        {
            isTeam = other.transform.CompareTag(owner.tag);
        }

        DamageAbleObject healthContainer = other.gameObject.GetComponent <DamageAbleObject>();

        if (healthContainer != null)
        {
            float distance = Vector3.Distance(other.transform.position, transform.position);

            float rangeDamage = damage;
            if (UseDamageReduction)
            {
                rangeDamage = (damageReduction - (distance / radius)) * damage;
                if (rangeDamage <= 0)
                {
                    return;
                }
            }

            if (isTeam)
            {
                rangeDamage *= teamDamageMultiplicator;
            }

            HitEventArgs hitArgs = new HitEventArgs(rangeDamage, owner, other.gameObject, isTeam, true);
            if (OnHit != null)
            {
                OnHit(this, hitArgs);
            }

            if (!hitArgs.Cancel && hitArgs.FinalDamage > 0)
            {
                healthContainer.DoDamage(owner, rangeDamage, StatusEffect);
            }

            exploded = true;
        }
    }