public decimal ApplyDamage(IEnumerable <Damage> damageIEnumerable) { decimal totalDamageDone = 0; foreach (Damage damageItem in damageIEnumerable) { IArmourType armour = Armour.FirstOrDefault(x => x.DamageType == damageItem.DamageType); decimal damageAmount = damageItem.Amount; if (armour != null) { // If there is an applicable armour then reduce incoming damage by the appropriate amount damageAmount = damageAmount - armour.ArmourAmount; } //Make sure minimum damage is 0 if (damageAmount < 0) { damageAmount = 0; } _DamageTaken = _DamageTaken + damageAmount; totalDamageDone = totalDamageDone + damageAmount; // make sure the damage taken never exceeds hitpoint if (_DamageTaken > _MaxHitpoints) { _DamageTaken = _MaxHitpoints; } } return(totalDamageDone); }