protected virtual void ReceiveDamage(DamageInfo info) { if (!this.invincible) { this.health.Subtract(Mathf.Max(0, info.Amount - this.defense.Value)); if (!Dead) StartCoroutine(_TickInvincibility(this.invincibiltyTime)); } }
/// <summary> /// Performs an attack action. /// </summary> /// <param name="damageType">Type of damage that will be applied.</param> /// <param name="extraDamage">Value to be added to the base damage before applying it to the targets.</param> /// <param name="targets">One or more entities that will have damage applied to them.</param> public void Execute(DamageInfo.DamageType damageType, float extraDamage, params IInteractable[] targets) { if(targets == null || targets.Length < 1) throw new ArgumentException("Cannot execute the attack logic without a target."); float totalDamage = (damage ? damage.Value : 0) + extraDamage; dmgInfo = new DamageInfo(damageType, totalDamage, agent); foreach (Entity target in targets) target.Interact(this); }
public void Execute(DamageInfo.DamageType damageType, params IInteractable[] targets) { Execute(damageType, 0, targets); }