ActiveProtect/SimulationEnvironment/SimulationConfig.cs

194 lines
7.1 KiB
C#

using System.ComponentModel;
using ActiveProtect.Models;
namespace ActiveProtect.SimulationEnvironment
{
public class SimulationConfig
{
public List<TankConfig> TankConfigs { get; set; }
public List<MissileConfig> MissileConfigs { get; set; }
public List<LaserDesignatorConfig> LaserDesignatorConfigs { get; set; }
public LaserWarnerConfig LaserWarnerConfig { get; set; }
public LaserJammerConfig LaserJammerConfig { get; set; }
public double SimulationTimeStep { get; set; }
public SimulationConfig()
{
TankConfigs = [];
MissileConfigs = [];
LaserDesignatorConfigs = [];
LaserWarnerConfig = new LaserWarnerConfig();
LaserJammerConfig = new LaserJammerConfig();
SimulationTimeStep = 0.1; // 默认时间步长为0.1秒
}
}
public class TankConfig
{
public Vector3D InitialPosition { get; set; }
public Orientation InitialOrientation { get; set; }
public double InitialSpeed { get; set; }
public double MaxSpeed { get; set; }
public double MaxArmor { get; set; }
public bool HasLaserWarner { get; set; }
public bool HasLaserJammer { get; set; }
public TankConfig()
{
InitialPosition = new Vector3D(0, 0, 0);
InitialOrientation = new Orientation(0, 0, 0);
}
}
public class MissileConfig
{
public Vector3D InitialPosition { get; set; }
public Orientation InitialOrientation { get; set; }
public double InitialSpeed { get; set; }
public double MaxSpeed { get; set; }
public int TargetIndex { get; set; }
public double MaxFlightTime { get; set; }
public double MaxFlightDistance { get; set; }
public double MaxAcceleration { get; set; }
public double ProportionalNavigationCoefficient { get; set; }
public FlightStageConfig StageConfig { get; set; }
public MissileDistanceParams DistanceParams { get; set; }
public double ThrustAcceleration { get; set; }
public double MaxEngineBurnTime { get; set; }
public double Mass { get; set; }
public MissileType Type { get; set; }
public MissileConfig()
{
InitialPosition = new Vector3D(0, 0, 0); // 初始位
InitialOrientation = new Orientation(0, 0, 0); // 初始方向
InitialSpeed = 0; // 初始速度
MaxSpeed = 0; // 最大速度
TargetIndex = 0; // 目标索引
MaxFlightTime = 0; // 最大飞行时间
MaxFlightDistance = 0; // 最大飞行距离
StageConfig = FlightStageConfig.StandardMissile; // 飞行阶段配置
ThrustAcceleration = 0; // 推力加速度
MaxEngineBurnTime = 0; // 最大发动机燃烧时间
MaxAcceleration = 0; // 最大加速度
DistanceParams = new MissileDistanceParams(0, 0, 0); // 距离参数
ProportionalNavigationCoefficient = 0; // 比例导引系数
Type = MissileType.StandardMissile; // 导弹类型
}
}
public class LaserDesignatorConfig
{
public Vector3D InitialPosition { get; set; }
public double MaxIlluminationRange { get; set; }
public LaserDesignatorConfig()
{
InitialPosition = new Vector3D(0, 0, 0);
MaxIlluminationRange = 1000;
}
}
public enum MissileType
{
StandardMissile, // 标准导弹
LaserSemiActiveGuidance, // 激光半主动制导
LaserBeamRiderGuidance, // 激光驾束制导
InfraredCommandGuidance, // 红外指令制导
InfraredImagingTerminalGuidance, // 红外成像末制导
MillimeterWaveTerminalGuidance // 毫米波末制导
}
public struct MissileDistanceParams(double terminalGuidanceDistance, double attackDistance, double explosionDistance)
{
public double TerminalGuidanceDistance { get; set; } = terminalGuidanceDistance;
public double AttackDistance { get; set; } = attackDistance;
public double ExplosionDistance { get; set; } = explosionDistance;
}
/// <summary>
/// 导弹飞行的各个阶段
/// </summary>
public enum FlightStage
{
Launch, // 发射阶段
Acceleration, // 加速阶段
Cruise, // 巡航阶段
TerminalGuidance, // 终端制导阶段
Attack, // 攻击阶段
Explosion, // 爆炸阶段
}
/// <summary>
/// 导弹飞行阶段的配置结构
/// </summary>
/// <remarks>
/// 初始化飞行阶段配置
/// </remarks>
public struct FlightStageConfig(bool enableLaunch = true, bool enableAcceleration = true, bool enableCruise = true,
bool enableTerminalGuidance = true, bool enableAttack = true)
{
public bool EnableLaunch = enableLaunch;
public bool EnableAcceleration = enableAcceleration;
public bool EnableCruise = enableCruise;
public bool EnableTerminalGuidance = enableTerminalGuidance;
public bool EnableAttack = enableAttack;
/// <summary>
/// 标准导弹的预设配置, 所有阶段都启用
/// </summary>
public static FlightStageConfig StandardMissile => new(true, true, true, true, true);
/// <summary>
/// 激光半主动制导导弹的预设配置, 没有加速阶段
/// </summary>
public static FlightStageConfig LaserSemiActiveGuidedMissile => new(true, false, true, true, true);
/// <summary>
/// 激光驾束制导导弹的预设配置,没有巡航阶段
/// </summary>
public static FlightStageConfig LaserBeamRiderGuidance => new(true, true, false, true, true);
/// <summary>
/// 红外指令制导导弹的预设配置,没有巡航阶段
/// </summary>
public static FlightStageConfig InfraredCommandGuidance => new(true, true, false, true, true);
/// <summary>
/// 红外成像末制导导弹的预设配置
/// </summary>
public static FlightStageConfig InfraredImagingTerminalGuidance => new(true, true, true, true, true);
/// <summary>
/// 毫米波末制导导弹的预设配置
/// </summary>
public static FlightStageConfig MillimeterWaveTerminalGuidance => new(true, true, true, true, true);
}
public class LaserWarnerConfig
{
public double AlarmDuration { get; set; }
public LaserWarnerConfig()
{
AlarmDuration = 5.0; // 默认警报持续5秒
}
}
public class LaserJammerConfig
{
public double MaxJammingCooldown { get; set; }
public double MaxJammingPower { get; set; }
public double InitialJammingPower { get; set; }
public double PowerIncreaseRate { get; set; }
public LaserJammerConfig()
{
MaxJammingCooldown = 5.0;
MaxJammingPower = 10000.0;
InitialJammingPower = 4000.0;
PowerIncreaseRate = 2000.0; // 每秒增加的功率
}
}
}