public void SpellAttack(Character attacker, Character defender, CharacterObject.HitType hitType, float attackRange, int damage) { if (defender == null || Vector3.Distance(attacker.WorldObject.transform.position, defender.WorldObject.transform.position) > attackRange) { return; } if (UnityEngine.Random.value <= defender.DodgeBonus) { return; } float armorParam = 1; if (defender.ArmorValue > 0) { armorParam = Mathf.Min(damage / defender.ArmorValue, 1.0f); } damage = (int)(damage * armorParam); defender.TakeDamage(damage, hitType); if (defender.Damage >= defender.HitPoints) { attacker.XP += defender.XP; } }
public virtual void TakeDamage(int amount, CharacterObject.HitType hitType) { if (amount <= 0) { amount = 1; } if (amount > 0 && WorldObject.audio != null && HitSound != null) { WorldObject.audio.PlayOneShot(HitSound); } Damage += amount; CharacterObject obj = WorldObject.GetComponent <CharacterObject>(); if (obj != null) { obj.Hit(hitType); } Debug.Log(Name + " Took Damage: " + amount.ToString()); }