using ActiveProtect.Models; namespace ActiveProtect.SimulationEnvironment { public class SimulationConfig { public List TankConfigs { get; set; } public List MissileConfigs { get; set; } public List 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 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 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; } /// /// 导弹飞行阶段的配置结构 /// /// /// 初始化飞行阶段配置 /// 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; /// /// 标准导弹的预设配置, 所有阶段都启用 /// public static FlightStageConfig StandardMissile => new(enableLaunch: true, enableAcceleration: true, enableCruise: true, enableTerminalGuidance: true, enableAttack: true); /// /// 激光制导炮弹的预设配置, 没有加速阶段 /// public static FlightStageConfig LaserGuidedShell => new(enableAcceleration: false); /// /// 短程导弹的预设配置,没有巡航阶段 /// public static FlightStageConfig ShortRangeMissile => new(enableCruise: false); /// /// 激光半主动制导导弹的预设配置, 没有加速阶段 /// public static FlightStageConfig LaserSemiActiveGuidedMissile => new(enableAcceleration: false); } } 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; // 每秒增加的功率 } }