Esempio n. 1
0
        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);
                }
            }
        }