161 lines
6.1 KiB
C#
161 lines
6.1 KiB
C#
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 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;
|
|
}
|
|
|
|
/// <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(enableLaunch: true, enableAcceleration: true, enableCruise: true, enableTerminalGuidance: true, enableAttack: true);
|
|
|
|
/// <summary>
|
|
/// 激光制导炮弹的预设配置, 没有加速阶段
|
|
/// </summary>
|
|
public static FlightStageConfig LaserGuidedShell => new(enableAcceleration: false);
|
|
|
|
/// <summary>
|
|
/// 短程导弹的预设配置,没有巡航阶段
|
|
/// </summary>
|
|
public static FlightStageConfig ShortRangeMissile => new(enableCruise: false);
|
|
|
|
/// <summary>
|
|
/// 激光半主动制导导弹的预设配置, 没有加速阶段
|
|
/// </summary>
|
|
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; // 每秒增加的功率
|
|
}
|
|
|
|
}
|