84 lines
2.5 KiB
C#
84 lines
2.5 KiB
C#
using ActiveProtect.SimulationEnvironment;
|
||
using System;
|
||
|
||
namespace ActiveProtect.Models
|
||
{
|
||
public class LaserSemiActiveGuidedMissile : Missile
|
||
{
|
||
public bool IsLaserDetected { get; private set; } = false;
|
||
public bool IsLaserLocked { get; private set; } = false;
|
||
private const double LaserLockDistance = 1000; // 1公里,单位:米
|
||
|
||
public LaserSemiActiveGuidedMissile(
|
||
string id,
|
||
MissileConfig missileConfig,
|
||
ISimulationManager simulationManager)
|
||
: base(id, missileConfig, simulationManager)
|
||
{
|
||
Type = MissileType.SemiActiveLaserGuidance;
|
||
}
|
||
|
||
public override void Update(double deltaTime)
|
||
{
|
||
base.Update(deltaTime);
|
||
UpdateLaserDetection();
|
||
if (IsLaserDetected)
|
||
{
|
||
UpdateLaserLock();
|
||
IsGuidanceLost = false;
|
||
}
|
||
else
|
||
{
|
||
LoseGuidance();
|
||
}
|
||
}
|
||
|
||
private void UpdateLaserDetection()
|
||
{
|
||
var target = SimulationManager.GetEntityById(TargetId) as ILaserIlluminatable;
|
||
if (target != null)
|
||
{
|
||
IsLaserDetected = target.IsIlluminated && DistanceToTarget <= LaserLockDistance;
|
||
}
|
||
else
|
||
{
|
||
IsLaserDetected = false;
|
||
}
|
||
}
|
||
|
||
private void UpdateLaserLock()
|
||
{
|
||
IsLaserLocked = IsLaserDetected;
|
||
|
||
if (IsLaserLocked)
|
||
{
|
||
AdjustTrajectoryBasedOnLaserGuidance();
|
||
}
|
||
}
|
||
|
||
private void AdjustTrajectoryBasedOnLaserGuidance()
|
||
{
|
||
// 实现基于激光导引的轨迹调整
|
||
// 这里可以添加更精确的导引逻辑
|
||
}
|
||
|
||
protected override void LoseGuidance()
|
||
{
|
||
if (!IsLaserDetected)
|
||
{
|
||
base.LoseGuidance();
|
||
IsLaserLocked = false;
|
||
Console.WriteLine($"激光半主动制导导弹 {Id} 失去激光引导");
|
||
}
|
||
}
|
||
|
||
public override string GetStatus()
|
||
{
|
||
string baseStatus = base.GetStatus().Replace("导弹", "激光半主动制导导弹");
|
||
string additionalStatus = $"\n 激光检测: {(IsLaserDetected ? "是" : "否")}" +
|
||
$"\n 激光锁定: {(IsLaserLocked ? "是" : "否")}";
|
||
return baseStatus + additionalStatus;
|
||
}
|
||
}
|
||
}
|