< Summary

Information
Class: CounterDrone.Core.Algorithms.ActiveMaterialDamageModel
Assembly: CounterDrone.Core
File(s): C:\Users\Tellme\apps\CounterDroneBackend\src\CounterDrone.Core\Algorithms\ActiveMaterialDamageModel.cs
Line coverage
62%
Covered lines: 10
Uncovered lines: 6
Coverable lines: 16
Total lines: 39
Line coverage: 62.5%
Branch coverage
35%
Covered branches: 5
Total branches: 14
Branch coverage: 35.7%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
CalculateDamage(...)62.5%88100%
GetDamageStage(...)0%4260%

File(s)

C:\Users\Tellme\apps\CounterDroneBackend\src\CounterDrone.Core\Algorithms\ActiveMaterialDamageModel.cs

#LineLine coverage
 1using System;
 2using CounterDrone.Core.Models;
 3
 4namespace CounterDrone.Core.Algorithms
 5{
 6    /// <summary>爆燃式 — 触发型:双条件满足后瞬间高伤害</summary>
 7    public class ActiveMaterialDamageModel : IDamageModel
 8    {
 9        private const float TriggerThreshold = 0.1f;      // 触发浓度阈值
 10        private const float BurstDamage = 0.85f;           // 一次爆发伤害
 11        private const float ResidualRate = 0.05f;         // 后续余伤速率
 12        private bool _triggered;
 13
 14        public float CalculateDamage(TargetType droneType, PowerType powerType,
 15            AerosolType aerosolType, float cloudDensity, float exposureTime, float deltaTime)
 516        {
 517            if (aerosolType != AerosolType.ActiveMaterial) return 0f;
 518            if (cloudDensity < TriggerThreshold) return 0f;
 19
 20            // 喷气发动机高温触发爆燃,更敏感
 521            if (!_triggered)
 422            {
 423                _triggered = true;
 424                var sensitivity = powerType == PowerType.Jet ? 1.3f : 1.0f;
 425                return BurstDamage * sensitivity;
 26            }
 27
 128            return ResidualRate * deltaTime;
 529        }
 30
 31        public DamageStage GetDamageStage(float accumulatedDamage)
 032        {
 033            if (accumulatedDamage >= 1.0f) return DamageStage.Destroyed;
 034            if (accumulatedDamage >= 0.5f) return DamageStage.AttitudeLoss;  // 爆燃后更快进入失控
 035            if (accumulatedDamage >= 0.2f) return DamageStage.EngineAnomaly;
 036            return DamageStage.Normal;
 037        }
 38    }
 39}