< Summary

Information
Class: CounterDrone.Core.Algorithms.ActiveFuelDamageModel
Assembly: CounterDrone.Core
File(s): C:\Users\Tellme\apps\CounterDroneBackend\src\CounterDrone.Core\Algorithms\ActiveFuelDamageModel.cs
Line coverage
57%
Covered lines: 8
Uncovered lines: 6
Coverable lines: 14
Total lines: 37
Line coverage: 57.1%
Branch coverage
25%
Covered branches: 3
Total branches: 12
Branch coverage: 25%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
CalculateDamage(...)50%66100%
GetDamageStage(...)0%4260%

File(s)

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

#LineLine coverage
 1using System;
 2using CounterDrone.Core.Models;
 3
 4namespace CounterDrone.Core.Algorithms
 5{
 6    /// <summary>吸入式爆炸 — 指数累积型:暴露时间越长伤害越高</summary>
 7    public class ActiveFuelDamageModel : IDamageModel
 8    {
 9        private const float EffectiveThreshold = 0.03f;   // 有效浓度阈值
 10        private const float BaseRate = 0.02f;             // 基础速率
 11        private const float ExpFactor = 0.3f;             // 指数增长因子
 12
 13        public float CalculateDamage(TargetType droneType, PowerType powerType,
 14            AerosolType aerosolType, float cloudDensity, float exposureTime, float deltaTime)
 415        {
 416            if (aerosolType != AerosolType.ActiveFuel) return 0f;
 417            if (cloudDensity < EffectiveThreshold) return 0f;
 18
 19            // 伤害 = 基础速率 × e^(暴露时间 × 因子) × deltaTime
 20            // 在云团中待得越久伤害指数增长
 421            var exponential = (float)System.Math.Exp(exposureTime * ExpFactor);
 422            var damage = BaseRate * exponential * deltaTime;
 23
 24            // 高速目标更脆弱
 425            var sensitivity = droneType == TargetType.HighSpeed ? 1.5f : 1.0f;
 426            return damage * sensitivity;
 427        }
 28
 29        public DamageStage GetDamageStage(float accumulatedDamage)
 030        {
 031            if (accumulatedDamage >= 1.0f) return DamageStage.Destroyed;
 032            if (accumulatedDamage >= 0.6f) return DamageStage.AttitudeLoss;
 033            if (accumulatedDamage >= 0.3f) return DamageStage.EngineAnomaly;
 034            return DamageStage.Normal;
 035        }
 36    }
 37}