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); } }
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); } } } }
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); }