Esempio n. 1
0
        private void DealDamage(Component target)
        {
            var colliderHealth = target.GetComponent <Health>();

            if (!Fighter.CanAttack(target.gameObject) || !colliderHealth.isActiveAndEnabled || _isCasting)
            {
                return;
            }

            if (Spell.SpellEffect == SpellEffect.Heal && Attacker.CompareTag(colliderHealth.tag))
            {
                colliderHealth.GiveLife(Spell.SpellDamage);
                colliderHealth.TakeDot(Spell, Attacker);
            }
            else if (!Attacker.CompareTag(colliderHealth.tag))
            {
                if (Attacker.CompareTag("Player"))
                {
                    colliderHealth.TakeDamage(Spell.SpellDamage + GameManager.Instance.player.attributes[(int)StatTypes.Intelligence].value.ModifiedValue * GameManager.Instance.player.BONUS_SPELL_PER_POINT, false, Attacker);
                }
                else
                {
                    colliderHealth.TakeDamage(Spell.SpellDamage, false, Attacker);
                }
                colliderHealth.TakeDot(Spell, Attacker);
            }
        }
Esempio n. 2
0
        private void HitTargetInRadius()
        {
            var colliders = Physics.OverlapSphere(Attacker.transform.position, Spell.SpellRange);

            foreach (var newTarget in colliders)
            {
                var targetHealth = newTarget.GetComponent <Health>();

                if (!Fighter.CanAttack(newTarget.gameObject) || !targetHealth.isActiveAndEnabled || !Attacker.GetIsInFieldOfView(targetHealth.transform, Spell.DamageRadius))
                {
                    continue;
                }

                if (Spell.SpellEffect == SpellEffect.Heal && Attacker.CompareTag(targetHealth.tag))
                {
                    targetHealth.GiveLife(Spell.SpellDamage);
                }
                else if (!Attacker.CompareTag(targetHealth.tag))
                {
                    if (Attacker.CompareTag("Player"))
                    {
                        targetHealth.TakeDamage(Spell.SpellDamage + GameManager.Instance.player.attributes[(int)StatTypes.Intelligence].value.ModifiedValue * GameManager.Instance.player.BONUS_SPELL_PER_POINT, false, Attacker);
                    }
                    else
                    {
                        targetHealth.TakeDamage(Spell.SpellDamage, false, Attacker);
                    }
                }
            }
        }
Esempio n. 3
0
        private IEnumerator DamageOverTimeInArea()
        {
            for (var i = 0; i < Spell.DotCount; i++)
            {
                yield return(new WaitForSeconds(Spell.DotTick));

                var colliders = Physics.OverlapSphere(transform.position, Spell.SpellZoneArea / 2);
                foreach (var newTarget in colliders)
                {
                    var targetHealth = newTarget.GetComponent <Health>();

                    if (!Fighter.CanAttack(newTarget.gameObject) || !targetHealth.isActiveAndEnabled)
                    {
                        continue;
                    }

                    if (Spell.SpellEffect == SpellEffect.Heal && Attacker.CompareTag(targetHealth.tag))
                    {
                        targetHealth.GiveLife(Spell.DotDamage);
                    }
                    else if (!Attacker.CompareTag(targetHealth.tag))
                    {
                        if (Attacker.CompareTag("Player"))
                        {
                            targetHealth.TakeDamage(Spell.DotDamage + GameManager.Instance.player.attributes[(int)StatTypes.Intelligence].value.ModifiedValue * GameManager.Instance.player.BONUS_SPELL_PER_POINT, false, Attacker);
                        }
                        else
                        {
                            targetHealth.TakeDamage(Spell.DotDamage, false, Attacker);
                        }
                    }
                }
            }

            Destroy(gameObject);
        }