- IDamageModel.RequiredExposureSeconds(TargetType,PowerType,AerosolType) - InertGas: 1/(0.15*sensitivity), Piston 1.5→4.44s - ActiveMaterial: (1-burst)/residual + burst threshold - ActiveFuel: ∫BaseRate*e^(kT)解析解 - CalcRoundsNeeded/ComputeInterceptProbability/BuildCandidates 全部调用 - 场景缩短: Piston 5km/150km/h, Jet 5km/200km/h, AirBased 10km/150km/h - 空基 test: Unit(1500,1000), hp=0 Destroyed
35 lines
1.3 KiB
C#
35 lines
1.3 KiB
C#
using System;
|
|
using CounterDrone.Core.Models;
|
|
|
|
namespace CounterDrone.Core.Algorithms
|
|
{
|
|
/// <summary>吸入式灭火 — 累积伤害</summary>
|
|
public class InertGasDamageModel : IDamageModel
|
|
{
|
|
private const float DamageRate = 0.15f; // 每秒毁伤率
|
|
|
|
public float CalculateDamage(TargetType droneType, PowerType powerType,
|
|
AerosolType aerosolType, float cloudDensity, float exposureTime, float deltaTime)
|
|
{
|
|
if (aerosolType != AerosolType.InertGas) return 0f;
|
|
var sensitivity = powerType == PowerType.Piston ? 1.5f : 1.0f;
|
|
return DamageRate * sensitivity * deltaTime;
|
|
}
|
|
|
|
public float RequiredExposureSeconds(TargetType droneType, PowerType powerType, AerosolType aerosolType)
|
|
{
|
|
if (aerosolType != AerosolType.InertGas) return float.MaxValue;
|
|
var sensitivity = powerType == PowerType.Piston ? 1.5f : 1.0f;
|
|
return 1.0f / (DamageRate * sensitivity);
|
|
}
|
|
|
|
public DamageStage GetDamageStage(float accumulatedDamage)
|
|
{
|
|
if (accumulatedDamage >= 1.0f) return DamageStage.Destroyed;
|
|
if (accumulatedDamage >= 0.6f) return DamageStage.AttitudeLoss;
|
|
if (accumulatedDamage >= 0.25f) return DamageStage.EngineAnomaly;
|
|
return DamageStage.Normal;
|
|
}
|
|
}
|
|
}
|