ActiveProtect/Models/LaserSemiActiveGuidedMissile.cs

84 lines
2.5 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 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;
}
}
}