private void ProcessProperties(IUnit sender, IUnit target, Type damageType, float value) { foreach (var iter in m_PropertyPriority) { IProperty property = GetPropertyFromType(iter, target.Properties); if (property != null && property.Value > 0) { //Вычисление урона (damage = value * resist) float damage = value; IDamage resist = GetDamageFromType(damageType, property.Resist); damage *= (resist?.Value ?? 1); property.AddDamage(sender, damage); //Вычисление поглощения (in value *= 1 - absorb) IDamage absorb = GetDamageFromType(damageType, property.Absorb); value *= 1 - (absorb?.Value ?? 1); } } }