Пример #1
0
        private void HandleHit()
        {
            HitLocation hitLocation = DetermineHitLocation(_target);

            // make sure this body part hasn't already been shot off
            if (!hitLocation.IsSevered)
            {
                float damage         = BattleModifiersUtil.CalculateDamageAtRange(_weapon, _range) * (3.5f + ((float)RNG.NextGaussianDouble() * 1.75f));
                float effectiveArmor = _target.Armor.Template.ArmorProvided * _weapon.Template.ArmorMultiplier;
                float penDamage      = damage - effectiveArmor;
                if (penDamage > 0)
                {
                    float totalDamage = penDamage * _weapon.Template.WoundMultiplier;
                    _resultList.Add(new WoundResolution(_soldier, _weapon.Template, _target, totalDamage, hitLocation));
                }
            }
        }
Пример #2
0
        private float CalculateToHitModifiers()
        {
            float totalModifier = 0;

            if (_useBulk)
            {
                totalModifier -= _weapon.Template.Bulk;
            }
            if (_soldier.Aim?.Item1 == _target && _soldier.Aim?.Item2 == _weapon)
            {
                totalModifier += _soldier.Aim.Item3 + _weapon.Template.Accuracy + 1;
            }
            totalModifier += BattleModifiersUtil.CalculateRateOfFireModifier(_numberOfShots);
            totalModifier += BattleModifiersUtil.CalculateSizeModifier(_target.Soldier.Size);
            totalModifier += BattleModifiersUtil.CalculateRangeModifier(_range, _target.CurrentSpeed);

            return(totalModifier);
        }