用ElementStatusInfo类,统一实现运行态信息返回,同时修改GetStatus方法
This commit is contained in:
parent
75cbcaa104
commit
af88ac64ad
@ -81,8 +81,8 @@ namespace ThreatSource.Tests.Jamming
|
||||
|
||||
// Assert
|
||||
Assert.IsTrue(_infraredTracker.IsJammed, "红外测角仪应该处于被干扰状态");
|
||||
var status = _infraredTracker.GetStatus();
|
||||
Assert.IsTrue(status.Contains("干扰/遮挡状态: 受红外干扰"), "状态信息应该反映受干扰");
|
||||
ElementStatusInfo statusInfo = _infraredTracker.GetStatusInfo();
|
||||
Assert.IsTrue(statusInfo.ExtendedProperties.ContainsKey("IsJammed"), "状态信息应该反映受干扰");
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
@ -111,8 +111,8 @@ namespace ThreatSource.Tests.Jamming
|
||||
|
||||
// Assert
|
||||
Assert.IsFalse(_infraredTracker.IsJammed, "测角仪不应该被干扰,因为干扰源不在角度范围内");
|
||||
var status = _infraredTracker.GetStatus();
|
||||
Assert.IsTrue(status.Contains("干扰/遮挡状态: 正常"), "状态信息应该反映正常");
|
||||
ElementStatusInfo statusInfo = _infraredTracker.GetStatusInfo();
|
||||
Assert.IsTrue(statusInfo.ExtendedProperties.ContainsKey("IsJammed"), "状态信息应该反映正常");
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
|
||||
@ -99,8 +99,8 @@ namespace ThreatSource.Tests.Jamming
|
||||
|
||||
// Assert
|
||||
Assert.IsTrue(_laserBeamRider.IsJammed, "激光驾束仪应该处于被干扰状态");
|
||||
var status = _laserBeamRider.GetStatus();
|
||||
Assert.IsTrue(status.Contains("干扰/遮挡状态: 受激光干扰"), "状态信息应该反映受干扰");
|
||||
ElementStatusInfo statusInfo = _laserBeamRider.GetStatusInfo();
|
||||
Assert.IsTrue(statusInfo.ExtendedProperties.ContainsKey("IsJammed"), "状态信息应该反映受干扰");
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
|
||||
@ -99,8 +99,8 @@ namespace ThreatSource.Tests.Jamming
|
||||
|
||||
// Assert
|
||||
Assert.IsTrue(_laserDesignator.IsJammed, "激光指示器应该处于被干扰状态");
|
||||
var status = _laserDesignator.GetStatus();
|
||||
Assert.IsTrue(status.Contains("干扰/遮挡状态: 受激光干扰"), "状态信息应该反映受干扰");
|
||||
ElementStatusInfo status = _laserDesignator.GetStatusInfo();
|
||||
Assert.IsTrue(status.ExtendedProperties["IsJammed"].ToString() == "True", "状态信息应该反映受干扰");
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
@ -131,8 +131,8 @@ namespace ThreatSource.Tests.Jamming
|
||||
|
||||
// Assert
|
||||
Assert.IsFalse(_laserDesignator.IsJammed, "指示器不应该被干扰,因为干扰源不在角度范围内");
|
||||
var status = _laserDesignator.GetStatus();
|
||||
Assert.IsTrue(status.Contains("干扰/遮挡状态: 正常"), "状态信息应该反映正常");
|
||||
ElementStatusInfo status = _laserDesignator.GetStatusInfo();
|
||||
Assert.IsTrue(status.ExtendedProperties["IsJammed"].ToString() == "False", "状态信息应该反映正常");
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
|
||||
@ -417,8 +417,8 @@ namespace ThreatSource.Tests.Jamming
|
||||
|
||||
// 验证干扰效果
|
||||
Assert.IsTrue(altimeter.IsJammed, "测高仪应该处于被干扰状态");
|
||||
var status = submunition.GetStatus();
|
||||
Assert.IsTrue(status.Contains("传感器受到干扰"), "子弹状态应该反映传感器受到干扰");
|
||||
ElementStatusInfo status = submunition.GetStatusInfo();
|
||||
Assert.IsTrue(status.ExtendedProperties["IsSensorsJammed"].ToString() == "True", "子弹状态应该反映传感器受到干扰");
|
||||
|
||||
// 清除干扰
|
||||
altimeter.ClearJamming(millimeterWaveJamming.Parameters);
|
||||
@ -426,8 +426,8 @@ namespace ThreatSource.Tests.Jamming
|
||||
|
||||
// 验证恢复效果
|
||||
Assert.IsFalse(altimeter.IsJammed, "测高仪应该恢复正常工作");
|
||||
status = submunition.GetStatus();
|
||||
Assert.IsFalse(status.Contains("传感器受到干扰"), "子弹状态应该反映传感器恢复正常");
|
||||
status = submunition.GetStatusInfo();
|
||||
Assert.IsFalse(status.ExtendedProperties["IsSensorsJammed"].ToString() == "True", "子弹状态应该反映传感器恢复正常");
|
||||
|
||||
// 验证高度测量恢复
|
||||
double? recoveredAltitude = ((AltimeterSensorData)altimeter.GetSensorData()).Altitude;
|
||||
@ -529,9 +529,9 @@ namespace ThreatSource.Tests.Jamming
|
||||
|
||||
// 验证干扰效果
|
||||
Assert.IsTrue(altimeter.IsJammed, "测高仪应该处于被干扰状态");
|
||||
var status = submunition.GetStatus();
|
||||
ElementStatusInfo status = submunition.GetStatusInfo();
|
||||
Console.WriteLine($"干扰后状态:{status}");
|
||||
Assert.IsTrue(status.Contains("传感器受到干扰"), "子弹状态应该反映传感器受到干扰");
|
||||
Assert.IsTrue(status.ExtendedProperties["IsSensorsJammed"].ToString() == "True", "子弹状态应该反映传感器受到干扰");
|
||||
|
||||
// 记录干扰时的位置
|
||||
var jammedPosition = submunition.Position;
|
||||
@ -552,9 +552,9 @@ namespace ThreatSource.Tests.Jamming
|
||||
|
||||
// 验证恢复效果
|
||||
Assert.IsFalse(altimeter.IsJammed, "测高仪应该恢复正常工作");
|
||||
status = submunition.GetStatus();
|
||||
status = submunition.GetStatusInfo();
|
||||
Console.WriteLine($"恢复后状态:{status}");
|
||||
Assert.IsFalse(status.Contains("传感器受到干扰"), "子弹状态应该反映传感器恢复正常");
|
||||
Assert.IsFalse(status.ExtendedProperties["IsSensorsJammed"].ToString() == "True", "子弹状态应该反映传感器恢复正常");
|
||||
|
||||
// 验证速度变化
|
||||
Assert.IsTrue(submunition.Speed <= 40, "速度应该保持在开伞阶段的限制范围内");
|
||||
|
||||
@ -173,21 +173,21 @@ namespace ThreatSource.Tests.Missile
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetRunningState_ReturnsCorrectState()
|
||||
public void GetStatusInfo_ReturnsCorrectState()
|
||||
{
|
||||
// Act
|
||||
var state = _missile.GetRunningState();
|
||||
var state = _missile.GetStatusInfo();
|
||||
|
||||
// Assert
|
||||
Assert.Equal(_missile.Id, state.Id);
|
||||
Assert.Equal(_properties.Type, state.Type);
|
||||
Assert.Equal(_properties.Type, state.ExtendedProperties["Type"]);
|
||||
Assert.Equal(_missile.Position, state.Position);
|
||||
Assert.Equal(_missile.Velocity, state.Velocity);
|
||||
Assert.Equal(_missile.Velocity, state.ExtendedProperties["Velocity"]);
|
||||
Assert.Equal(_missile.Orientation, state.Orientation);
|
||||
Assert.Equal(_missile.Speed, state.Speed);
|
||||
Assert.Equal(_missile.FlightTime, state.FlightTime);
|
||||
Assert.Equal(_missile.FlightDistance, state.FlightDistance);
|
||||
Assert.Equal(_missile.IsGuidance, state.IsGuidance);
|
||||
Assert.Equal(_missile.FlightTime, state.ExtendedProperties["FlightTime"]);
|
||||
Assert.Equal(_missile.FlightDistance, state.ExtendedProperties["FlightDistance"]);
|
||||
Assert.Equal(_missile.IsGuidance, state.ExtendedProperties["IsGuidance"]);
|
||||
Assert.Equal(_missile.IsActive, state.IsActive);
|
||||
}
|
||||
}
|
||||
|
||||
@ -166,49 +166,21 @@ namespace ThreatSource.Tests.Missile
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetStatus_ReturnsCorrectStatus()
|
||||
public void GetStatusInfo_ReturnsCorrectState()
|
||||
{
|
||||
// Act
|
||||
string status = _missile.GetStatus();
|
||||
|
||||
// Assert
|
||||
var expectedParts = new[]
|
||||
{
|
||||
"导弹",
|
||||
_missile.Id,
|
||||
"位置",
|
||||
_missile.Position.ToString(),
|
||||
"速度",
|
||||
_missile.Speed.ToString(),
|
||||
"飞行时间",
|
||||
_missile.FlightTime.ToString(),
|
||||
"飞行距离",
|
||||
_missile.FlightDistance.ToString(),
|
||||
"当前阶段"
|
||||
};
|
||||
|
||||
foreach (var part in expectedParts)
|
||||
{
|
||||
Assert.Contains(part, status);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetRunningState_ReturnsCorrectState()
|
||||
{
|
||||
// Act
|
||||
var state = _missile.GetRunningState();
|
||||
var state = _missile.GetStatusInfo();
|
||||
|
||||
// Assert
|
||||
Assert.Equal(_missile.Id, state.Id);
|
||||
Assert.Equal(MissileType.InfraredCommandGuidance, state.Type);
|
||||
Assert.Equal(MissileType.InfraredCommandGuidance, state.ExtendedProperties["Type"]);
|
||||
Assert.Equal(_missile.Position, state.Position);
|
||||
Assert.Equal(_missile.Velocity, state.Velocity);
|
||||
Assert.Equal(_missile.Velocity, state.ExtendedProperties["Velocity"]);
|
||||
Assert.Equal(_missile.Orientation, state.Orientation);
|
||||
Assert.Equal(_missile.Speed, state.Speed);
|
||||
Assert.Equal(_missile.FlightTime, state.FlightTime);
|
||||
Assert.Equal(_missile.FlightDistance, state.FlightDistance);
|
||||
Assert.Equal(_missile.IsGuidance, state.IsGuidance);
|
||||
Assert.Equal(_missile.FlightTime, state.ExtendedProperties["FlightTime"]);
|
||||
Assert.Equal(_missile.FlightDistance, state.ExtendedProperties["FlightDistance"]);
|
||||
Assert.Equal(_missile.IsGuidance, state.ExtendedProperties["IsGuidance"]);
|
||||
Assert.Equal(_missile.IsActive, state.IsActive);
|
||||
}
|
||||
}
|
||||
|
||||
@ -132,8 +132,7 @@ namespace ThreatSource.Tests.Missile
|
||||
}
|
||||
|
||||
// Assert
|
||||
string status = _missile.GetStatus();
|
||||
Assert.Contains("状态: 非激活", status);
|
||||
Assert.False(_missile.IsActive);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@ -151,50 +150,25 @@ namespace ThreatSource.Tests.Missile
|
||||
}
|
||||
|
||||
// Assert
|
||||
string status = _missile.GetStatus();
|
||||
Assert.Contains("状态: 非激活", status);
|
||||
Assert.False(_missile.IsActive);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetStatus_ReturnsCorrectStatus()
|
||||
{
|
||||
// Arrange
|
||||
_missile.Fire();
|
||||
|
||||
// Act
|
||||
string status = _missile.GetStatus();
|
||||
|
||||
// Assert
|
||||
Assert.Contains("红外成像末制导导弹", status);
|
||||
Assert.Contains(_missile.Id, status);
|
||||
Assert.Contains("状态:", status);
|
||||
Assert.Contains("位置:", status);
|
||||
Assert.Contains("速度:", status);
|
||||
Assert.Contains("速度分量:", status);
|
||||
Assert.Contains("朝向:", status);
|
||||
Assert.Contains("飞行时间:", status);
|
||||
Assert.Contains("飞行距离:", status);
|
||||
Assert.Contains("发动机工作时间:", status);
|
||||
Assert.Contains("有引导:", status);
|
||||
Assert.Contains("失去引导时间:", status);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetRunningState_ReturnsCorrectState()
|
||||
public void GetStatusInfo_ReturnsCorrectState()
|
||||
{
|
||||
// Act
|
||||
var state = _missile.GetRunningState();
|
||||
var state = _missile.GetStatusInfo();
|
||||
|
||||
// Assert
|
||||
Assert.Equal(_missile.Id, state.Id);
|
||||
Assert.Equal(MissileType.InfraredImagingTerminalGuidance, state.Type);
|
||||
Assert.Equal(MissileType.InfraredImagingTerminalGuidance, state.ExtendedProperties["Type"]);
|
||||
Assert.Equal(_missile.Position, state.Position);
|
||||
Assert.Equal(_missile.Velocity, state.Velocity);
|
||||
Assert.Equal(_missile.Velocity, state.ExtendedProperties["Velocity"]);
|
||||
Assert.Equal(_missile.Orientation, state.Orientation);
|
||||
Assert.Equal(_missile.Speed, state.Speed);
|
||||
Assert.Equal(_missile.FlightTime, state.FlightTime);
|
||||
Assert.Equal(_missile.FlightDistance, state.FlightDistance);
|
||||
Assert.Equal(_missile.IsGuidance, state.IsGuidance);
|
||||
Assert.Equal(_missile.FlightTime, state.ExtendedProperties["FlightTime"]);
|
||||
Assert.Equal(_missile.FlightDistance, state.ExtendedProperties["FlightDistance"]);
|
||||
Assert.Equal(_missile.IsGuidance, state.ExtendedProperties["IsGuidance"]);
|
||||
Assert.Equal(_missile.IsActive, state.IsActive);
|
||||
}
|
||||
|
||||
|
||||
@ -144,36 +144,21 @@ namespace ThreatSource.Tests.Missile
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetStatus_ReturnsCorrectStatus()
|
||||
public void GetStatusInfo_ReturnsCorrectState()
|
||||
{
|
||||
// Act
|
||||
string status = _missile.GetStatus();
|
||||
|
||||
// Assert
|
||||
Assert.Contains("激光驾束制导导弹", status);
|
||||
Assert.Contains(_missile.Id, status);
|
||||
Assert.Contains(_missile.Position.ToString(), status);
|
||||
Assert.Contains(_missile.Speed.ToString(), status);
|
||||
Assert.Contains(_missile.FlightTime.ToString(), status);
|
||||
Assert.Contains(_missile.FlightDistance.ToString(), status);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetRunningState_ReturnsCorrectState()
|
||||
{
|
||||
// Act
|
||||
var state = _missile.GetRunningState();
|
||||
var state = _missile.GetStatusInfo();
|
||||
|
||||
// Assert
|
||||
Assert.Equal(_missile.Id, state.Id);
|
||||
Assert.Equal(MissileType.LaserBeamRiderGuidance, state.Type);
|
||||
Assert.Equal(MissileType.LaserBeamRiderGuidance, state.ExtendedProperties["Type"]);
|
||||
Assert.Equal(_missile.Position, state.Position);
|
||||
Assert.Equal(_missile.Velocity, state.Velocity);
|
||||
Assert.Equal(_missile.Velocity, state.ExtendedProperties["Velocity"]);
|
||||
Assert.Equal(_missile.Orientation, state.Orientation);
|
||||
Assert.Equal(_missile.Speed, state.Speed);
|
||||
Assert.Equal(_missile.FlightTime, state.FlightTime);
|
||||
Assert.Equal(_missile.FlightDistance, state.FlightDistance);
|
||||
Assert.Equal(_missile.IsGuidance, state.IsGuidance);
|
||||
Assert.Equal(_missile.FlightTime, state.ExtendedProperties["FlightTime"]);
|
||||
Assert.Equal(_missile.FlightDistance, state.ExtendedProperties["FlightDistance"]);
|
||||
Assert.Equal(_missile.IsGuidance, state.ExtendedProperties["IsGuidance"]);
|
||||
Assert.Equal(_missile.IsActive, state.IsActive);
|
||||
}
|
||||
}
|
||||
|
||||
@ -148,48 +148,21 @@ namespace ThreatSource.Tests.Missile
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetStatus_ReturnsCorrectStatus()
|
||||
public void GetStatusInfo_ReturnsCorrectState()
|
||||
{
|
||||
// Act
|
||||
string status = _missile.GetStatus();
|
||||
|
||||
// Assert
|
||||
var expectedParts = new[]
|
||||
{
|
||||
"激光半主动制导导弹",
|
||||
_missile.Id,
|
||||
"位置",
|
||||
_missile.Position.ToString(),
|
||||
"速度",
|
||||
_missile.Speed.ToString(),
|
||||
"飞行时间",
|
||||
_missile.FlightTime.ToString(),
|
||||
"飞行距离",
|
||||
_missile.FlightDistance.ToString()
|
||||
};
|
||||
|
||||
foreach (var part in expectedParts)
|
||||
{
|
||||
Assert.Contains(part, status);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetRunningState_ReturnsCorrectState()
|
||||
{
|
||||
// Act
|
||||
var state = _missile.GetRunningState();
|
||||
var state = _missile.GetStatusInfo();
|
||||
|
||||
// Assert
|
||||
Assert.Equal(_missile.Id, state.Id);
|
||||
Assert.Equal(MissileType.LaserSemiActiveGuidance, state.Type);
|
||||
Assert.Equal(MissileType.LaserSemiActiveGuidance, state.ExtendedProperties["Type"]);
|
||||
Assert.Equal(_missile.Position, state.Position);
|
||||
Assert.Equal(_missile.Velocity, state.Velocity);
|
||||
Assert.Equal(_missile.Velocity, state.ExtendedProperties["Velocity"]);
|
||||
Assert.Equal(_missile.Orientation, state.Orientation);
|
||||
Assert.Equal(_missile.Speed, state.Speed);
|
||||
Assert.Equal(_missile.FlightTime, state.FlightTime);
|
||||
Assert.Equal(_missile.FlightDistance, state.FlightDistance);
|
||||
Assert.Equal(_missile.IsGuidance, state.IsGuidance);
|
||||
Assert.Equal(_missile.FlightTime, state.ExtendedProperties["FlightTime"]);
|
||||
Assert.Equal(_missile.FlightDistance, state.ExtendedProperties["FlightDistance"]);
|
||||
Assert.Equal(_missile.IsGuidance, state.ExtendedProperties["IsGuidance"]);
|
||||
Assert.Equal(_missile.IsActive, state.IsActive);
|
||||
}
|
||||
}
|
||||
|
||||
@ -108,48 +108,21 @@ namespace ThreatSource.Tests.Missile
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetStatus_ReturnsCorrectStatus()
|
||||
public void GetStatusInfo_ReturnsCorrectState()
|
||||
{
|
||||
// Act
|
||||
string status = _missile.GetStatus();
|
||||
|
||||
// Assert
|
||||
var expectedParts = new[]
|
||||
{
|
||||
"导弹",
|
||||
_missile.Id,
|
||||
"位置",
|
||||
_missile.Position.ToString(),
|
||||
"速度",
|
||||
_missile.Speed.ToString(),
|
||||
"飞行时间",
|
||||
_missile.FlightTime.ToString(),
|
||||
"飞行距离",
|
||||
_missile.FlightDistance.ToString()
|
||||
};
|
||||
|
||||
foreach (var part in expectedParts)
|
||||
{
|
||||
Assert.Contains(part, status);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetRunningState_ReturnsCorrectState()
|
||||
{
|
||||
// Act
|
||||
var state = _missile.GetRunningState();
|
||||
var state = _missile.GetStatusInfo();
|
||||
|
||||
// Assert
|
||||
Assert.Equal(_missile.Id, state.Id);
|
||||
Assert.Equal(MissileType.MillimeterWaveTerminalGuidance, state.Type);
|
||||
Assert.Equal(MissileType.MillimeterWaveTerminalGuidance, state.ExtendedProperties["Type"]);
|
||||
Assert.Equal(_missile.Position, state.Position);
|
||||
Assert.Equal(_missile.Velocity, state.Velocity);
|
||||
Assert.Equal(_missile.Velocity, state.ExtendedProperties["Velocity"]);
|
||||
Assert.Equal(_missile.Orientation, state.Orientation);
|
||||
Assert.Equal(_missile.Speed, state.Speed);
|
||||
Assert.Equal(_missile.FlightTime, state.FlightTime);
|
||||
Assert.Equal(_missile.FlightDistance, state.FlightDistance);
|
||||
Assert.Equal(_missile.IsGuidance, state.IsGuidance);
|
||||
Assert.Equal(_missile.FlightTime, state.ExtendedProperties["FlightTime"]);
|
||||
Assert.Equal(_missile.FlightDistance, state.ExtendedProperties["FlightDistance"]);
|
||||
Assert.Equal(_missile.IsGuidance, state.ExtendedProperties["IsGuidance"]);
|
||||
Assert.Equal(_missile.IsActive, state.IsActive);
|
||||
}
|
||||
}
|
||||
|
||||
@ -205,47 +205,21 @@ namespace ThreatSource.Tests.Missile
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetStatus_ReturnsCorrectStatus()
|
||||
public void GetStatusInfo_ReturnsCorrectState()
|
||||
{
|
||||
// Act
|
||||
string status = _missile.GetStatus();
|
||||
|
||||
// Assert
|
||||
var expectedParts = new[]
|
||||
{
|
||||
"末敏弹(母弹)",
|
||||
_missile.Id,
|
||||
"状态:",
|
||||
"位置:",
|
||||
_missile.Position.ToString(),
|
||||
"速度:",
|
||||
_missile.Speed.ToString(),
|
||||
"飞行时间:",
|
||||
_missile.FlightDistance.ToString()
|
||||
};
|
||||
|
||||
foreach (var part in expectedParts)
|
||||
{
|
||||
Assert.Contains(part, status);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetRunningState_ReturnsCorrectState()
|
||||
{
|
||||
// Act
|
||||
var state = _missile.GetRunningState();
|
||||
var state = _missile.GetStatusInfo();
|
||||
|
||||
// Assert
|
||||
Assert.Equal(_missile.Id, state.Id);
|
||||
Assert.Equal(MissileType.TerminalSensitiveMissile, state.Type);
|
||||
Assert.Equal(MissileType.TerminalSensitiveMissile, state.ExtendedProperties["Type"]);
|
||||
Assert.Equal(_missile.Position, state.Position);
|
||||
Assert.Equal(_missile.Velocity, state.Velocity);
|
||||
Assert.Equal(_missile.Velocity, state.ExtendedProperties["Velocity"]);
|
||||
Assert.Equal(_missile.Orientation, state.Orientation);
|
||||
Assert.Equal(_missile.Speed, state.Speed);
|
||||
Assert.Equal(_missile.FlightTime, state.FlightTime);
|
||||
Assert.Equal(_missile.FlightDistance, state.FlightDistance);
|
||||
Assert.Equal(_missile.IsGuidance, state.IsGuidance);
|
||||
Assert.Equal(_missile.FlightTime, state.ExtendedProperties["FlightTime"]);
|
||||
Assert.Equal(_missile.FlightDistance, state.ExtendedProperties["FlightDistance"]);
|
||||
Assert.Equal(_missile.IsGuidance, state.ExtendedProperties["IsGuidance"]);
|
||||
Assert.Equal(_missile.IsActive, state.IsActive);
|
||||
}
|
||||
}
|
||||
|
||||
@ -174,31 +174,6 @@ namespace ThreatSource.Tests.Missile
|
||||
Assert.False(_submunition.IsActive);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetStatus_ReturnsCorrectStatus()
|
||||
{
|
||||
// Act
|
||||
string status = _submunition.GetStatus();
|
||||
|
||||
// Assert
|
||||
var expectedParts = new[]
|
||||
{
|
||||
"末敏弹(子弹)",
|
||||
_submunition.Id,
|
||||
"状态:",
|
||||
"位置:",
|
||||
"速度:",
|
||||
"飞行时间:",
|
||||
"飞行距离:",
|
||||
"运行状态:"
|
||||
};
|
||||
|
||||
foreach (var part in expectedParts)
|
||||
{
|
||||
Assert.Contains(part, status);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestSensorAngleCorrection()
|
||||
{
|
||||
|
||||
@ -133,7 +133,7 @@ namespace ThreatSource.Data
|
||||
/// <param name="missileId">导弹ID</param>
|
||||
/// <param name="motionParameters">初始运动参数</param>
|
||||
/// <returns>指示器实例</returns>
|
||||
public IIndicator CreateIndicator(string indicatorId, string indicatorModel, string targetId, string missileId, MotionParameters motionParameters)
|
||||
public BaseIndicator CreateIndicator(string indicatorId, string indicatorModel, string targetId, string missileId, MotionParameters motionParameters)
|
||||
{
|
||||
var data = _dataManager.GetIndicator(indicatorModel);
|
||||
|
||||
|
||||
@ -97,14 +97,27 @@ namespace ThreatSource.Equipment
|
||||
SimulationManager.PublishEvent(new TargetDestroyedEvent { TargetId = Id });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取目标状态信息
|
||||
/// 获取目标的结构化状态信息
|
||||
/// </summary>
|
||||
/// <returns>目标状态信息</returns>
|
||||
public override string GetStatus()
|
||||
/// <returns>包含目标当前状态的结构化对象</returns>
|
||||
public override ElementStatusInfo GetStatusInfo()
|
||||
{
|
||||
return base.GetStatus() + $"目标状态:健康度:{Health}\n";
|
||||
// 获取基础状态信息
|
||||
var statusInfo = base.GetStatusInfo();
|
||||
|
||||
// 添加装备特有属性
|
||||
statusInfo.ExtendedProperties["Health"] = Health;
|
||||
statusInfo.ExtendedProperties["Length"] = Properties.Length;
|
||||
statusInfo.ExtendedProperties["Width"] = Properties.Width;
|
||||
statusInfo.ExtendedProperties["Height"] = Properties.Height;
|
||||
statusInfo.ExtendedProperties["RadarCrossSection"] = Properties.RadarCrossSection;
|
||||
statusInfo.ExtendedProperties["InfraredRadiationIntensity"] = Properties.InfraredRadiationIntensity;
|
||||
statusInfo.ExtendedProperties["MillimeterWaveRadiationIntensity"] = Properties.MillimeterWaveRadiationIntensity;
|
||||
statusInfo.ExtendedProperties["UltravioletRadiationIntensity"] = Properties.UltravioletRadiationIntensity;
|
||||
|
||||
return statusInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -219,21 +219,29 @@ namespace ThreatSource.Guidance
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取制导系统的状态信息
|
||||
/// 获取制导系统的详细状态信息
|
||||
/// </summary>
|
||||
/// <returns>包含关键状态参数的字符串</returns>
|
||||
/// <remarks>
|
||||
/// 返回信息:
|
||||
/// - 制导状态
|
||||
/// - 干扰状态
|
||||
/// - 位置信息
|
||||
/// - 速度信息
|
||||
/// - 加速度信息
|
||||
/// 用于状态监控和调试
|
||||
/// </remarks>
|
||||
public override string GetStatus()
|
||||
/// <returns>包含制导系统状态的信息对象</returns>
|
||||
public override ElementStatusInfo GetStatusInfo()
|
||||
{
|
||||
return base.GetStatus() + $"导引头状态: 有制导={HasGuidance}, 被干扰={IsJammed}, 制导加速度={GuidanceAcceleration}";
|
||||
// 获取基类状态信息
|
||||
var statusInfo = base.GetStatusInfo();
|
||||
|
||||
// 添加制导系统特有属性
|
||||
statusInfo.ExtendedProperties["HasGuidance"] = HasGuidance;
|
||||
statusInfo.ExtendedProperties["IsJammed"] = IsJammed;
|
||||
statusInfo.ExtendedProperties["IsHardJammed"] = IsHardJammed;
|
||||
statusInfo.ExtendedProperties["GuidanceAcceleration"] = GuidanceAcceleration;
|
||||
statusInfo.ExtendedProperties["MaxAcceleration"] = MaxAcceleration;
|
||||
statusInfo.ExtendedProperties["ProportionalNavigationCoefficient"] = ProportionalNavigationCoefficient;
|
||||
|
||||
// 如果有父实体,添加父实体ID
|
||||
if (!string.IsNullOrEmpty(ParentId))
|
||||
{
|
||||
statusInfo.ExtendedProperties["ParentId"] = ParentId;
|
||||
}
|
||||
|
||||
return statusInfo;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -212,28 +212,29 @@ namespace ThreatSource.Guidance
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取制导系统的详细状态信息
|
||||
/// 获取红外指令导引系统的详细状态信息
|
||||
/// </summary>
|
||||
/// <returns>包含完整状态参数的字符串</returns>
|
||||
/// <remarks>
|
||||
/// 返回信息:
|
||||
/// - 基本状态信息
|
||||
/// - 制导加速度
|
||||
/// - 方向向量
|
||||
/// - 转向速率
|
||||
/// 用于系统监控和调试
|
||||
/// </remarks>
|
||||
public override string GetStatus()
|
||||
/// <returns>包含导引系统状态的信息对象</returns>
|
||||
public override ElementStatusInfo GetStatusInfo()
|
||||
{
|
||||
string angleStr = "null";
|
||||
// 获取基类状态信息
|
||||
var statusInfo = base.GetStatusInfo();
|
||||
|
||||
// 添加角度信息
|
||||
if (LastTrackerToTargetVector != null && LastTrackerToMissileVector != null)
|
||||
{
|
||||
angleStr = Vector3D.AngleBetween(LastTrackerToTargetVector, LastTrackerToMissileVector).ToString("F3");
|
||||
double angle = Vector3D.AngleBetween(LastTrackerToTargetVector, LastTrackerToMissileVector);
|
||||
statusInfo.ExtendedProperties["TurnAngle"] = angle;
|
||||
}
|
||||
else
|
||||
{
|
||||
statusInfo.ExtendedProperties["TurnAngle"] = "";
|
||||
}
|
||||
|
||||
return base.GetStatus() +
|
||||
$" 转向角度: {angleStr} 弧度," +
|
||||
$" 转向速率: {turnRate:F3} 弧度/秒";
|
||||
// 添加转向速率
|
||||
statusInfo.ExtendedProperties["TurnRate"] = turnRate;
|
||||
|
||||
return statusInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -298,9 +298,8 @@ namespace ThreatSource.Guidance
|
||||
/// <param name="missilePosition">导弹位置</param>
|
||||
/// <param name="smokeAttenuation">衰减型烟幕透过率</param>
|
||||
/// <param name="simulationManager">仿真管理器实例</param>
|
||||
/// <param name="smokeGrenadeOverlapRatios">已计算的烟幕覆盖率字典,键为烟幕ID,值为覆盖率</param>
|
||||
/// <returns>红外图像</returns>
|
||||
public InfraredImage GenerateImage(BaseEquipment target, Vector3D missilePosition, double smokeAttenuation, ISimulationManager simulationManager, Dictionary<string, double> smokeGrenadeOverlapRatios = null)
|
||||
public InfraredImage GenerateImage(BaseEquipment target, Vector3D missilePosition, double smokeAttenuation, ISimulationManager simulationManager)
|
||||
{
|
||||
// 更新视线坐标系
|
||||
UpdateLineOfSightFrame(missilePosition, target.Position);
|
||||
|
||||
@ -573,22 +573,19 @@ namespace ThreatSource.Guidance
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取制导系统的详细状态信息
|
||||
/// 获取红外图像制导系统的详细状态信息
|
||||
/// </summary>
|
||||
/// <returns>包含完整状态参数的字符串</returns>
|
||||
/// <remarks>
|
||||
/// 返回信息:
|
||||
/// - 基本状态信息
|
||||
/// - 制导加速度
|
||||
/// - 目标位置
|
||||
/// 用于系统监控和调试
|
||||
/// 特有的返回信息:
|
||||
/// - 上次发现的目标位置
|
||||
/// </remarks>
|
||||
public override string GetStatus()
|
||||
public override ElementStatusInfo GetStatusInfo()
|
||||
{
|
||||
// Check for null before calling ToString()
|
||||
var statusInfo = base.GetStatusInfo();
|
||||
string lastPosStr = lastTargetPosition != null ? lastTargetPosition.ToString() : "null";
|
||||
return base.GetStatus() + $", GuidanceAcceleration: {GuidanceAcceleration}, " +
|
||||
$"Target Position: {lastPosStr}";
|
||||
statusInfo.ExtendedProperties["lastPosStr"] = lastPosStr;
|
||||
return statusInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -577,20 +577,27 @@ namespace ThreatSource.Guidance
|
||||
/// <summary>
|
||||
/// 获取制导系统的详细状态信息
|
||||
/// </summary>
|
||||
/// <returns>包含完整状态参数的字符串</returns>
|
||||
/// <returns>包含完整状态参数的ElementStatusInfo对象</returns>
|
||||
/// <remarks>
|
||||
/// 返回信息:
|
||||
/// - 基本状态信息
|
||||
/// - 制导参数
|
||||
/// - 控制状态
|
||||
/// 特有的返回信息:
|
||||
/// - 激光源位置
|
||||
/// - 激光方向
|
||||
/// - 激光功率
|
||||
/// - 照明状态
|
||||
/// 用于系统监控和调试
|
||||
/// </remarks>
|
||||
public override string GetStatus()
|
||||
public override ElementStatusInfo GetStatusInfo()
|
||||
{
|
||||
var statusInfo = base.GetStatusInfo();
|
||||
string sourcePosStr = LaserSourcePosition != null ? LaserSourcePosition.ToString() : "null";
|
||||
string directionStr = LaserDirection != null ? LaserDirection.ToString() : "null";
|
||||
return base.GetStatus() + $", SourcePos: {sourcePosStr}, Direction: {directionStr}, " +
|
||||
$"LaserPower: {LaserPower:E} W, Illumination: {LaserIlluminationOn}";
|
||||
|
||||
statusInfo.ExtendedProperties["SourcePos"] = sourcePosStr;
|
||||
statusInfo.ExtendedProperties["Direction"] = directionStr;
|
||||
statusInfo.ExtendedProperties["LaserPower"] = LaserPower.ToString("E") + " W";
|
||||
statusInfo.ExtendedProperties["Illumination"] = LaserIlluminationOn.ToString();
|
||||
|
||||
return statusInfo;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -698,21 +698,23 @@ namespace ThreatSource.Guidance
|
||||
/// <summary>
|
||||
/// 获取制导系统的详细状态信息
|
||||
/// </summary>
|
||||
/// <returns>包含完整状态参数的字符串</returns>
|
||||
/// <returns>包含完整状态参数的ElementStatusInfo对象</returns>
|
||||
/// <remarks>
|
||||
/// 返回信息:
|
||||
/// - 基本状态信息
|
||||
/// 特有的返回信息:
|
||||
/// - 接收功率数据
|
||||
/// - 锁定阈值
|
||||
/// - 四象限探测器状态
|
||||
/// 用于系统监控和调试
|
||||
/// </remarks>
|
||||
public override string GetStatus()
|
||||
public override ElementStatusInfo GetStatusInfo()
|
||||
{
|
||||
return base.GetStatus() +
|
||||
$" 接收到的激光功率: {ReceivedLaserPower:E} W," +
|
||||
$" 锁定阈值: {config.LockThreshold:E} W," +
|
||||
$" 四象限探测器: {quadrantDetector.GetStatus()}";
|
||||
var statusInfo = base.GetStatusInfo();
|
||||
|
||||
statusInfo.ExtendedProperties["ReceivedLaserPower"] = ReceivedLaserPower.ToString("E") + " W";
|
||||
statusInfo.ExtendedProperties["LockThreshold"] = config.LockThreshold.ToString("E") + " W";
|
||||
statusInfo.ExtendedProperties["QuadrantDetectorStatus"] = quadrantDetector.GetStatus();
|
||||
|
||||
return statusInfo;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -661,23 +661,28 @@ namespace ThreatSource.Guidance
|
||||
/// <summary>
|
||||
/// 获取制导系统的详细状态信息
|
||||
/// </summary>
|
||||
/// <returns>包含完整状态参数的字符串</returns>
|
||||
/// <returns>包含完整状态参数的ElementStatusInfo对象</returns>
|
||||
/// <remarks>
|
||||
/// 返回信息:
|
||||
/// - 基本状态信息
|
||||
/// 特有的返回信息:
|
||||
/// - 当前模式
|
||||
/// - 目标位置
|
||||
/// - 目标速度
|
||||
/// - 是否有目标
|
||||
/// 用于系统监控和调试
|
||||
/// </remarks>
|
||||
public override string GetStatus()
|
||||
public override ElementStatusInfo GetStatusInfo()
|
||||
{
|
||||
var statusInfo = base.GetStatusInfo();
|
||||
|
||||
string lastPosStr = lastTargetPosition != null ? lastTargetPosition.ToString() : "null";
|
||||
string lastVelStr = lastTargetVelocity != null ? lastTargetVelocity.ToString() : "null";
|
||||
|
||||
return base.GetStatus() +
|
||||
$"\n当前模式: {currentMode}" +
|
||||
$"\n最后目标位置: {lastPosStr}" +
|
||||
$"\n最后目标速度: {lastVelStr}" +
|
||||
$"\n是否有目标: {HasTarget}";
|
||||
statusInfo.ExtendedProperties["Mode"] = currentMode.ToString();
|
||||
statusInfo.ExtendedProperties["LastTargetPosition"] = lastPosStr;
|
||||
statusInfo.ExtendedProperties["LastTargetVelocity"] = lastVelStr;
|
||||
statusInfo.ExtendedProperties["HasTarget"] = HasTarget.ToString();
|
||||
|
||||
return statusInfo;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -17,7 +17,7 @@ namespace ThreatSource.Indicator
|
||||
/// - 干扰处理机制
|
||||
/// 是具体指示器类的实现基础
|
||||
/// </remarks>
|
||||
public abstract class BaseIndicator : SimulationElement, IIndicator, IJammable
|
||||
public abstract class BaseIndicator : SimulationElement, IJammable
|
||||
{
|
||||
/// <summary>
|
||||
/// 视觉遮挡阈值 (0.0 - 1.0)
|
||||
@ -253,22 +253,23 @@ namespace ThreatSource.Indicator
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取指示器运行状态
|
||||
/// 获取指示器的详细状态信息
|
||||
/// </summary>
|
||||
/// <returns>包含指示器完整状态信息的结构体</returns>
|
||||
/// <remarks>
|
||||
/// 子类需要重写此方法以提供完整的状态信息
|
||||
/// 包括位置、姿态、目标关联和干扰状态等
|
||||
/// </remarks>
|
||||
public abstract IndicatorRunningState GetRunningState();
|
||||
|
||||
/// <summary>
|
||||
/// 获取指示器状态信息
|
||||
/// </summary>
|
||||
/// <returns>包含指示器状态信息的字符串</returns>
|
||||
public override string GetStatus()
|
||||
/// <returns>包含指示器状态的信息对象</returns>
|
||||
public override ElementStatusInfo GetStatusInfo()
|
||||
{
|
||||
return $"指示器 {Id} 当前状态: 上次目标位置: {_lastKnownTargetPosition}, 上次目标朝向: {_lastKnownTargetOrientation}";
|
||||
// 获取基类状态信息
|
||||
var statusInfo = base.GetStatusInfo();
|
||||
|
||||
// 添加制导系统特有属性
|
||||
statusInfo.ExtendedProperties["TargetId"] = TargetId ?? "";
|
||||
statusInfo.ExtendedProperties["MissileId"] = MissileId ?? "";
|
||||
statusInfo.ExtendedProperties["lastKnownTargetPosition"] = _lastKnownTargetPosition ?? Vector3D.Zero;
|
||||
statusInfo.ExtendedProperties["lastKnownTargetOrientation"] = _lastKnownTargetOrientation ?? new Orientation(0, 0, 0);
|
||||
statusInfo.ExtendedProperties["IsTargetObscured"] = IsTargetObscured;
|
||||
statusInfo.ExtendedProperties["IsJammed"] = IsJammed;
|
||||
|
||||
return statusInfo;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -33,116 +33,6 @@ namespace ThreatSource.Indicator
|
||||
/// 可以为null表示当前没有关联导弹
|
||||
/// </remarks>
|
||||
string? MissileId { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取指示器的当前运行状态
|
||||
/// </summary>
|
||||
/// <returns>包含指示器完整状态信息的结构体</returns>
|
||||
/// <remarks>
|
||||
/// 返回的状态信息包括:
|
||||
/// - 目标和导弹的关联状态
|
||||
/// - 指示器的工作状态
|
||||
/// - 位置、速度和姿态信息
|
||||
/// - 激活状态
|
||||
/// - 干扰状态
|
||||
/// </remarks>
|
||||
IndicatorRunningState GetRunningState();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 指示器运行状态结构体,包含了指示器的完整状态信息
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 该结构体封装了指示器的所有关键状态:
|
||||
/// - 关联信息(目标和导弹)
|
||||
/// - 工作状态(类型和状态)
|
||||
/// - 运动状态(位置、速度、姿态)
|
||||
/// - 功能状态(是否激活)
|
||||
/// - 干扰状态(是否被干扰)
|
||||
/// 用于状态监控和控制决策
|
||||
/// </remarks>
|
||||
public struct IndicatorRunningState
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取或设置目标ID
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 标识当前跟踪的目标
|
||||
/// 用于目标关联和状态更新
|
||||
/// </remarks>
|
||||
public string TargetId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置导弹ID
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 标识当前控制的导弹
|
||||
/// 用于导弹制导和状态同步
|
||||
/// </remarks>
|
||||
public string MissileId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置指示器类型
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 表示指示器的具体类型
|
||||
/// 影响指示器的工作模式和性能参数
|
||||
/// </remarks>
|
||||
public IndicatorType Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置指示器状态
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 表示指示器的当前工作状态
|
||||
/// 用于控制指示器的工作模式
|
||||
/// </remarks>
|
||||
public IndicatorState State { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置指示器位置
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 指示器在三维空间中的位置向量
|
||||
/// 用于空间定位和运动控制
|
||||
/// </remarks>
|
||||
public Vector3D Position { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置指示器速度
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 指示器在三维空间中的速度向量
|
||||
/// 用于运动状态更新和预测
|
||||
/// </remarks>
|
||||
public Vector3D Velocity { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置指示器朝向
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 指示器在三维空间中的姿态
|
||||
/// 影响指示器的工作效果和精度
|
||||
/// </remarks>
|
||||
public Orientation Orientation { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置指示器是否激活
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 表示指示器是否处于工作状态
|
||||
/// true表示正在工作,false表示待机
|
||||
/// </remarks>
|
||||
public bool IsActive { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获取或设置指示器的干扰状态
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 表示指示器当前的干扰状态
|
||||
/// 用于状态监控和干扰防护
|
||||
/// </remarks>
|
||||
public JammingState JammingState { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -341,67 +341,17 @@ namespace ThreatSource.Indicator
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取红外测角仪运行状态
|
||||
/// 获取红外测角仪的详细状态信息
|
||||
/// </summary>
|
||||
/// <returns>包含测角仪完整状态信息的结构体</returns>
|
||||
/// <remarks>
|
||||
/// 返回信息包括:
|
||||
/// - 目标和导弹关联状态
|
||||
/// - 工作类型和状态
|
||||
/// - 位置和姿态信息
|
||||
/// - 激活状态
|
||||
/// - 干扰状态 (包括电子干扰和烟幕遮挡)
|
||||
/// </remarks>
|
||||
public override IndicatorRunningState GetRunningState()
|
||||
/// <returns>包含红外测角仪状态的信息对象</returns>
|
||||
public override ElementStatusInfo GetStatusInfo()
|
||||
{
|
||||
return new IndicatorRunningState
|
||||
{
|
||||
TargetId = TargetId ?? "",
|
||||
MissileId = MissileId ?? "",
|
||||
Type = IndicatorType.InfraredTracker,
|
||||
State = IsTracking ? IndicatorState.Indicating : IndicatorState.Idle,
|
||||
Position = Position,
|
||||
Orientation = Orientation,
|
||||
IsActive = IsActive,
|
||||
JammingState = (IsJammed || IsTargetObscured) ? JammingState.Jammed : JammingState.Normal
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取红外测角仪状态信息
|
||||
/// </summary>
|
||||
/// <returns>包含测角仪状态的详细描述</returns>
|
||||
/// <remarks>
|
||||
/// 返回信息包括:
|
||||
/// - 基本标识信息
|
||||
/// - 位置信息
|
||||
/// - 目标关联状态
|
||||
/// - 工作状态
|
||||
/// - 跟踪状态
|
||||
/// - 干扰/遮挡状态
|
||||
/// </remarks>
|
||||
public override string GetStatus()
|
||||
{
|
||||
string jammingStatusString = "正常";
|
||||
if (IsJammed)
|
||||
{
|
||||
if (IsTargetObscured)
|
||||
{
|
||||
jammingStatusString = "目标被烟幕遮挡";
|
||||
}
|
||||
else
|
||||
{
|
||||
jammingStatusString = "受红外干扰";
|
||||
}
|
||||
}
|
||||
|
||||
return base.GetStatus() + "\n" +
|
||||
$" 位置: {Position}\n" +
|
||||
$" 跟踪导弹: {MissileId ?? "无"}\n" +
|
||||
$" 目标: {TargetId ?? "无"}\n" +
|
||||
$" 状态: {(IsActive ? "活动" : "已销毁")}\n" +
|
||||
$" 跟踪状态: {(IsTracking ? "跟踪中" : "未跟踪")}\n" +
|
||||
$" 干扰/遮挡状态: {jammingStatusString}\n";
|
||||
// 获取基类状态信息
|
||||
var statusInfo = base.GetStatusInfo();
|
||||
|
||||
// 添加制导系统特有属性
|
||||
statusInfo.ExtendedProperties["IsTracking"] = IsTracking;
|
||||
return statusInfo;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -291,70 +291,23 @@ namespace ThreatSource.Indicator
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取指示器运行状态
|
||||
/// 获取激光驾束仪的详细状态信息
|
||||
/// </summary>
|
||||
/// <returns>包含指示器完整状态信息的结构体</returns>
|
||||
/// <remarks>
|
||||
/// 返回信息包括:
|
||||
/// - 目标和导弹关联状态
|
||||
/// - 工作类型和状态
|
||||
/// - 位置和姿态信息
|
||||
/// - 激活状态
|
||||
/// - 干扰/遮挡状态
|
||||
/// </remarks>
|
||||
public override IndicatorRunningState GetRunningState()
|
||||
/// <returns>包含激光驾束仪状态的信息对象</returns>
|
||||
public override ElementStatusInfo GetStatusInfo()
|
||||
{
|
||||
return new IndicatorRunningState
|
||||
{
|
||||
TargetId = TargetId ?? "",
|
||||
MissileId = MissileId ?? "",
|
||||
Type = IndicatorType.LaserBeamRider,
|
||||
State = IsBeamOn ? IndicatorState.Indicating : IndicatorState.Idle,
|
||||
Position = Position,
|
||||
Orientation = Orientation,
|
||||
IsActive = IsActive,
|
||||
JammingState = (IsJammed || IsTargetObscured) ? JammingState.Jammed : JammingState.Normal
|
||||
};
|
||||
// 获取基类状态信息
|
||||
var statusInfo = base.GetStatusInfo();
|
||||
|
||||
// 添加制导系统特有属性
|
||||
statusInfo.ExtendedProperties["IsBeamOn"] = IsBeamOn;
|
||||
statusInfo.ExtendedProperties["Power"] = config.Power;
|
||||
statusInfo.ExtendedProperties["Wavelength"] = config.Wavelength;
|
||||
statusInfo.ExtendedProperties["ControlFieldDiameter"] = config.ControlFieldDiameter;
|
||||
statusInfo.ExtendedProperties["LaserDirection"] = LaserDirection;
|
||||
return statusInfo;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取激光驾束仪状态字符串
|
||||
/// </summary>
|
||||
/// <returns>包含设备状态的详细描述</returns>
|
||||
/// <remarks>
|
||||
/// 返回信息包括:
|
||||
/// - 设备ID和位置
|
||||
/// - 激光参数(功率、发散角等)
|
||||
/// - 工作状态(激活、照射等)
|
||||
/// - 制导范围参数
|
||||
/// - 干扰/遮挡状态
|
||||
/// </remarks>
|
||||
public override string GetStatus()
|
||||
{
|
||||
string jammingStatusString = "正常";
|
||||
if (IsJammed)
|
||||
{
|
||||
if (IsTargetObscured)
|
||||
{
|
||||
jammingStatusString = "目标被烟幕遮挡";
|
||||
}
|
||||
else
|
||||
{
|
||||
jammingStatusString = "受激光干扰";
|
||||
}
|
||||
}
|
||||
|
||||
return base.GetStatus() + "\n" +
|
||||
$" 位置: {Position}\n" +
|
||||
$" 方向: {LaserDirection}\n" +
|
||||
$" 激活状态: {(IsActive ? "激活" : "未激活")}\n" +
|
||||
$" 激光束状态: {(IsBeamOn ? "开启" : "关闭")}\n" +
|
||||
$" 干扰/遮挡状态: {jammingStatusString}\n" +
|
||||
$" 激光功率: {config.Power} W\n" +
|
||||
$" 激光波长: {config.Wavelength} μm\n" +
|
||||
$" 控制场直径: {config.ControlFieldDiameter} m\n";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 处理指示器被干扰的事件
|
||||
/// </summary>
|
||||
|
||||
@ -345,71 +345,20 @@ namespace ThreatSource.Indicator
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取指示器运行状态
|
||||
/// 获取激光驾束仪的详细状态信息
|
||||
/// </summary>
|
||||
/// <returns>包含指示器完整状态信息的结构体</returns>
|
||||
/// <remarks>
|
||||
/// 返回信息包括:
|
||||
/// - 目标和导弹关联状态
|
||||
/// - 工作类型和状态
|
||||
/// - 位置和姿态信息
|
||||
/// - 激活状态
|
||||
/// - 干扰/遮挡状态
|
||||
/// </remarks>
|
||||
public override IndicatorRunningState GetRunningState()
|
||||
/// <returns>包含激光驾束仪状态的信息对象</returns>
|
||||
public override ElementStatusInfo GetStatusInfo()
|
||||
{
|
||||
return new IndicatorRunningState
|
||||
{
|
||||
TargetId = TargetId ?? "",
|
||||
MissileId = MissileId ?? "",
|
||||
Type = IndicatorType.LaserDesignator,
|
||||
State = IsIlluminationOn ? IndicatorState.Indicating : IndicatorState.Idle,
|
||||
Position = Position,
|
||||
Orientation = Orientation,
|
||||
IsActive = IsActive,
|
||||
JammingState = (IsJammed || IsTargetObscured) ? JammingState.Jammed : JammingState.Normal
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取激光指示器状态信息
|
||||
/// </summary>
|
||||
/// <returns>包含指示器状态的详细描述</returns>
|
||||
/// <remarks>
|
||||
/// 返回信息包括:
|
||||
/// - 基本标识信息
|
||||
/// - 位置信息
|
||||
/// - 目标关联状态
|
||||
/// - 工作状态
|
||||
/// - 干扰/遮挡状态
|
||||
/// - 激光参数
|
||||
/// </remarks>
|
||||
public override string GetStatus()
|
||||
{
|
||||
string jammingStatusString = "正常";
|
||||
if (IsJammed)
|
||||
{
|
||||
if (IsTargetObscured)
|
||||
{
|
||||
jammingStatusString = "目标被烟幕遮挡";
|
||||
}
|
||||
else
|
||||
{
|
||||
jammingStatusString = "受激光干扰";
|
||||
}
|
||||
}
|
||||
|
||||
return base.GetStatus() + "\n" +
|
||||
$" 位置: {Position}\n" +
|
||||
$" 目标: {TargetId}\n" +
|
||||
$" 导弹: {MissileId}\n" +
|
||||
$" 朝向: {Orientation}\n" +
|
||||
$" 激活状态: {(IsActive ? "激活" : "未激活")}\n" +
|
||||
$" 照射状态: {(IsIlluminationOn ? "正在照射" : "未照射")}\n" +
|
||||
$" 干扰/遮挡状态: {jammingStatusString}\n" +
|
||||
$" 编码状态: {(config.LaserCodeConfig != null ? "启用" : "禁用")}\n" +
|
||||
$" 波长: {config.Wavelength}um\n" +
|
||||
$" 激光功率: {config.Power:E} W";
|
||||
// 获取基类状态信息
|
||||
var statusInfo = base.GetStatusInfo();
|
||||
|
||||
// 添加制导系统特有属性
|
||||
statusInfo.ExtendedProperties["IsIlluminationOn"] = IsIlluminationOn;
|
||||
statusInfo.ExtendedProperties["Power"] = config.Power;
|
||||
statusInfo.ExtendedProperties["Wavelength"] = config.Wavelength;
|
||||
statusInfo.ExtendedProperties["LaserCodeConfig"] = config.LaserCodeConfig;
|
||||
return statusInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -215,20 +215,31 @@ namespace ThreatSource.Jammer
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取干扰器状态信息
|
||||
/// 获取干扰器的详细状态信息
|
||||
/// </summary>
|
||||
/// <returns>干扰器状态信息</returns>
|
||||
public override string GetStatus()
|
||||
/// <returns>包含干扰器状态的信息对象</returns>
|
||||
public override ElementStatusInfo GetStatusInfo()
|
||||
{
|
||||
return base.GetStatus() + $"干扰器状态:{State}, type: {JammingType}, isJamming: {IsJamming}\n"
|
||||
+ $"干扰模式: {CurrentParameters?.Mode}\n"
|
||||
+ $"功率: {CurrentParameters?.Power}\n"
|
||||
+ $"波长: {CurrentParameters?.Wavelength}\n"
|
||||
+ $"方向: {CurrentParameters?.Direction}\n"
|
||||
+ $"位置: {CurrentParameters?.SourcePosition}\n"
|
||||
+ $"角度范围: {CurrentParameters?.AngleRange}\n"
|
||||
+ $"持续时间: {CurrentParameters?.Duration}\n"
|
||||
+ $"干扰类型: {CurrentParameters?.Type}\n";
|
||||
// 获取基类状态信息
|
||||
var statusInfo = base.GetStatusInfo();
|
||||
|
||||
// 添加制导系统特有属性
|
||||
statusInfo.ExtendedProperties["JammingType"] = JammingType;
|
||||
statusInfo.ExtendedProperties["State"] = State;
|
||||
statusInfo.ExtendedProperties["IsJamming"] = IsJamming;
|
||||
|
||||
if (CurrentParameters != null)
|
||||
{
|
||||
statusInfo.ExtendedProperties["Mode"] = CurrentParameters.Mode;
|
||||
statusInfo.ExtendedProperties["Power"] = CurrentParameters.Power;
|
||||
statusInfo.ExtendedProperties["Wavelength"] = CurrentParameters.Wavelength ?? 0;
|
||||
statusInfo.ExtendedProperties["Direction"] = CurrentParameters.Direction;
|
||||
statusInfo.ExtendedProperties["AngleRange"] = CurrentParameters.AngleRange;
|
||||
statusInfo.ExtendedProperties["Duration"] = CurrentParameters.Duration ?? 0;
|
||||
statusInfo.ExtendedProperties["Type"] = CurrentParameters.Type;
|
||||
}
|
||||
|
||||
return statusInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -84,12 +84,20 @@ namespace ThreatSource.Jammer
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取激光诱偏目标状态
|
||||
/// 获取激光诱偏目标的详细状态信息
|
||||
/// </summary>
|
||||
/// <returns>激光诱偏目标状态</returns>
|
||||
public override string GetStatus()
|
||||
/// <returns>包含激光诱偏目标状态的信息对象</returns>
|
||||
public override ElementStatusInfo GetStatusInfo()
|
||||
{
|
||||
return base.GetStatus() + $"诱饵位置: {Position}, 源 ID: {SourceId}, 诱偏功率: {config.Power}, 诱偏激光发散角: {config.DivergenceAngle}, 反射系数: {config.ReflectionCoefficient}, 有效反射面积: {config.ReflectiveArea}, 生命周期: {config.Duration}\n";
|
||||
// 获取基类状态信息
|
||||
var statusInfo = base.GetStatusInfo();
|
||||
|
||||
// 添加诱偏目标特有属性
|
||||
statusInfo.ExtendedProperties["SourceId"] = SourceId;
|
||||
statusInfo.ExtendedProperties["ReflectiveArea"] = config.ReflectiveArea;
|
||||
statusInfo.ExtendedProperties["ReflectionCoefficient"] = config.ReflectionCoefficient;
|
||||
|
||||
return statusInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -481,63 +481,31 @@ namespace ThreatSource.Missile
|
||||
{
|
||||
// 基类中的默认实现
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取导弹的完整运行状态
|
||||
/// </summary>
|
||||
/// <returns>包含导弹所有状态信息的结构体</returns>
|
||||
/// <remarks>
|
||||
/// 返回的状态包括:
|
||||
/// - 基本信息(ID、类型)
|
||||
/// - 运动状态(位置、速度、朝向)
|
||||
/// - 飞行数据(时间、距离)
|
||||
/// - 工作状态(制导、发动机)
|
||||
/// </remarks>
|
||||
public MissileRunningState GetRunningState()
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override ElementStatusInfo GetStatusInfo()
|
||||
{
|
||||
return new MissileRunningState
|
||||
{
|
||||
Id = Id,
|
||||
Type = Properties.Type,
|
||||
Position = Position,
|
||||
Velocity = Velocity,
|
||||
Orientation = Orientation,
|
||||
Speed = Speed,
|
||||
FlightTime = FlightTime,
|
||||
FlightDistance = FlightDistance,
|
||||
IsGuidance = IsGuidance,
|
||||
LostGuidanceTime = LostGuidanceTime,
|
||||
EngineBurnTime = EngineBurnTime,
|
||||
IsActive = IsActive,
|
||||
GuidanceAcceleration = GuidanceAcceleration
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取导弹的状态信息字符串
|
||||
/// </summary>
|
||||
/// <returns>包含导弹状态的详细描述</returns>
|
||||
/// <remarks>
|
||||
/// 返回信息包括:
|
||||
/// - 导弹ID和类型
|
||||
/// - 位置和速度信息
|
||||
/// - 飞行时间和距离
|
||||
/// - 制导和发动机状态
|
||||
/// </remarks>
|
||||
public override string GetStatus()
|
||||
{
|
||||
MissileRunningState missileRunningState = GetRunningState();
|
||||
return $"导弹 {missileRunningState.Id}:\n" +
|
||||
$" 状态: {(missileRunningState.IsActive ? "激活" : "非激活")}\n" +
|
||||
$" 位置: {missileRunningState.Position}\n" +
|
||||
$" 速度: {missileRunningState.Speed:F2} m/s\n" +
|
||||
$" 速度分量: {missileRunningState.Velocity}\n" +
|
||||
$" 朝向: {missileRunningState.Orientation}\n" +
|
||||
$" 飞行时间: {missileRunningState.FlightTime:F2}/{Properties.MaxFlightTime:F2}\n" +
|
||||
$" 飞行距离: {missileRunningState.FlightDistance:F2}/{Properties.MaxFlightDistance:F2}\n" +
|
||||
$" 发动机工作时间: {missileRunningState.EngineBurnTime:F2}/{Properties.MaxEngineBurnTime:F2}\n" +
|
||||
$" 有引导: {(missileRunningState.IsGuidance ? "是" : "否")}\n" +
|
||||
$" 失去引导时间: {missileRunningState.LostGuidanceTime:F2}\n";
|
||||
// 获取基础状态信息
|
||||
var statusInfo = base.GetStatusInfo();
|
||||
|
||||
// 添加导弹固有属性(通过MissileProperties)
|
||||
statusInfo.ExtendedProperties["Type"] = Properties.Type;
|
||||
statusInfo.ExtendedProperties["MaxSpeed"] = Properties.MaxSpeed;
|
||||
statusInfo.ExtendedProperties["MaxAcceleration"] = Properties.MaxAcceleration;
|
||||
statusInfo.ExtendedProperties["MaxRange"] = Properties.MaxFlightDistance;
|
||||
statusInfo.ExtendedProperties["MaxFlightTime"] = Properties.MaxFlightTime;
|
||||
statusInfo.ExtendedProperties["ExplosionRadius"] = Properties.ExplosionRadius;
|
||||
statusInfo.ExtendedProperties["Mass"] = Properties.Mass;
|
||||
|
||||
// 添加导弹运行时状态
|
||||
statusInfo.ExtendedProperties["FlightTime"] = FlightTime;
|
||||
statusInfo.ExtendedProperties["FlightDistance"] = FlightDistance;
|
||||
statusInfo.ExtendedProperties["EngineBurnTime"] = EngineBurnTime;
|
||||
statusInfo.ExtendedProperties["IsGuidance"] = IsGuidance;
|
||||
statusInfo.ExtendedProperties["LostGuidanceTime"] = LostGuidanceTime;
|
||||
statusInfo.ExtendedProperties["Velocity"] = Velocity;
|
||||
|
||||
return statusInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -61,19 +61,6 @@ namespace ThreatSource.Missile
|
||||
/// 自毁会立即停止导弹的工作并销毁
|
||||
/// </remarks>
|
||||
void SelfDestruct();
|
||||
|
||||
/// <summary>
|
||||
/// 获取导弹的当前运行状态信息
|
||||
/// </summary>
|
||||
/// <returns>包含导弹完整状态信息的结构体</returns>
|
||||
/// <remarks>
|
||||
/// 返回的状态信息包括:
|
||||
/// - 基本信息(ID、类型)
|
||||
/// - 运动状态(位置、速度、朝向)
|
||||
/// - 飞行数据(时间、距离)
|
||||
/// - 工作状态(制导、发动机)
|
||||
/// </remarks>
|
||||
MissileRunningState GetRunningState();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -279,12 +279,11 @@ namespace ThreatSource.Missile
|
||||
/// <remarks>
|
||||
/// 返回信息包括:
|
||||
/// - 基本状态信息
|
||||
/// - 当前飞行阶段
|
||||
/// - 制导系统状态
|
||||
/// </remarks>
|
||||
public override string GetStatus()
|
||||
public override ElementStatusInfo GetStatusInfo()
|
||||
{
|
||||
return base.GetStatus().Replace("导弹", "红外指令制导导弹") + $" 当前阶段: {currentStage}\n " + guidanceSystem.GetStatus();
|
||||
var statusInfo = base.GetStatusInfo();
|
||||
statusInfo.ExtendedProperties["CurrentStage"] = currentStage.ToString();
|
||||
return statusInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -300,19 +300,19 @@ namespace ThreatSource.Missile
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取导弹的状态信息
|
||||
/// 获取导弹状态信息
|
||||
/// </summary>
|
||||
/// <returns>包含导弹状态的详细描述</returns>
|
||||
/// <remarks>
|
||||
/// 返回信息包括:
|
||||
/// - 基类状态信息
|
||||
/// - 基本状态信息
|
||||
/// - 当前飞行阶段
|
||||
/// - 制导系统状态
|
||||
/// - 目标跟踪信息
|
||||
/// </remarks>
|
||||
public override string GetStatus()
|
||||
public override ElementStatusInfo GetStatusInfo()
|
||||
{
|
||||
return base.GetStatus().Replace("导弹", "红外成像末制导导弹") + $" 当前阶段: {currentStage}\n " + guidanceSystem.GetStatus();
|
||||
var statusInfo = base.GetStatusInfo();
|
||||
statusInfo.ExtendedProperties["CurrentStage"] = currentStage.ToString();
|
||||
return statusInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -246,12 +246,13 @@ namespace ThreatSource.Missile
|
||||
/// <remarks>
|
||||
/// 返回信息包括:
|
||||
/// - 基本状态信息
|
||||
/// - 波束跟踪状态
|
||||
/// - 制导系统状态
|
||||
/// - 当前飞行阶段
|
||||
/// </remarks>
|
||||
public override string GetStatus()
|
||||
public override ElementStatusInfo GetStatusInfo()
|
||||
{
|
||||
return base.GetStatus().Replace("导弹", "激光驾束制导导弹") + $" 当前阶段: {currentStage}\n " + guidanceSystem.GetStatus();
|
||||
var statusInfo = base.GetStatusInfo();
|
||||
statusInfo.ExtendedProperties["CurrentStage"] = currentStage.ToString();
|
||||
return statusInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -299,12 +299,13 @@ namespace ThreatSource.Missile
|
||||
/// <remarks>
|
||||
/// 返回信息包括:
|
||||
/// - 基本状态信息
|
||||
/// - 制导系统状态
|
||||
/// - 目标跟踪状态
|
||||
/// - 当前飞行阶段
|
||||
/// </remarks>
|
||||
public override string GetStatus()
|
||||
public override ElementStatusInfo GetStatusInfo()
|
||||
{
|
||||
return base.GetStatus().Replace("导弹", "激光半主动制导导弹") + $" 当前阶段: {currentStage}\n " + guidanceSystem.GetStatus();
|
||||
var statusInfo = base.GetStatusInfo();
|
||||
statusInfo.ExtendedProperties["CurrentStage"] = currentStage.ToString();
|
||||
return statusInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -227,19 +227,19 @@ namespace ThreatSource.Missile
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取导弹的状态信息字符串
|
||||
/// 获取导弹状态信息
|
||||
/// </summary>
|
||||
/// <returns>包含导弹状态的详细描述</returns>
|
||||
/// <remarks>
|
||||
/// 返回信息包括:
|
||||
/// - 基类状态信息
|
||||
/// - 基本状态信息
|
||||
/// - 当前飞行阶段
|
||||
/// - 制导系统状态
|
||||
/// - 目标跟踪信息
|
||||
/// </remarks>
|
||||
public override string GetStatus()
|
||||
public override ElementStatusInfo GetStatusInfo()
|
||||
{
|
||||
return base.GetStatus().Replace("导弹", "毫米波末制导导弹") + $" 当前阶段: {currentStage}\n " + guidanceSystem.GetStatus();
|
||||
var statusInfo = base.GetStatusInfo();
|
||||
statusInfo.ExtendedProperties["CurrentStage"] = currentStage.ToString();
|
||||
return statusInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -331,18 +331,19 @@ namespace ThreatSource.Missile
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取导弹的状态信息字符串
|
||||
/// 获取导弹状态信息
|
||||
/// </summary>
|
||||
/// <returns>包含导弹状态的详细描述</returns>
|
||||
/// <remarks>
|
||||
/// 返回信息包括:
|
||||
/// - 基类状态信息
|
||||
/// - 分离点位置
|
||||
/// - 母弹特有的状态信息
|
||||
/// </remarks>
|
||||
public override string GetStatus()
|
||||
public override ElementStatusInfo GetStatusInfo()
|
||||
{
|
||||
return base.GetStatus().Replace("导弹", "末敏弹(母弹)") + $" 分离点: {separationPoint}";
|
||||
var statusInfo = base.GetStatusInfo();
|
||||
statusInfo.ExtendedProperties["SeparationPoint"] = separationPoint.ToString();
|
||||
return statusInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -699,21 +699,24 @@ namespace ThreatSource.Missile
|
||||
/// - 扫描和检测状态
|
||||
/// - 传感器工作状态
|
||||
/// </remarks>
|
||||
public override string GetStatus()
|
||||
|
||||
public override ElementStatusInfo GetStatusInfo()
|
||||
{
|
||||
var statusInfo = base.GetStatusInfo();
|
||||
// 获取目标对象并计算距离
|
||||
SimulationElement target = SimulationManager.GetEntityById(TargetId) as SimulationElement ?? throw new Exception("目标不存在");
|
||||
double distanceToTarget = (target.Position - Position).Magnitude();
|
||||
|
||||
var status = $"{base.GetStatus().Replace("导弹", "末敏弹(子弹)")}" +
|
||||
$" 运行状态: {currentStage}\n" +
|
||||
$" 扫描角度: {spiralAngle * 180 / Math.PI:F2}°, 弧度值: {spiralAngle:F6}\n" +
|
||||
$" 目标检测: {lastDetectionTime != null}\n" +
|
||||
$" 目标位置: {target.Position}\n" +
|
||||
$" 目标距离: {distanceToTarget:F2}米\n" +
|
||||
$" 传感器状态: {(IsSensorsJammed() ? "传感器受到干扰" : "正常工作")}";
|
||||
statusInfo.ExtendedProperties["CurrentStage"] = currentStage.ToString();
|
||||
statusInfo.ExtendedProperties["SpiralAngle"] = spiralAngle * 180 / Math.PI;
|
||||
statusInfo.ExtendedProperties["LastDetectionTime"] = lastDetectionTime?.ToString() ?? "null";
|
||||
statusInfo.ExtendedProperties["FirstDetectionAngle"] = firstDetectionAngle?.ToString() ?? "null";
|
||||
statusInfo.ExtendedProperties["IsTargetDetected"] = isTargetDetected.ToString();
|
||||
statusInfo.ExtendedProperties["TargetPosition"] = target.Position.ToString();
|
||||
statusInfo.ExtendedProperties["DistanceToTarget"] = distanceToTarget.ToString();
|
||||
statusInfo.ExtendedProperties["IsSensorsJammed"] = IsSensorsJammed().ToString();
|
||||
|
||||
return status;
|
||||
return statusInfo;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -39,7 +39,7 @@ namespace ThreatSource.Sensor
|
||||
/// - 干扰处理机制
|
||||
/// 是具体传感器类的实现基础
|
||||
/// </remarks>
|
||||
public abstract class Sensor : SimulationElement, ISensor, IJammable
|
||||
public abstract class BaseSensor : SimulationElement, ISensor, IJammable
|
||||
{
|
||||
/// <summary>
|
||||
/// 干扰处理组件
|
||||
@ -79,7 +79,7 @@ namespace ThreatSource.Sensor
|
||||
/// - 初始化工作状态
|
||||
/// - 创建干扰处理组件
|
||||
/// </remarks>
|
||||
protected Sensor(string id, MotionParameters motionParameters, ISimulationManager simulationManager)
|
||||
protected BaseSensor(string id, MotionParameters motionParameters, ISimulationManager simulationManager)
|
||||
: base(id, motionParameters, simulationManager)
|
||||
{
|
||||
IsActive = false;
|
||||
@ -17,7 +17,7 @@ namespace ThreatSource.Sensor
|
||||
/// - 实时状态更新
|
||||
/// 用于末敏子弹的目标探测和跟踪
|
||||
/// </remarks>
|
||||
public class InfraredDetector : Sensor
|
||||
public class InfraredDetector : BaseSensor
|
||||
{
|
||||
/// <summary>
|
||||
/// 红外探测器配置
|
||||
|
||||
@ -16,7 +16,7 @@ namespace ThreatSource.Sensor
|
||||
/// - 数据采集
|
||||
/// 用于目标距离的精确测量和跟踪
|
||||
/// </remarks>
|
||||
public class LaserRangefinder : Sensor
|
||||
public class LaserRangefinder : BaseSensor
|
||||
{
|
||||
/// <summary>
|
||||
/// 激光测距仪配置
|
||||
|
||||
@ -17,7 +17,7 @@ namespace ThreatSource.Sensor
|
||||
/// - 数据采集
|
||||
/// 用于末敏子弹的高度测量和地形跟踪
|
||||
/// </remarks>
|
||||
public class MillimeterWaveAltimeter : Sensor
|
||||
public class MillimeterWaveAltimeter : BaseSensor
|
||||
{
|
||||
/// <summary>
|
||||
/// 毫米波测高雷达配置
|
||||
|
||||
@ -17,7 +17,7 @@ namespace ThreatSource.Sensor
|
||||
/// - 实时状态更新
|
||||
/// 用于末敏子弹的目标探测和识别
|
||||
/// </remarks>
|
||||
public class MillimeterWaveRadiometer : Sensor
|
||||
public class MillimeterWaveRadiometer : BaseSensor
|
||||
{
|
||||
/// <summary>
|
||||
/// 毫米波辐射计配置
|
||||
|
||||
85
ThreatSource/src/Simulation/ElementStatusInfo.cs
Normal file
85
ThreatSource/src/Simulation/ElementStatusInfo.cs
Normal file
@ -0,0 +1,85 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using ThreatSource.Utils;
|
||||
|
||||
namespace ThreatSource.Simulation
|
||||
{
|
||||
/// <summary>
|
||||
/// 仿真元素状态信息类,包含所有仿真元素的基本状态属性和扩展属性
|
||||
/// </summary>
|
||||
public class ElementStatusInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// 仿真元素的唯一标识符
|
||||
/// </summary>
|
||||
public string Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 仿真元素的类型名称
|
||||
/// </summary>
|
||||
public string ElementType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 仿真元素的当前位置
|
||||
/// </summary>
|
||||
public Vector3D Position { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 仿真元素的当前朝向
|
||||
/// </summary>
|
||||
public Orientation Orientation { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 仿真元素的当前速度
|
||||
/// </summary>
|
||||
public double Speed { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 仿真元素是否处于活动状态
|
||||
/// </summary>
|
||||
public bool IsActive { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 状态信息的创建时间戳
|
||||
/// </summary>
|
||||
public long Timestamp { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 扩展属性字典,用于存储特定元素类型的额外属性
|
||||
/// </summary>
|
||||
public Dictionary<string, object> ExtendedProperties { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 初始化状态信息对象
|
||||
/// </summary>
|
||||
public ElementStatusInfo()
|
||||
{
|
||||
ExtendedProperties = new Dictionary<string, object>();
|
||||
Timestamp = DateTime.UtcNow.Ticks;
|
||||
|
||||
// 初始化非空属性
|
||||
Id = string.Empty;
|
||||
ElementType = string.Empty;
|
||||
Position = Vector3D.Zero;
|
||||
Orientation = new Orientation();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将状态信息转换为格式化的字符串表示
|
||||
/// </summary>
|
||||
/// <returns>状态的字符串表示</returns>
|
||||
public override string ToString()
|
||||
{
|
||||
string baseInfo = $"仿真元素状态:{ElementType} {Id} at {Position}, Orientation: {Orientation}, Active: {IsActive}";
|
||||
|
||||
if (ExtendedProperties.Count > 0)
|
||||
{
|
||||
string extendedInfo = string.Join(", ", ExtendedProperties.Select(p => $"{p.Key}={p.Value}"));
|
||||
return $"{baseInfo}, {extendedInfo}";
|
||||
}
|
||||
|
||||
return baseInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -59,6 +59,12 @@ namespace ThreatSource.Simulation
|
||||
/// 停用仿真元素,将其从仿真中移除
|
||||
/// </summary>
|
||||
void Deactivate();
|
||||
|
||||
/// <summary>
|
||||
/// 获取仿真元素的结构化状态信息
|
||||
/// </summary>
|
||||
/// <returns>包含实体当前状态的结构化对象</returns>
|
||||
ElementStatusInfo GetStatusInfo();
|
||||
|
||||
/// <summary>
|
||||
/// 获取仿真元素的状态信息
|
||||
|
||||
@ -93,7 +93,23 @@ namespace ThreatSource.Simulation
|
||||
/// </remarks>
|
||||
public virtual string GetStatus()
|
||||
{
|
||||
return $"仿真元素状态:{GetType().Name} {Id} at {Position}, Orientation: {Orientation}, Active: {IsActive}\n";
|
||||
return GetStatusInfo().ToString();
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public virtual ElementStatusInfo GetStatusInfo()
|
||||
{
|
||||
var statusInfo = new ElementStatusInfo
|
||||
{
|
||||
Id = Id,
|
||||
ElementType = GetType().Name,
|
||||
Position = Position,
|
||||
Orientation = Orientation,
|
||||
Speed = Speed,
|
||||
IsActive = IsActive
|
||||
};
|
||||
|
||||
return statusInfo;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user