155 lines
5.1 KiB
C#
155 lines
5.1 KiB
C#
using ThreatSource.Simulation;
|
||
using ThreatSource.Guidance;
|
||
using ThreatSource.Utils;
|
||
using ThreatSource.Equipment;
|
||
|
||
namespace ThreatSource.Missile
|
||
{
|
||
/// <summary>
|
||
/// 红外成像末制导导弹类,继承自基础导弹类
|
||
/// </summary>
|
||
/// <remarks>
|
||
/// 该类提供了红外成像末制导导弹的完整实现:
|
||
/// - 继承自BaseMissile,具备基本的导弹功能
|
||
/// - 实现了红外成像制导系统
|
||
/// - 支持多阶段飞行控制
|
||
/// - 具备红外目标识别能力
|
||
/// - 提供精确的末制导打击能力
|
||
///
|
||
/// 工作流程:
|
||
/// 1. 导弹发射并进入发射阶段
|
||
/// 2. 切换到巡航阶段,进行中程飞行
|
||
/// 3. 进入末制导阶段,启动红外成像制导
|
||
/// 4. 接近目标后引爆或达到自毁条件后自毁
|
||
/// </remarks>
|
||
public class InfraredImagingTerminalGuidedMissile : BaseMissile
|
||
{
|
||
/// <summary>
|
||
/// 红外成像制导系统实例
|
||
/// </summary>
|
||
/// <remarks>
|
||
/// 负责处理红外图像信息
|
||
/// 计算制导指令
|
||
/// 控制导弹的飞行路径
|
||
/// </remarks>
|
||
private readonly InfraredImagingGuidanceSystem guidanceSystem;
|
||
|
||
/// <summary>
|
||
/// 末制导开始距离,单位:米
|
||
/// </summary>
|
||
/// <remarks>
|
||
/// 当导弹与目标的距离小于此值时
|
||
/// 导弹将进入末制导阶段
|
||
/// 启动红外成像制导系统
|
||
/// </remarks>
|
||
private const double TERMINAL_GUIDANCE_DISTANCE = 1000;
|
||
|
||
/// <summary>
|
||
/// 初始化红外成像末制导导弹的新实例
|
||
/// </summary>
|
||
/// <param name="missileId">导弹ID</param>
|
||
/// <param name="targetType">目标类型</param>
|
||
/// <param name="properties">导弹属性配置</param>
|
||
/// <param name="launchParams">发射参数</param>
|
||
/// <param name="guidanceConfig">红外成像导引配置</param>
|
||
/// <param name="manager">仿真管理器实例</param>
|
||
/// <remarks>
|
||
/// 构造过程:
|
||
/// - 初始化基本属性
|
||
/// - 创建制导系统
|
||
/// - 配置制导参数
|
||
/// - 设置初始飞行阶段
|
||
/// </remarks>
|
||
public InfraredImagingTerminalGuidedMissile(
|
||
string missileId,
|
||
EquipmentType targetType,
|
||
MissileProperties properties,
|
||
KinematicState launchParams,
|
||
InfraredImagingGuidanceConfig guidanceConfig,
|
||
ISimulationManager manager)
|
||
: base(missileId, properties, launchParams, manager)
|
||
{
|
||
guidanceSystem = new InfraredImagingGuidanceSystem(
|
||
missileId + "_guidance",
|
||
missileId,
|
||
guidanceConfig,
|
||
targetType,
|
||
properties.MaxAcceleration,
|
||
properties.ProportionalNavigationCoefficient,
|
||
manager
|
||
);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 更新制导阶段的状态
|
||
/// </summary>
|
||
/// <param name="deltaTime">时间步长,单位:秒</param>
|
||
/// <remarks>
|
||
/// 制导阶段特点:
|
||
/// - 完全依赖导航系统的工作模式
|
||
/// - 根据导航系统状态更新制导
|
||
/// - 持续到命中目标
|
||
/// </remarks>
|
||
protected override void OnGuidanceStage(double deltaTime)
|
||
{
|
||
// 激活制导系统
|
||
if(!guidanceSystem.IsActive)
|
||
{
|
||
guidanceSystem.Activate();
|
||
KState.Orientation = new Orientation(KState.Orientation.Yaw, -0.1, KState.Orientation.Roll);
|
||
KState.Velocity = KState.Orientation.ToVector() * KState.Speed;
|
||
}
|
||
|
||
// 更新制导系统
|
||
guidanceSystem.Update(deltaTime);
|
||
GuidanceAcceleration = guidanceSystem.GetGuidanceAcceleration();
|
||
IsGuidance = guidanceSystem.HasGuidance;
|
||
|
||
base.OnGuidanceStage(deltaTime);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 激活导弹
|
||
/// </summary>
|
||
/// <remarks>
|
||
/// 激活过程:
|
||
/// - 调用基类激活方法
|
||
/// - 激活制导系统
|
||
/// </remarks>
|
||
public override void Activate()
|
||
{
|
||
base.Activate();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 停用导弹
|
||
/// </summary>
|
||
/// <remarks>
|
||
/// 停用过程:
|
||
/// - 调用基类停用方法
|
||
/// - 停用制导系统
|
||
/// </remarks>
|
||
public override void Deactivate()
|
||
{
|
||
base.Deactivate();
|
||
guidanceSystem.Deactivate();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取导弹状态信息
|
||
/// </summary>
|
||
/// <returns>包含导弹状态的详细描述</returns>
|
||
/// <remarks>
|
||
/// 返回信息包括:
|
||
/// - 基本状态信息
|
||
/// - 当前飞行阶段
|
||
/// </remarks>
|
||
public override ElementStatusInfo GetStatusInfo()
|
||
{
|
||
var statusInfo = base.GetStatusInfo();
|
||
statusInfo.ExtendedProperties["GuidanceSystem"] = guidanceSystem.GetStatusInfo();
|
||
return statusInfo;
|
||
}
|
||
}
|
||
}
|