| | | 1 | | using System; |
| | | 2 | | using CounterDrone.Core.Models; |
| | | 3 | | |
| | | 4 | | namespace CounterDrone.Core.Algorithms |
| | | 5 | | { |
| | | 6 | | /// <summary>吸入式灭火 — 阈值型:密度达标后线性累积</summary> |
| | | 7 | | public class InertGasDamageModel : IDamageModel |
| | | 8 | | { |
| | | 9 | | private const float EffectiveThreshold = 0.05f; // 有效浓度阈值 |
| | | 10 | | private const float DamageRate = 0.15f; // 每秒毁伤率 |
| | | 11 | | |
| | | 12 | | public float CalculateDamage(TargetType droneType, PowerType powerType, |
| | | 13 | | AerosolType aerosolType, float cloudDensity, float exposureTime, float deltaTime) |
| | 28 | 14 | | { |
| | 29 | 15 | | if (aerosolType != AerosolType.InertGas) return 0f; |
| | 28 | 16 | | if (cloudDensity < EffectiveThreshold) return 0f; |
| | | 17 | | |
| | | 18 | | // 活塞发动机对惰性气体最敏感 |
| | 26 | 19 | | var sensitivity = powerType == PowerType.Piston ? 1.5f : 1.0f; |
| | 26 | 20 | | return DamageRate * sensitivity * deltaTime; |
| | 28 | 21 | | } |
| | | 22 | | |
| | | 23 | | public DamageStage GetDamageStage(float accumulatedDamage) |
| | 4 | 24 | | { |
| | 5 | 25 | | if (accumulatedDamage >= 1.0f) return DamageStage.Destroyed; |
| | 4 | 26 | | if (accumulatedDamage >= 0.6f) return DamageStage.AttitudeLoss; |
| | 3 | 27 | | if (accumulatedDamage >= 0.25f) return DamageStage.EngineAnomaly; |
| | 1 | 28 | | return DamageStage.Normal; |
| | 4 | 29 | | } |
| | | 30 | | } |
| | | 31 | | } |