ThreatSourceLibaray/ThreatSource/src/MIssile/LaserBeamRiderMissile.cs

143 lines
4.7 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.Utils;
using ThreatSource.Guidance;
using ThreatSource.Indicator;
namespace ThreatSource.Missile
{
/// <summary>
/// 激光波束制导导弹类,实现了激光波束跟踪制导的导弹功能
/// </summary>
/// <remarks>
/// 该类提供了激光波束制导导弹的核心功能:
/// - 激光波束跟踪
/// - 波束制导控制
/// - 飞行阶段管理
/// - 状态监控和事件处理
/// 通过跟踪激光波束的中心线实现对导弹的制导控制
/// </remarks>
public class LaserBeamRiderMissile : BaseMissile
{
/// <summary>
/// 激光波束制导系统实例
/// </summary>
/// <remarks>
/// 负责处理波束跟踪和制导计算
/// 包含波束偏差修正和制导律计算
/// </remarks>
private readonly LaserBeamRiderGuidanceSystem guidanceSystem;
/// <summary>
/// 初始化激光驾束制导导弹的新实例
/// </summary>
/// <param name="missileId">导弹ID</param>
/// <param name="properties">导弹属性配置</param>
/// <param name="launchParams">发射参数</param>
/// <param name="guidanceSystemConfig">制导系统配置</param>
/// <param name="manager">仿真管理器实例</param>
/// <remarks>
/// 构造过程:
/// - 初始化基本属性
/// - 创建制导系统
/// - 配置制导参数
/// </remarks>
public LaserBeamRiderMissile(
string missileId,
MissileProperties properties,
KinematicState launchParams,
LaserBeamRiderGuidanceSystemConfig guidanceSystemConfig,
ISimulationManager manager)
: base(missileId, properties, launchParams, manager)
{
guidanceSystem = new LaserBeamRiderGuidanceSystem(
missileId + "_guidance",
missileId,
properties.MaxAcceleration,
properties.ProportionalNavigationCoefficient,
guidanceSystemConfig,
manager);
// 设置制导系统引用到基类
SetGuidanceSystem(guidanceSystem);
}
/// <summary>
/// 更新制导阶段状态
/// </summary>
/// <param name="deltaTime">时间步长,单位:秒</param>
/// <remarks>
/// 制导阶段处理:
/// - 启用制导控制
/// - 制导加速度和状态由基类自动处理
/// - 制导系统作为独立实体由仿真管理器更新
/// </remarks>
protected override void OnGuidanceStage(double deltaTime)
{
// 激活制导系统
if(!guidanceSystem.IsActive)
{
guidanceSystem.Activate();
}
// 制导系统作为独立实体由仿真管理器更新不需要在这里手动调用Update
// 调用基类方法处理制导加速度和升力计算
base.OnGuidanceStage(deltaTime);
}
/// <summary>
/// 激活导弹
/// </summary>
/// <remarks>
/// 激活过程:
/// - 调用基类激活方法
/// - 注册制导系统为独立实体
/// - 激活制导系统
/// </remarks>
public override void Activate()
{
base.Activate();
// 将制导系统注册到仿真管理器
SimulationManager.RegisterEntity(guidanceSystem.Id, guidanceSystem);
// 激活制导系统
guidanceSystem.Activate();
}
/// <summary>
/// 停用导弹
/// </summary>
/// <remarks>
/// 停用过程:
/// - 调用基类停用方法
/// - 停用制导系统
/// - 注销制导系统
/// </remarks>
public override void Deactivate()
{
base.Deactivate();
// 停用制导系统
guidanceSystem.Deactivate();
// 取消制导系统注册
SimulationManager.UnregisterEntity(guidanceSystem.Id);
}
/// <summary>
/// 获取导弹状态信息
/// </summary>
/// <returns>包含导弹状态的详细描述</returns>
/// <remarks>
/// 返回信息包括:
/// - 基本状态信息(由基类提供)
/// - 制导系统状态(由基类提供)
/// </remarks>
public override ElementStatusInfo GetStatusInfo()
{
var statusInfo = base.GetStatusInfo();
// 制导系统信息现在由基类统一处理
return statusInfo;
}
}
}