ActiveProtect/src/Models/MIssile/MillimeterWaveTerminalGuidedMissile.cs

122 lines
3.6 KiB
C#

using System;
using ActiveProtect.Simulation;
using ActiveProtect.Utility;
namespace ActiveProtect.Models
{
/// <summary>
/// 毫米波末制导导弹
/// </summary>
public class MillimeterWaveTerminalGuidedMissile : MissileBase
{
/// <summary>
/// 毫米波末制导导弹阶段
/// </summary>
private enum MWTG_Stage
{
Launch,
Cruise,
TerminalGuidance,
Explode,
SelfDestruct
}
private MWTG_Stage currentStage;
private readonly MillimeterWaveGuidanceSystem guidanceSystem;
private const double TERMINAL_GUIDANCE_DISTANCE = 8000; // 末制导开始距离(米)
/// <summary>
/// 毫米波末制导导弹构造函数
/// </summary>
public MillimeterWaveTerminalGuidedMissile(MissileProperties properties, ISimulationManager manager)
: base(properties, manager)
{
currentStage = MWTG_Stage.Launch;
guidanceSystem = new MillimeterWaveGuidanceSystem(properties.MaxAcceleration, properties.ProportionalNavigationCoefficient, manager);
}
/// <summary>
/// 更新毫米波末制导导弹
/// </summary>
public override void Update(double deltaTime)
{
base.Update(deltaTime);
switch (currentStage)
{
case MWTG_Stage.Launch:
UpdateLaunchStage(deltaTime);
break;
case MWTG_Stage.Cruise:
UpdateCruiseStage(deltaTime);
break;
case MWTG_Stage.TerminalGuidance:
UpdateTerminalGuidanceStage(deltaTime);
break;
case MWTG_Stage.Explode:
Explode();
break;
case MWTG_Stage.SelfDestruct:
SelfDestruct();
break;
}
if (ShouldSelfDestruct())
{
currentStage = MWTG_Stage.SelfDestruct;
}
}
/// <summary>
/// 更新发射阶段
/// </summary>
private void UpdateLaunchStage(double deltaTime)
{
if (FlightTime > 0.1) // 假设发射阶段持续1秒
{
currentStage = MWTG_Stage.Cruise;
Console.WriteLine($"导弹 {Id} 进入巡航阶段");
}
}
/// <summary>
/// 更新巡航阶段
/// </summary>
private void UpdateCruiseStage(double deltaTime)
{
if (FlightTime > 3) // 假设巡航阶段持续3秒
{
currentStage = MWTG_Stage.TerminalGuidance;
Console.WriteLine($"导弹 {Id} 进入末制导阶段");
}
}
/// <summary>
/// 更新末制导阶段
/// </summary>
private void UpdateTerminalGuidanceStage(double deltaTime)
{
HasGuidance = true;
guidanceSystem.Update(deltaTime, Position, Velocity);
GuidanceAcceleration = guidanceSystem.GetGuidanceAcceleration();
}
/// <summary>
/// 爆炸
/// </summary>
protected override void Explode()
{
base.Explode();
currentStage = MWTG_Stage.Explode;
}
/// <summary>
/// 获取导弹状态
/// </summary>
public override string GetStatus()
{
return base.GetStatus() + $"\n 当前阶段: {currentStage}, " + guidanceSystem.GetStatus();
}
}
}