删掉了 JammerType 枚举,用 JammingType 枚举表示干扰物理方式,用 JammingMode 枚举表示干扰模式

This commit is contained in:
Tian jianyong 2025-04-25 18:16:22 +08:00
parent 5e61f357b4
commit 92caff5268
20 changed files with 73 additions and 149 deletions

View File

@ -6,6 +6,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ThreatSource", "ThreatSourc
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThreatSource.Tests", "ThreatSource.Tests\ThreatSource.Tests.csproj", "{973EB84A-AED4-49A3-A12A-C0969F022915}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThreatSource.Tools", "tools\ThreatSource.Tools.csproj", "{31DEBAE2-F5B2-4001-8C08-33A9A0637D35}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -20,6 +22,10 @@ Global
{973EB84A-AED4-49A3-A12A-C0969F022915}.Debug|Any CPU.Build.0 = Debug|Any CPU
{973EB84A-AED4-49A3-A12A-C0969F022915}.Release|Any CPU.ActiveCfg = Release|Any CPU
{973EB84A-AED4-49A3-A12A-C0969F022915}.Release|Any CPU.Build.0 = Release|Any CPU
{31DEBAE2-F5B2-4001-8C08-33A9A0637D35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{31DEBAE2-F5B2-4001-8C08-33A9A0637D35}.Debug|Any CPU.Build.0 = Debug|Any CPU
{31DEBAE2-F5B2-4001-8C08-33A9A0637D35}.Release|Any CPU.ActiveCfg = Release|Any CPU
{31DEBAE2-F5B2-4001-8C08-33A9A0637D35}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -361,13 +361,8 @@ namespace ThreatSource.Data
/// 获取或设置干扰机的类型
/// </summary>
/// <remarks>
/// 可选值:
/// - LaserJammer激光干扰机
/// - IRJammer红外干扰机
/// - MMWJammer毫米波干扰机
/// - SmokeGrenade烟幕弹
/// </remarks>
public JammerType Type { get; set; }
public JammingType Type { get; set; }
/// <summary>
/// 获取或设置烟幕弹的配置

View File

@ -136,7 +136,7 @@ namespace ThreatSource.Data
public IIndicator CreateIndicator(string indicatorId, string indicatorModel, string targetId, string missileId, MotionParameters motionParameters)
{
var data = _dataManager.GetIndicator(indicatorModel);
return data.Type switch
{
IndicatorType.LaserDesignator when data.DesignatorConfig != null => new LaserDesignator(
@ -232,32 +232,32 @@ namespace ThreatSource.Data
var data = _dataManager.GetJammer(jammerModel);
return data.Type switch
{
JammerType.SmokeGrenade => new SmokeGrenade(
JammingType.SmokeGrenade => new SmokeGrenade(
jammerId,
data.SmokeGrenadeConfig,
motionParameters,
_simulationManager
),
JammerType.LaserDecoy => new LaserDecoy(
JammingType.LaserDecoy => new LaserDecoy(
jammerId,
data.LaserDecoyConfig,
motionParameters,
sourceId,
_simulationManager
),
JammerType.Laser => new LaserJammer(
JammingType.Laser => new LaserJammer(
jammerId,
data.LaserJammerConfig,
motionParameters,
_simulationManager
),
JammerType.Infrared => new InfraredJammer(
JammingType.Infrared => new InfraredJammer(
jammerId,
data.InfraredJammerConfig,
motionParameters,
_simulationManager
),
JammerType.MillimeterWave => new MillimeterWaveJammer(
JammingType.MillimeterWave => new MillimeterWaveJammer(
jammerId,
data.MillimeterWaveJammerConfig,
motionParameters,

View File

@ -135,7 +135,7 @@ namespace ThreatSource.Guidance
backgroundIntensity: guidanceConfig.BackgroundIntensity,
wavelength: guidanceConfig.WaveLength
);
InitializeJamming(guidanceConfig.JammingResistanceThreshold, [JammingType.Infrared, JammingType.SmokeScreen]);
InitializeJamming(guidanceConfig.JammingResistanceThreshold, [JammingType.Infrared, JammingType.SmokeGrenade]);
SwitchToSearchMode(); // 初始化为搜索模式
}
@ -159,7 +159,7 @@ namespace ThreatSource.Guidance
// 调用基类处理硬干扰状态
base.HandleJammingApplied(parameters);
}
else if (parameters.Type == JammingType.SmokeScreen)
else if (parameters.Type == JammingType.SmokeGrenade)
{
if (SimulationManager.GetEntityById(parameters.JammerId) is SmokeGrenade smokeGrenade)
{
@ -198,7 +198,7 @@ namespace ThreatSource.Guidance
Debug.WriteLine("红外引导系统干扰已清除");
// 干扰清除后的恢复逻辑
}
else if (parameters.Type == JammingType.SmokeScreen)
else if (parameters.Type == JammingType.SmokeGrenade)
{
SmokeAttenuation = 1.0; // Reset smoke attenuation
Debug.WriteLine("[烟幕干扰清除 IR]");

View File

@ -166,7 +166,7 @@ namespace ThreatSource.Guidance
// 初始化加速度平滑处理
PreviousGuidanceAcceleration = Vector3D.Zero;
InitializeJamming(guidanceConfig.JammingResistanceThreshold, [JammingType.Laser, JammingType.SmokeScreen, JammingType.Decoy]);
InitializeJamming(guidanceConfig.JammingResistanceThreshold, [JammingType.Laser, JammingType.SmokeGrenade, JammingType.LaserDecoy]);
}
/// <summary>
@ -292,13 +292,13 @@ namespace ThreatSource.Guidance
LaserIlluminationOn = false; // 无法确认照射状态
// 不需要再次设置 HasGuidance = false
}
else if (parameters.Type == JammingType.SmokeScreen)
else if (parameters.Type == JammingType.SmokeGrenade)
{
// 计算并应用烟幕衰减
SmokeAttenuation = CalculateSmokeAttenuation(parameters);
Debug.WriteLine($"[LASER_SEMI_ACTIVE] 烟幕干扰应用,衰减因子: {SmokeAttenuation:P2}", "Jamming");
}
else if (parameters.Type == JammingType.Decoy)
else if (parameters.Type == JammingType.LaserDecoy)
{
if (parameters.JammerId != null && parameters.SourceId != null)
{
@ -327,12 +327,12 @@ namespace ThreatSource.Guidance
// 不需要设置 HasGuidance = true, 基类可能已处理
// 激光照射状态 LaserIlluminationOn 会在收到下一个有效 Update 事件时恢复
}
else if (parameters.Type == JammingType.SmokeScreen)
else if (parameters.Type == JammingType.SmokeGrenade)
{
SmokeAttenuation = 1.0; // 重置烟幕衰减
Debug.WriteLine($"[LASER_SEMI_ACTIVE] 烟幕干扰已清除。", "Jamming");
}
else if (parameters.Type == JammingType.Decoy)
else if (parameters.Type == JammingType.LaserDecoy)
{
if (parameters.JammerId != null)
{

View File

@ -146,7 +146,7 @@ namespace ThreatSource.Guidance
: base(id, maxAcceleration, guidanceCoefficient, simulationManager)
{
this.config = config;
InitializeJamming(config.JammingResistanceThreshold, [JammingType.MillimeterWave, JammingType.SmokeScreen]);
InitializeJamming(config.JammingResistanceThreshold, [JammingType.MillimeterWave, JammingType.SmokeGrenade]);
SwitchToSearchMode(); // 初始化为搜索模式
}
@ -238,7 +238,7 @@ namespace ThreatSource.Guidance
SwitchToSearchMode();
}
}
else if (parameters.Type == JammingType.SmokeScreen)
else if (parameters.Type == JammingType.SmokeGrenade)
{
// 计算烟幕透过率
// TODO: 实现基于 JammingParameters 中烟幕属性 (浓度、厚度等) 的真实透过率计算。
@ -260,7 +260,7 @@ namespace ThreatSource.Guidance
Debug.WriteLine($"[MMW_GUIDANCE] 毫米波干扰已清除。", "Jamming");
// 干扰清除后是否需要切换模式取决于当前是否有目标。Update 会处理。
}
else if (parameters.Type == JammingType.SmokeScreen)
else if (parameters.Type == JammingType.SmokeGrenade)
{
_currentSmokeTransmittance = 1.0; // 重置烟幕透过率
Debug.WriteLine($"[MMW_GUIDANCE] 烟幕干扰已清除。", "Jamming");

View File

@ -144,7 +144,7 @@ namespace ThreatSource.Indicator
protected virtual void HandleJammingApplied(JammingParameters parameters)
{
// 如果是烟幕干扰,重新计算遮挡状态
if (parameters.Type == JammingType.SmokeScreen)
if (parameters.Type == JammingType.SmokeGrenade)
{
RecalculateObscurationStatus();
Debug.WriteLine($"[BaseIndicator] 烟幕状态更新IsTargetObscured: {IsTargetObscured}", "Jamming");
@ -164,7 +164,7 @@ namespace ThreatSource.Indicator
protected virtual void HandleJammingCleared(JammingParameters parameters)
{
// 如果是烟幕干扰,重新计算遮挡状态
if (parameters.Type == JammingType.SmokeScreen)
if (parameters.Type == JammingType.SmokeGrenade)
{
RecalculateObscurationStatus();
Debug.WriteLine($"[BaseIndicator] 烟幕状态更新IsTargetObscured: {IsTargetObscured}", "Jamming");

View File

@ -28,7 +28,7 @@ namespace ThreatSource.Indicator
/// 红外测角仪支持的干扰类型:
/// - 红外干扰
/// </remarks>
public override IEnumerable<JammingType> SupportedJammingTypes => [JammingType.Infrared, JammingType.SmokeScreen];
public override IEnumerable<JammingType> SupportedJammingTypes => [JammingType.Infrared, JammingType.SmokeGrenade];
/// <summary>
/// 红外测角仪配置参数

View File

@ -25,7 +25,7 @@ namespace ThreatSource.Indicator
/// 激光驾束仪支持的干扰类型:
/// - 激光干扰
/// </remarks>
public override IEnumerable<JammingType> SupportedJammingTypes => [JammingType.Laser, JammingType.SmokeScreen];
public override IEnumerable<JammingType> SupportedJammingTypes => [JammingType.Laser, JammingType.SmokeGrenade];
/// <summary>
/// 获取或设置干扰阈值,单位:分贝

View File

@ -25,7 +25,7 @@ namespace ThreatSource.Indicator
/// 激光目标指示器支持的干扰类型:
/// - 激光干扰
/// </remarks>
public override IEnumerable<JammingType> SupportedJammingTypes => [JammingType.Laser, JammingType.SmokeScreen];
public override IEnumerable<JammingType> SupportedJammingTypes => [JammingType.Laser, JammingType.SmokeGrenade];
/// <summary>
/// 获取或设置干扰阈值,单位:分贝

View File

@ -159,7 +159,7 @@ namespace ThreatSource.Jammable
}
// 烟幕干扰总是有效,如果支持的话
if (parameters.Type == JammingType.SmokeScreen)
if (parameters.Type == JammingType.SmokeGrenade)
{
Debug.WriteLine($"[干扰有效性检查] 烟幕干扰有效。");
return true;

View File

@ -20,15 +20,10 @@ namespace ThreatSource.Jammer
/// </summary>
protected JammingParameters? CurrentParameters { get; set; }
/// <summary>
/// 干扰器类型
/// </summary>
protected abstract JammerType Type { get; }
/// <summary>
/// 支持的干扰类型
/// </summary>
protected abstract JammingType[] SupportedJammingTypes { get; }
protected abstract JammingType JammingType { get; }
/// <summary>
/// 干扰器状态
@ -89,7 +84,6 @@ namespace ThreatSource.Jammer
{
return new JammerRunningState
{
Type = Type,
State = State,
CurrentParameters = CurrentParameters,
IsJamming = IsJamming
@ -103,7 +97,7 @@ namespace ThreatSource.Jammer
public virtual void StartJamming(JammingParameters parameters)
{
// 检查是否是该类型的干扰
if (!SupportedJammingTypes.Contains(parameters.Type))
if (JammingType != parameters.Type)
{
Console.WriteLine($"干扰器 {Id} 不支持 {parameters.Type} 类型的干扰");
return;
@ -226,7 +220,7 @@ namespace ThreatSource.Jammer
/// <returns>干扰器状态信息</returns>
public override string GetStatus()
{
return base.GetStatus() + $"干扰器状态:{State}, type: {Type}, isJamming: {IsJamming}\n";
return base.GetStatus() + $"干扰器状态:{State}, type: {JammingType}, isJamming: {IsJamming}\n";
}
}
}

View File

@ -46,11 +46,6 @@ namespace ThreatSource.Jammer
/// </remarks>
public struct JammerRunningState
{
/// <summary>
/// 干扰器类型
/// </summary>
public JammerType Type { get; set; }
/// <summary>
/// 干扰器工作状态
/// </summary>
@ -67,42 +62,6 @@ namespace ThreatSource.Jammer
public bool IsJamming { get; set; }
}
/// <summary>
/// 干扰器类型枚举
/// </summary>
public enum JammerType
{
/// <summary>
/// 激光干扰器
/// </summary>
Laser,
/// <summary>
/// 激光诱偏目标
/// </summary>
LaserDecoy,
/// <summary>
/// 红外干扰器
/// </summary>
Infrared,
/// <summary>
/// 紫外干扰器
/// </summary>
Ultraviolet,
/// <summary>
/// 毫米波干扰器
/// </summary>
MillimeterWave,
/// <summary>
/// 烟幕弹
/// </summary>
SmokeGrenade
}
/// <summary>
/// 干扰器工作状态枚举
/// </summary>

View File

@ -15,15 +15,10 @@ namespace ThreatSource.Jammer
/// </summary>
public readonly InfraredJammerConfig config;
/// <summary>
/// 干扰器类型
/// </summary>
protected override JammerType Type => JammerType.Infrared;
/// <summary>
/// 支持的干扰类型
/// </summary>
protected override JammingType[] SupportedJammingTypes => [JammingType.Infrared];
protected override JammingType JammingType => JammingType.Infrared;
/// <summary>
/// 初始化红外干扰器的新实例
@ -45,12 +40,12 @@ namespace ThreatSource.Jammer
{
return new JammingParameters
{
Type = JammingType.Infrared,
JammerId = Id,
Type = Jammer.JammingType.Infrared,
JammerId = base.Id,
Power = config.Power,
Wavelength = config.Wavelength,
Direction = Orientation.ToVector(),
SourcePosition = Position,
Direction = base.Orientation.ToVector(),
SourcePosition = base.Position,
AngleRange = config.AngleRange,
Mode = config.Mode,
Duration = config.Duration,

View File

@ -176,21 +176,16 @@ namespace ThreatSource.Jammer
/// 激光干扰
/// </summary>
Laser,
/// <summary>
/// 射频干扰
/// </summary>
RadioFrequency,
/// <summary>
/// 诱偏干扰
/// </summary>
Decoy,
LaserDecoy,
/// <summary>
/// 烟幕干扰
/// </summary>
SmokeScreen
SmokeGrenade
}
/// <summary>

View File

@ -11,15 +11,10 @@ namespace ThreatSource.Jammer
/// </remarks>
public class LaserDecoy : BaseJammer
{
/// <summary>
/// 获取干扰器类型
/// </summary>
protected override JammerType Type => JammerType.LaserDecoy;
/// <summary>
/// 支持的干扰类型
/// </summary>
protected override JammingType[] SupportedJammingTypes => [JammingType.Decoy];
protected override JammingType JammingType => JammingType.LaserDecoy;
/// <summary>
/// 激光诱偏目标配置
@ -56,15 +51,15 @@ namespace ThreatSource.Jammer
return new JammingParameters
{
Type = JammingType.Decoy,
Type = Jammer.JammingType.LaserDecoy,
Mode = config.Mode,
JammerId = Id,
JammerId = base.Id,
SourceId = SourceId,
Power = config.Power,
Wavelength = config.Wavelength,
SourcePosition = sourcePosition,
Direction = Orientation.ToVector(),
DecoyPosition = Position,
Direction = base.Orientation.ToVector(),
DecoyPosition = base.Position,
AngleRange = config.DivergenceAngle,
Duration = config.Duration,
ReflectiveArea = config.ReflectiveArea,

View File

@ -10,15 +10,10 @@ namespace ThreatSource.Jammer
/// </summary>
public class LaserJammer : BaseJammer
{
/// <summary>
/// 干扰器类型
/// </summary>
protected override JammerType Type => JammerType.Laser;
/// <summary>
/// 支持的干扰类型
/// </summary>
protected override JammingType[] SupportedJammingTypes => [JammingType.Laser];
protected override JammingType JammingType => JammingType.Laser;
/// <summary>
/// 激光干扰器配置
@ -45,12 +40,12 @@ namespace ThreatSource.Jammer
{
return new JammingParameters
{
Type = JammingType.Laser,
JammerId = Id,
Type = Jammer.JammingType.Laser,
JammerId = base.Id,
Power = config.Power,
Wavelength = config.Wavelength,
Direction = Orientation.ToVector(),
SourcePosition = Position,
Direction = base.Orientation.ToVector(),
SourcePosition = base.Position,
Mode = config.Mode,
Duration = config.Duration,
StartTime = DateTime.UtcNow

View File

@ -10,15 +10,10 @@ namespace ThreatSource.Jammer
/// </summary>
public class MillimeterWaveJammer : BaseJammer
{
/// <summary>
/// 干扰器类型
/// </summary>
protected override JammerType Type => JammerType.MillimeterWave;
/// <summary>
/// 支持的干扰类型
/// </summary>
protected override JammingType[] SupportedJammingTypes => [JammingType.MillimeterWave];
protected override JammingType JammingType => JammingType.MillimeterWave;
/// <summary>
/// 毫米波干扰器配置
@ -45,12 +40,12 @@ namespace ThreatSource.Jammer
{
return new JammingParameters
{
Type = JammingType.MillimeterWave,
JammerId = Id,
Type = Jammer.JammingType.MillimeterWave,
JammerId = base.Id,
Power = config.Power,
Wavelength = config.Wavelength,
Direction = Orientation.ToVector(),
SourcePosition = Position,
Direction = base.Orientation.ToVector(),
SourcePosition = base.Position,
Mode = config.Mode,
Duration = config.Duration,
StartTime = DateTime.UtcNow

View File

@ -17,15 +17,10 @@ namespace ThreatSource.Jammer
/// </summary>
public readonly SmokeGrenadeConfig config;
/// <summary>
/// 获取干扰器类型
/// </summary>
protected override JammerType Type => JammerType.SmokeGrenade;
/// <summary>
/// 支持的干扰类型
/// </summary>
protected override JammingType[] SupportedJammingTypes => [JammingType.SmokeScreen];
protected override JammingType JammingType => JammingType.SmokeGrenade;
/// <summary>
/// 初始化烟幕弹实例
@ -52,12 +47,12 @@ namespace ThreatSource.Jammer
{
return new JammingParameters
{
Type = JammingType.SmokeScreen,
Type = Jammer.JammingType.SmokeGrenade,
Mode = config.Mode,
JammerId = Id,
JammerId = base.Id,
Power = 0, // 烟幕不需要功率参数
Direction = Orientation.ToVector(),
SourcePosition = Position,
Direction = base.Orientation.ToVector(),
SourcePosition = base.Position,
AngleRange = 2 * Math.PI, // 烟幕为全方位效果
Duration = config.Duration,
StartTime = DateTime.UtcNow,

View File

@ -92,7 +92,7 @@ namespace ThreatSource.Tools.MissileSimulation
missileJammingMap["LBRM_1"] = new List<(JammingType, string, string, string, string)>
{
(JammingType.Laser, "激光干扰", "LaserJammer_Designator", "阻塞", "指示器"),
(JammingType.SmokeScreen, "烟幕弹", "SG_1", "遮蔽", "两者")
(JammingType.SmokeGrenade, "烟幕弹", "SG_1", "遮蔽", "两者")
};
// 激光半主动制导导弹
@ -100,29 +100,29 @@ namespace ThreatSource.Tools.MissileSimulation
{
(JammingType.Laser, "激光干扰(指示器)", "LaserJammer_Designator", "阻塞", "指示器"),
(JammingType.Laser, "激光干扰(导弹)", "LaserJammer_Missile", "阻塞", "导弹"),
(JammingType.Decoy, "激光诱偏目标", "LDY_1", "欺骗", "导弹"),
(JammingType.SmokeScreen, "烟幕弹", "SG_1", "遮蔽", "两者")
(JammingType.LaserDecoy, "激光诱偏目标", "LDY_1", "欺骗", "导弹"),
(JammingType.SmokeGrenade, "烟幕弹", "SG_1", "遮蔽", "两者")
};
// 红外指令制导导弹
missileJammingMap["ICGM_1"] = new List<(JammingType, string, string, string, string)>
{
(JammingType.Infrared, "红外干扰", "InfraredJammer_Designator", "阻塞", "指示器"),
(JammingType.SmokeScreen, "烟幕弹", "SG_2", "遮蔽", "指示器")
(JammingType.SmokeGrenade, "烟幕弹", "SG_2", "遮蔽", "指示器")
};
// 红外成像末制导导弹
missileJammingMap["ITGM_1"] = new List<(JammingType, string, string, string, string)>
{
(JammingType.Infrared, "红外干扰", "InfraredJammer_Missile", "阻塞", "导弹"),
(JammingType.SmokeScreen, "红外烟幕弹", "SG_2", "遮蔽", "导弹")
(JammingType.SmokeGrenade, "红外烟幕弹", "SG_2", "遮蔽", "导弹")
};
// 毫米波末制导导弹
missileJammingMap["MMWG_1"] = new List<(JammingType, string, string, string, string)>
{
(JammingType.MillimeterWave, "毫米波干扰", "MillimeterWaveJammer_Missile", "阻塞", "导弹"),
(JammingType.SmokeScreen, "烟幕弹", "SG_1", "遮蔽", "导弹")
(JammingType.SmokeGrenade, "烟幕弹", "SG_1", "遮蔽", "导弹")
};
// 末敏子弹药
@ -132,7 +132,7 @@ namespace ThreatSource.Tools.MissileSimulation
(JammingType.Infrared, "红外干扰", "InfraredJammer_Missile", "阻塞", "子弹药"),
(JammingType.MillimeterWave, "毫米波干扰", "MillimeterWaveJammer_Submunition", "阻塞", "子弹药"),
(JammingType.MillimeterWave, "毫米波假信号", "MillimeterWaveJammer_Submunition", "欺骗", "子弹药"),
(JammingType.SmokeScreen, "烟幕弹", "SG_3", "遮蔽", "子弹药")
(JammingType.SmokeGrenade, "烟幕弹", "SG_3", "遮蔽", "子弹药")
};
}
@ -749,7 +749,7 @@ namespace ThreatSource.Tools.MissileSimulation
case JammingType.MillimeterWave:
jammerId = "MillimeterWaveJammer_Missile"; // 假设这个也可以用于指示器
break;
case JammingType.SmokeScreen:
case JammingType.SmokeGrenade:
if (indicator.Id.Contains("LD"))
jammerId = "SG_1"; // 激光烟幕
else if (indicator.Id.Contains("IR"))
@ -757,7 +757,7 @@ namespace ThreatSource.Tools.MissileSimulation
else
jammerId = "SG_3"; // 默认烟幕
break;
case JammingType.Decoy:
case JammingType.LaserDecoy:
jammerId = "LDY_1";
break;
}
@ -832,7 +832,7 @@ namespace ThreatSource.Tools.MissileSimulation
else
jammerId = "MillimeterWaveJammer_Missile";
break;
case JammingType.SmokeScreen:
case JammingType.SmokeGrenade:
if (missile.Id.Contains("ITGM") || missile.Id.Contains("ICGM"))
jammerId = "SG_2"; // 红外烟幕用于红外导弹
else if (missile.Id.Contains("TSM"))
@ -840,7 +840,7 @@ namespace ThreatSource.Tools.MissileSimulation
else
jammerId = "SG_1"; // 默认烟幕
break;
case JammingType.Decoy:
case JammingType.LaserDecoy:
jammerId = "LDY_1";
break;
}
@ -917,7 +917,7 @@ namespace ThreatSource.Tools.MissileSimulation
{
switch (type)
{
case JammingType.SmokeScreen:
case JammingType.SmokeGrenade:
if (category == "水平烟幕弹")
{
jammers["SG_1"].Activate();
@ -931,7 +931,7 @@ namespace ThreatSource.Tools.MissileSimulation
jammers["SG_3"].Activate();
}
break;
case JammingType.Decoy:
case JammingType.LaserDecoy:
jammers["LDY_1"].Activate();
break;
}