ThreatSourceLibaray/ThreatSource/src/MIssile/InfraredImagingTerminalGuidedMissile.cs

155 lines
5.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}