public static Damage DealDamage(int damage, IModifiersHolder damagerModifiers, IHealth target, IModifiersHolder targetModifiers) { int realDamage = damage; foreach (var modifier in targetModifiers.Modifiers) { realDamage = modifier.Value.ModifyTakeDamage(realDamage); } foreach (var modifier in damagerModifiers.Modifiers) { realDamage = modifier.Value.ModifyDealDamage(realDamage); } if (realDamage > target.Armor) { return(new Damage( realDamage - target.Armor, target.Armor )); } else { return(new Damage( 0, realDamage )); } }
public override void OnTargetPlay(GameObject target) { IHealth targetHealth = target.GetComponent <IHealth>(); IModifiersHolder targetModifiers = target.GetComponent <IModifiersHolder>(); IModifiersHolder damagerModifiers = GameObject.FindObjectOfType <PlayerEntity>().ModifiersHolder; Damage damage = DamageCalculator.DealDamage(_damage, damagerModifiers, targetHealth, targetModifiers); targetHealth.DealDamage(damage); }
public override bool ExecutePerTarget(GameObject target) { Entity entityTarget = target.GetComponent <Entity>(); IHealth targetHealth = entityTarget.Health; IModifiersHolder targetModifiers = entityTarget.ModifiersHolder; IModifiersHolder selfModifiers = _self.GetComponent <IModifiersHolder>(); Damage damage = DamageCalculator.DealDamage(_damage, selfModifiers, targetHealth, targetModifiers); targetHealth.DealDamage(damage); return(true); }