143 lines
4.7 KiB
C#
143 lines
4.7 KiB
C#
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;
|
||
}
|
||
}
|
||
}
|