diff --git a/ThreatSource.Tests/src/Jamming/InfraredTrackerJammingTests.cs b/ThreatSource.Tests/src/Jamming/InfraredTrackerJammingTests.cs
index 9731cb1..55137e1 100644
--- a/ThreatSource.Tests/src/Jamming/InfraredTrackerJammingTests.cs
+++ b/ThreatSource.Tests/src/Jamming/InfraredTrackerJammingTests.cs
@@ -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]
diff --git a/ThreatSource.Tests/src/Jamming/LaserBeamRiderJammingTests.cs b/ThreatSource.Tests/src/Jamming/LaserBeamRiderJammingTests.cs
index 694e9ff..e7cdeee 100644
--- a/ThreatSource.Tests/src/Jamming/LaserBeamRiderJammingTests.cs
+++ b/ThreatSource.Tests/src/Jamming/LaserBeamRiderJammingTests.cs
@@ -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]
diff --git a/ThreatSource.Tests/src/Jamming/LaserDesignatorJammingTests.cs b/ThreatSource.Tests/src/Jamming/LaserDesignatorJammingTests.cs
index 591a597..731f580 100644
--- a/ThreatSource.Tests/src/Jamming/LaserDesignatorJammingTests.cs
+++ b/ThreatSource.Tests/src/Jamming/LaserDesignatorJammingTests.cs
@@ -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]
diff --git a/ThreatSource.Tests/src/Jamming/TerminalSensitiveSubmunitionJammingTests.cs b/ThreatSource.Tests/src/Jamming/TerminalSensitiveSubmunitionJammingTests.cs
index 9495b98..74d9909 100644
--- a/ThreatSource.Tests/src/Jamming/TerminalSensitiveSubmunitionJammingTests.cs
+++ b/ThreatSource.Tests/src/Jamming/TerminalSensitiveSubmunitionJammingTests.cs
@@ -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, "速度应该保持在开伞阶段的限制范围内");
diff --git a/ThreatSource.Tests/src/Missile/BaseMissileTests.cs b/ThreatSource.Tests/src/Missile/BaseMissileTests.cs
index 93c862d..a9546f0 100644
--- a/ThreatSource.Tests/src/Missile/BaseMissileTests.cs
+++ b/ThreatSource.Tests/src/Missile/BaseMissileTests.cs
@@ -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);
}
}
diff --git a/ThreatSource.Tests/src/Missile/InfraredCommandGuidedMissileTests.cs b/ThreatSource.Tests/src/Missile/InfraredCommandGuidedMissileTests.cs
index 514a5b6..f3bde60 100644
--- a/ThreatSource.Tests/src/Missile/InfraredCommandGuidedMissileTests.cs
+++ b/ThreatSource.Tests/src/Missile/InfraredCommandGuidedMissileTests.cs
@@ -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);
}
}
diff --git a/ThreatSource.Tests/src/Missile/InfraredImagingTerminalGuidedMissileTests.cs b/ThreatSource.Tests/src/Missile/InfraredImagingTerminalGuidedMissileTests.cs
index 90f5875..3c37f2b 100644
--- a/ThreatSource.Tests/src/Missile/InfraredImagingTerminalGuidedMissileTests.cs
+++ b/ThreatSource.Tests/src/Missile/InfraredImagingTerminalGuidedMissileTests.cs
@@ -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);
}
diff --git a/ThreatSource.Tests/src/Missile/LaserBeamRiderMissileTests.cs b/ThreatSource.Tests/src/Missile/LaserBeamRiderMissileTests.cs
index 6d4612c..28bae6d 100644
--- a/ThreatSource.Tests/src/Missile/LaserBeamRiderMissileTests.cs
+++ b/ThreatSource.Tests/src/Missile/LaserBeamRiderMissileTests.cs
@@ -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);
}
}
diff --git a/ThreatSource.Tests/src/Missile/LaserSemiActiveGuidedMissileTests.cs b/ThreatSource.Tests/src/Missile/LaserSemiActiveGuidedMissileTests.cs
index dfd9add..55a6e87 100644
--- a/ThreatSource.Tests/src/Missile/LaserSemiActiveGuidedMissileTests.cs
+++ b/ThreatSource.Tests/src/Missile/LaserSemiActiveGuidedMissileTests.cs
@@ -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);
}
}
diff --git a/ThreatSource.Tests/src/Missile/MillimeterWaveTerminalGuidedMissileTests.cs b/ThreatSource.Tests/src/Missile/MillimeterWaveTerminalGuidedMissileTests.cs
index e871c6b..a885cb5 100644
--- a/ThreatSource.Tests/src/Missile/MillimeterWaveTerminalGuidedMissileTests.cs
+++ b/ThreatSource.Tests/src/Missile/MillimeterWaveTerminalGuidedMissileTests.cs
@@ -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);
}
}
diff --git a/ThreatSource.Tests/src/Missile/TerminalSensitiveMissileTests.cs b/ThreatSource.Tests/src/Missile/TerminalSensitiveMissileTests.cs
index 59918d9..8d51e78 100644
--- a/ThreatSource.Tests/src/Missile/TerminalSensitiveMissileTests.cs
+++ b/ThreatSource.Tests/src/Missile/TerminalSensitiveMissileTests.cs
@@ -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);
}
}
diff --git a/ThreatSource.Tests/src/Missile/TerminalSensitiveSubmunitionTests.cs b/ThreatSource.Tests/src/Missile/TerminalSensitiveSubmunitionTests.cs
index 9f0ebd2..3fb8851 100644
--- a/ThreatSource.Tests/src/Missile/TerminalSensitiveSubmunitionTests.cs
+++ b/ThreatSource.Tests/src/Missile/TerminalSensitiveSubmunitionTests.cs
@@ -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()
{
diff --git a/ThreatSource/src/Data/ThreatSourceFactory.cs b/ThreatSource/src/Data/ThreatSourceFactory.cs
index 05fcbc7..9f247d7 100644
--- a/ThreatSource/src/Data/ThreatSourceFactory.cs
+++ b/ThreatSource/src/Data/ThreatSourceFactory.cs
@@ -133,7 +133,7 @@ namespace ThreatSource.Data
/// 导弹ID
/// 初始运动参数
/// 指示器实例
- 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);
diff --git a/ThreatSource/src/Equipment/BaseEquipment.cs b/ThreatSource/src/Equipment/BaseEquipment.cs
index 81b7af1..3e479cf 100644
--- a/ThreatSource/src/Equipment/BaseEquipment.cs
+++ b/ThreatSource/src/Equipment/BaseEquipment.cs
@@ -97,14 +97,27 @@ namespace ThreatSource.Equipment
SimulationManager.PublishEvent(new TargetDestroyedEvent { TargetId = Id });
}
}
-
+
///
- /// 获取目标状态信息
+ /// 获取目标的结构化状态信息
///
- /// 目标状态信息
- public override string GetStatus()
+ /// 包含目标当前状态的结构化对象
+ 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;
}
}
}
\ No newline at end of file
diff --git a/ThreatSource/src/Guidance/BaseGuidanceSystem.cs b/ThreatSource/src/Guidance/BaseGuidanceSystem.cs
index 5610fa2..8b1ad47 100644
--- a/ThreatSource/src/Guidance/BaseGuidanceSystem.cs
+++ b/ThreatSource/src/Guidance/BaseGuidanceSystem.cs
@@ -219,21 +219,29 @@ namespace ThreatSource.Guidance
}
///
- /// 获取制导系统的状态信息
+ /// 获取制导系统的详细状态信息
///
- /// 包含关键状态参数的字符串
- ///
- /// 返回信息:
- /// - 制导状态
- /// - 干扰状态
- /// - 位置信息
- /// - 速度信息
- /// - 加速度信息
- /// 用于状态监控和调试
- ///
- public override string GetStatus()
+ /// 包含制导系统状态的信息对象
+ 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;
}
///
diff --git a/ThreatSource/src/Guidance/InfraredCommandGuidanceSystem.cs b/ThreatSource/src/Guidance/InfraredCommandGuidanceSystem.cs
index 39c1990..4c73f86 100644
--- a/ThreatSource/src/Guidance/InfraredCommandGuidanceSystem.cs
+++ b/ThreatSource/src/Guidance/InfraredCommandGuidanceSystem.cs
@@ -212,28 +212,29 @@ namespace ThreatSource.Guidance
}
///
- /// 获取制导系统的详细状态信息
+ /// 获取红外指令导引系统的详细状态信息
///
- /// 包含完整状态参数的字符串
- ///
- /// 返回信息:
- /// - 基本状态信息
- /// - 制导加速度
- /// - 方向向量
- /// - 转向速率
- /// 用于系统监控和调试
- ///
- public override string GetStatus()
+ /// 包含导引系统状态的信息对象
+ 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;
}
}
}
diff --git a/ThreatSource/src/Guidance/InfraredImageGenerator.cs b/ThreatSource/src/Guidance/InfraredImageGenerator.cs
index e700b68..7321434 100644
--- a/ThreatSource/src/Guidance/InfraredImageGenerator.cs
+++ b/ThreatSource/src/Guidance/InfraredImageGenerator.cs
@@ -298,9 +298,8 @@ namespace ThreatSource.Guidance
/// 导弹位置
/// 衰减型烟幕透过率
/// 仿真管理器实例
- /// 已计算的烟幕覆盖率字典,键为烟幕ID,值为覆盖率
/// 红外图像
- public InfraredImage GenerateImage(BaseEquipment target, Vector3D missilePosition, double smokeAttenuation, ISimulationManager simulationManager, Dictionary smokeGrenadeOverlapRatios = null)
+ public InfraredImage GenerateImage(BaseEquipment target, Vector3D missilePosition, double smokeAttenuation, ISimulationManager simulationManager)
{
// 更新视线坐标系
UpdateLineOfSightFrame(missilePosition, target.Position);
diff --git a/ThreatSource/src/Guidance/InfraredImagingGuidanceSystem.cs b/ThreatSource/src/Guidance/InfraredImagingGuidanceSystem.cs
index 246df9a..a533e8b 100644
--- a/ThreatSource/src/Guidance/InfraredImagingGuidanceSystem.cs
+++ b/ThreatSource/src/Guidance/InfraredImagingGuidanceSystem.cs
@@ -573,22 +573,19 @@ namespace ThreatSource.Guidance
}
///
- /// 获取制导系统的详细状态信息
+ /// 获取红外图像制导系统的详细状态信息
///
/// 包含完整状态参数的字符串
///
- /// 返回信息:
- /// - 基本状态信息
- /// - 制导加速度
- /// - 目标位置
- /// 用于系统监控和调试
+ /// 特有的返回信息:
+ /// - 上次发现的目标位置
///
- 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;
}
}
}
diff --git a/ThreatSource/src/Guidance/LaserBeamRiderGuidanceSystem.cs b/ThreatSource/src/Guidance/LaserBeamRiderGuidanceSystem.cs
index e807bdf..2ecacae 100644
--- a/ThreatSource/src/Guidance/LaserBeamRiderGuidanceSystem.cs
+++ b/ThreatSource/src/Guidance/LaserBeamRiderGuidanceSystem.cs
@@ -577,20 +577,27 @@ namespace ThreatSource.Guidance
///
/// 获取制导系统的详细状态信息
///
- /// 包含完整状态参数的字符串
+ /// 包含完整状态参数的ElementStatusInfo对象
///
- /// 返回信息:
- /// - 基本状态信息
- /// - 制导参数
- /// - 控制状态
+ /// 特有的返回信息:
+ /// - 激光源位置
+ /// - 激光方向
+ /// - 激光功率
+ /// - 照明状态
/// 用于系统监控和调试
///
- 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;
}
///
diff --git a/ThreatSource/src/Guidance/LaserSemiActiveGuidanceSystem.cs b/ThreatSource/src/Guidance/LaserSemiActiveGuidanceSystem.cs
index a3aff67..42adafd 100644
--- a/ThreatSource/src/Guidance/LaserSemiActiveGuidanceSystem.cs
+++ b/ThreatSource/src/Guidance/LaserSemiActiveGuidanceSystem.cs
@@ -698,21 +698,23 @@ namespace ThreatSource.Guidance
///
/// 获取制导系统的详细状态信息
///
- /// 包含完整状态参数的字符串
+ /// 包含完整状态参数的ElementStatusInfo对象
///
- /// 返回信息:
- /// - 基本状态信息
+ /// 特有的返回信息:
/// - 接收功率数据
/// - 锁定阈值
/// - 四象限探测器状态
/// 用于系统监控和调试
///
- 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;
}
///
diff --git a/ThreatSource/src/Guidance/MillimeterWaveGuidanceSystem.cs b/ThreatSource/src/Guidance/MillimeterWaveGuidanceSystem.cs
index c85dabe..00b7479 100644
--- a/ThreatSource/src/Guidance/MillimeterWaveGuidanceSystem.cs
+++ b/ThreatSource/src/Guidance/MillimeterWaveGuidanceSystem.cs
@@ -661,23 +661,28 @@ namespace ThreatSource.Guidance
///
/// 获取制导系统的详细状态信息
///
- /// 包含完整状态参数的字符串
+ /// 包含完整状态参数的ElementStatusInfo对象
///
- /// 返回信息:
- /// - 基本状态信息
+ /// 特有的返回信息:
+ /// - 当前模式
/// - 目标位置
+ /// - 目标速度
+ /// - 是否有目标
/// 用于系统监控和调试
///
- 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;
}
///
diff --git a/ThreatSource/src/Indicator/BaseIndicator.cs b/ThreatSource/src/Indicator/BaseIndicator.cs
index 8c4ea59..1b3f511 100644
--- a/ThreatSource/src/Indicator/BaseIndicator.cs
+++ b/ThreatSource/src/Indicator/BaseIndicator.cs
@@ -17,7 +17,7 @@ namespace ThreatSource.Indicator
/// - 干扰处理机制
/// 是具体指示器类的实现基础
///
- public abstract class BaseIndicator : SimulationElement, IIndicator, IJammable
+ public abstract class BaseIndicator : SimulationElement, IJammable
{
///
/// 视觉遮挡阈值 (0.0 - 1.0)
@@ -253,22 +253,23 @@ namespace ThreatSource.Indicator
}
///
- /// 获取指示器运行状态
+ /// 获取指示器的详细状态信息
///
- /// 包含指示器完整状态信息的结构体
- ///
- /// 子类需要重写此方法以提供完整的状态信息
- /// 包括位置、姿态、目标关联和干扰状态等
- ///
- public abstract IndicatorRunningState GetRunningState();
-
- ///
- /// 获取指示器状态信息
- ///
- /// 包含指示器状态信息的字符串
- public override string GetStatus()
+ /// 包含指示器状态的信息对象
+ 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;
}
///
diff --git a/ThreatSource/src/Indicator/IIndicator.cs b/ThreatSource/src/Indicator/IIndicator.cs
index ded74c5..e32ae49 100644
--- a/ThreatSource/src/Indicator/IIndicator.cs
+++ b/ThreatSource/src/Indicator/IIndicator.cs
@@ -33,116 +33,6 @@ namespace ThreatSource.Indicator
/// 可以为null表示当前没有关联导弹
///
string? MissileId { get; }
-
- ///
- /// 获取指示器的当前运行状态
- ///
- /// 包含指示器完整状态信息的结构体
- ///
- /// 返回的状态信息包括:
- /// - 目标和导弹的关联状态
- /// - 指示器的工作状态
- /// - 位置、速度和姿态信息
- /// - 激活状态
- /// - 干扰状态
- ///
- IndicatorRunningState GetRunningState();
- }
-
- ///
- /// 指示器运行状态结构体,包含了指示器的完整状态信息
- ///
- ///
- /// 该结构体封装了指示器的所有关键状态:
- /// - 关联信息(目标和导弹)
- /// - 工作状态(类型和状态)
- /// - 运动状态(位置、速度、姿态)
- /// - 功能状态(是否激活)
- /// - 干扰状态(是否被干扰)
- /// 用于状态监控和控制决策
- ///
- public struct IndicatorRunningState
- {
- ///
- /// 获取或设置目标ID
- ///
- ///
- /// 标识当前跟踪的目标
- /// 用于目标关联和状态更新
- ///
- public string TargetId { get; set; }
-
- ///
- /// 获取或设置导弹ID
- ///
- ///
- /// 标识当前控制的导弹
- /// 用于导弹制导和状态同步
- ///
- public string MissileId { get; set; }
-
- ///
- /// 获取或设置指示器类型
- ///
- ///
- /// 表示指示器的具体类型
- /// 影响指示器的工作模式和性能参数
- ///
- public IndicatorType Type { get; set; }
-
- ///
- /// 获取或设置指示器状态
- ///
- ///
- /// 表示指示器的当前工作状态
- /// 用于控制指示器的工作模式
- ///
- public IndicatorState State { get; set; }
-
- ///
- /// 获取或设置指示器位置
- ///
- ///
- /// 指示器在三维空间中的位置向量
- /// 用于空间定位和运动控制
- ///
- public Vector3D Position { get; set; }
-
- ///
- /// 获取或设置指示器速度
- ///
- ///
- /// 指示器在三维空间中的速度向量
- /// 用于运动状态更新和预测
- ///
- public Vector3D Velocity { get; set; }
-
- ///
- /// 获取或设置指示器朝向
- ///
- ///
- /// 指示器在三维空间中的姿态
- /// 影响指示器的工作效果和精度
- ///
- public Orientation Orientation { get; set; }
-
- ///
- /// 获取或设置指示器是否激活
- ///
- ///
- /// 表示指示器是否处于工作状态
- /// true表示正在工作,false表示待机
- ///
- public bool IsActive { get; set; }
-
- ///
- /// 获取或设置指示器的干扰状态
- ///
- ///
- /// 表示指示器当前的干扰状态
- /// 用于状态监控和干扰防护
- ///
- public JammingState JammingState { get; set; }
}
///
diff --git a/ThreatSource/src/Indicator/InfraredTracker.cs b/ThreatSource/src/Indicator/InfraredTracker.cs
index 6909f69..c8307a1 100644
--- a/ThreatSource/src/Indicator/InfraredTracker.cs
+++ b/ThreatSource/src/Indicator/InfraredTracker.cs
@@ -341,67 +341,17 @@ namespace ThreatSource.Indicator
}
///
- /// 获取红外测角仪运行状态
+ /// 获取红外测角仪的详细状态信息
///
- /// 包含测角仪完整状态信息的结构体
- ///
- /// 返回信息包括:
- /// - 目标和导弹关联状态
- /// - 工作类型和状态
- /// - 位置和姿态信息
- /// - 激活状态
- /// - 干扰状态 (包括电子干扰和烟幕遮挡)
- ///
- public override IndicatorRunningState GetRunningState()
+ /// 包含红外测角仪状态的信息对象
+ 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
- };
- }
-
- ///
- /// 获取红外测角仪状态信息
- ///
- /// 包含测角仪状态的详细描述
- ///
- /// 返回信息包括:
- /// - 基本标识信息
- /// - 位置信息
- /// - 目标关联状态
- /// - 工作状态
- /// - 跟踪状态
- /// - 干扰/遮挡状态
- ///
- 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;
}
///
diff --git a/ThreatSource/src/Indicator/LaserBeamRider.cs b/ThreatSource/src/Indicator/LaserBeamRider.cs
index e38f743..f36bd55 100644
--- a/ThreatSource/src/Indicator/LaserBeamRider.cs
+++ b/ThreatSource/src/Indicator/LaserBeamRider.cs
@@ -291,70 +291,23 @@ namespace ThreatSource.Indicator
}
///
- /// 获取指示器运行状态
+ /// 获取激光驾束仪的详细状态信息
///
- /// 包含指示器完整状态信息的结构体
- ///
- /// 返回信息包括:
- /// - 目标和导弹关联状态
- /// - 工作类型和状态
- /// - 位置和姿态信息
- /// - 激活状态
- /// - 干扰/遮挡状态
- ///
- public override IndicatorRunningState GetRunningState()
+ /// 包含激光驾束仪状态的信息对象
+ 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;
}
- ///
- /// 获取激光驾束仪状态字符串
- ///
- /// 包含设备状态的详细描述
- ///
- /// 返回信息包括:
- /// - 设备ID和位置
- /// - 激光参数(功率、发散角等)
- /// - 工作状态(激活、照射等)
- /// - 制导范围参数
- /// - 干扰/遮挡状态
- ///
- 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";
- }
-
///
/// 处理指示器被干扰的事件
///
diff --git a/ThreatSource/src/Indicator/LaserDesignator.cs b/ThreatSource/src/Indicator/LaserDesignator.cs
index 428f985..ae4d913 100644
--- a/ThreatSource/src/Indicator/LaserDesignator.cs
+++ b/ThreatSource/src/Indicator/LaserDesignator.cs
@@ -345,71 +345,20 @@ namespace ThreatSource.Indicator
}
///
- /// 获取指示器运行状态
+ /// 获取激光驾束仪的详细状态信息
///
- /// 包含指示器完整状态信息的结构体
- ///
- /// 返回信息包括:
- /// - 目标和导弹关联状态
- /// - 工作类型和状态
- /// - 位置和姿态信息
- /// - 激活状态
- /// - 干扰/遮挡状态
- ///
- public override IndicatorRunningState GetRunningState()
+ /// 包含激光驾束仪状态的信息对象
+ 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
- };
- }
-
- ///
- /// 获取激光指示器状态信息
- ///
- /// 包含指示器状态的详细描述
- ///
- /// 返回信息包括:
- /// - 基本标识信息
- /// - 位置信息
- /// - 目标关联状态
- /// - 工作状态
- /// - 干扰/遮挡状态
- /// - 激光参数
- ///
- 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;
}
}
}
diff --git a/ThreatSource/src/Jammer/BaseJammer.cs b/ThreatSource/src/Jammer/BaseJammer.cs
index d00bcb6..3e695b4 100644
--- a/ThreatSource/src/Jammer/BaseJammer.cs
+++ b/ThreatSource/src/Jammer/BaseJammer.cs
@@ -215,20 +215,31 @@ namespace ThreatSource.Jammer
}
///
- /// 获取干扰器状态信息
+ /// 获取干扰器的详细状态信息
///
- /// 干扰器状态信息
- public override string GetStatus()
+ /// 包含干扰器状态的信息对象
+ 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;
}
}
}
diff --git a/ThreatSource/src/Jammer/LaserDecoy.cs b/ThreatSource/src/Jammer/LaserDecoy.cs
index 5e9d25f..1a93274 100644
--- a/ThreatSource/src/Jammer/LaserDecoy.cs
+++ b/ThreatSource/src/Jammer/LaserDecoy.cs
@@ -84,12 +84,20 @@ namespace ThreatSource.Jammer
}
///
- /// 获取激光诱偏目标状态
+ /// 获取激光诱偏目标的详细状态信息
///
- /// 激光诱偏目标状态
- public override string GetStatus()
+ /// 包含激光诱偏目标状态的信息对象
+ 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;
}
}
}
\ No newline at end of file
diff --git a/ThreatSource/src/MIssile/BaseMissile.cs b/ThreatSource/src/MIssile/BaseMissile.cs
index 8f2791a..18505af 100644
--- a/ThreatSource/src/MIssile/BaseMissile.cs
+++ b/ThreatSource/src/MIssile/BaseMissile.cs
@@ -481,63 +481,31 @@ namespace ThreatSource.Missile
{
// 基类中的默认实现
}
-
- ///
- /// 获取导弹的完整运行状态
- ///
- /// 包含导弹所有状态信息的结构体
- ///
- /// 返回的状态包括:
- /// - 基本信息(ID、类型)
- /// - 运动状态(位置、速度、朝向)
- /// - 飞行数据(时间、距离)
- /// - 工作状态(制导、发动机)
- ///
- public MissileRunningState GetRunningState()
+
+ ///
+ 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
- };
- }
-
- ///
- /// 获取导弹的状态信息字符串
- ///
- /// 包含导弹状态的详细描述
- ///
- /// 返回信息包括:
- /// - 导弹ID和类型
- /// - 位置和速度信息
- /// - 飞行时间和距离
- /// - 制导和发动机状态
- ///
- 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;
}
}
}
diff --git a/ThreatSource/src/MIssile/IMissile.cs b/ThreatSource/src/MIssile/IMissile.cs
index f28d2f7..268adad 100644
--- a/ThreatSource/src/MIssile/IMissile.cs
+++ b/ThreatSource/src/MIssile/IMissile.cs
@@ -61,19 +61,6 @@ namespace ThreatSource.Missile
/// 自毁会立即停止导弹的工作并销毁
///
void SelfDestruct();
-
- ///
- /// 获取导弹的当前运行状态信息
- ///
- /// 包含导弹完整状态信息的结构体
- ///
- /// 返回的状态信息包括:
- /// - 基本信息(ID、类型)
- /// - 运动状态(位置、速度、朝向)
- /// - 飞行数据(时间、距离)
- /// - 工作状态(制导、发动机)
- ///
- MissileRunningState GetRunningState();
}
///
diff --git a/ThreatSource/src/MIssile/InfraredCommandGuidedMissile.cs b/ThreatSource/src/MIssile/InfraredCommandGuidedMissile.cs
index 108b4db..3252983 100644
--- a/ThreatSource/src/MIssile/InfraredCommandGuidedMissile.cs
+++ b/ThreatSource/src/MIssile/InfraredCommandGuidedMissile.cs
@@ -279,12 +279,11 @@ namespace ThreatSource.Missile
///
/// 返回信息包括:
/// - 基本状态信息
- /// - 当前飞行阶段
- /// - 制导系统状态
- ///
- 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;
}
}
}
diff --git a/ThreatSource/src/MIssile/InfraredImagingTerminalGuidedMissile.cs b/ThreatSource/src/MIssile/InfraredImagingTerminalGuidedMissile.cs
index 19b4dc2..e3d7b6c 100644
--- a/ThreatSource/src/MIssile/InfraredImagingTerminalGuidedMissile.cs
+++ b/ThreatSource/src/MIssile/InfraredImagingTerminalGuidedMissile.cs
@@ -300,19 +300,19 @@ namespace ThreatSource.Missile
}
///
- /// 获取导弹的状态信息
+ /// 获取导弹状态信息
///
/// 包含导弹状态的详细描述
///
/// 返回信息包括:
- /// - 基类状态信息
+ /// - 基本状态信息
/// - 当前飞行阶段
- /// - 制导系统状态
- /// - 目标跟踪信息
///
- 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;
}
}
}
diff --git a/ThreatSource/src/MIssile/LaserBeamRiderMissile.cs b/ThreatSource/src/MIssile/LaserBeamRiderMissile.cs
index c4c0f55..854503b 100644
--- a/ThreatSource/src/MIssile/LaserBeamRiderMissile.cs
+++ b/ThreatSource/src/MIssile/LaserBeamRiderMissile.cs
@@ -246,12 +246,13 @@ namespace ThreatSource.Missile
///
/// 返回信息包括:
/// - 基本状态信息
- /// - 波束跟踪状态
- /// - 制导系统状态
+ /// - 当前飞行阶段
///
- 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;
}
}
}
diff --git a/ThreatSource/src/MIssile/LaserSemiActiveGuidedMissile.cs b/ThreatSource/src/MIssile/LaserSemiActiveGuidedMissile.cs
index 44e3d94..2692163 100644
--- a/ThreatSource/src/MIssile/LaserSemiActiveGuidedMissile.cs
+++ b/ThreatSource/src/MIssile/LaserSemiActiveGuidedMissile.cs
@@ -299,12 +299,13 @@ namespace ThreatSource.Missile
///
/// 返回信息包括:
/// - 基本状态信息
- /// - 制导系统状态
- /// - 目标跟踪状态
+ /// - 当前飞行阶段
///
- 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;
}
}
}
diff --git a/ThreatSource/src/MIssile/MillimeterWaveTerminalGuidedMissile.cs b/ThreatSource/src/MIssile/MillimeterWaveTerminalGuidedMissile.cs
index caa5704..79a11ca 100644
--- a/ThreatSource/src/MIssile/MillimeterWaveTerminalGuidedMissile.cs
+++ b/ThreatSource/src/MIssile/MillimeterWaveTerminalGuidedMissile.cs
@@ -227,19 +227,19 @@ namespace ThreatSource.Missile
}
///
- /// 获取导弹的状态信息字符串
+ /// 获取导弹状态信息
///
/// 包含导弹状态的详细描述
///
/// 返回信息包括:
- /// - 基类状态信息
+ /// - 基本状态信息
/// - 当前飞行阶段
- /// - 制导系统状态
- /// - 目标跟踪信息
///
- 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;
}
}
}
diff --git a/ThreatSource/src/MIssile/TerminalSensitiveMissile.cs b/ThreatSource/src/MIssile/TerminalSensitiveMissile.cs
index 77cd978..fcc13ff 100644
--- a/ThreatSource/src/MIssile/TerminalSensitiveMissile.cs
+++ b/ThreatSource/src/MIssile/TerminalSensitiveMissile.cs
@@ -331,18 +331,19 @@ namespace ThreatSource.Missile
}
///
- /// 获取导弹的状态信息字符串
+ /// 获取导弹状态信息
///
/// 包含导弹状态的详细描述
///
/// 返回信息包括:
/// - 基类状态信息
/// - 分离点位置
- /// - 母弹特有的状态信息
///
- public override string GetStatus()
+ public override ElementStatusInfo GetStatusInfo()
{
- return base.GetStatus().Replace("导弹", "末敏弹(母弹)") + $" 分离点: {separationPoint}";
+ var statusInfo = base.GetStatusInfo();
+ statusInfo.ExtendedProperties["SeparationPoint"] = separationPoint.ToString();
+ return statusInfo;
}
}
}
\ No newline at end of file
diff --git a/ThreatSource/src/MIssile/TerminalSensitiveSubmunition.cs b/ThreatSource/src/MIssile/TerminalSensitiveSubmunition.cs
index eff7ea9..b7686c7 100644
--- a/ThreatSource/src/MIssile/TerminalSensitiveSubmunition.cs
+++ b/ThreatSource/src/MIssile/TerminalSensitiveSubmunition.cs
@@ -699,21 +699,24 @@ namespace ThreatSource.Missile
/// - 扫描和检测状态
/// - 传感器工作状态
///
- 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;
}
///
diff --git a/ThreatSource/src/Sensor/Sensor.cs b/ThreatSource/src/Sensor/BaseSensor.cs
similarity index 98%
rename from ThreatSource/src/Sensor/Sensor.cs
rename to ThreatSource/src/Sensor/BaseSensor.cs
index d3f26a8..f801f33 100644
--- a/ThreatSource/src/Sensor/Sensor.cs
+++ b/ThreatSource/src/Sensor/BaseSensor.cs
@@ -39,7 +39,7 @@ namespace ThreatSource.Sensor
/// - 干扰处理机制
/// 是具体传感器类的实现基础
///
- public abstract class Sensor : SimulationElement, ISensor, IJammable
+ public abstract class BaseSensor : SimulationElement, ISensor, IJammable
{
///
/// 干扰处理组件
@@ -79,7 +79,7 @@ namespace ThreatSource.Sensor
/// - 初始化工作状态
/// - 创建干扰处理组件
///
- protected Sensor(string id, MotionParameters motionParameters, ISimulationManager simulationManager)
+ protected BaseSensor(string id, MotionParameters motionParameters, ISimulationManager simulationManager)
: base(id, motionParameters, simulationManager)
{
IsActive = false;
diff --git a/ThreatSource/src/Sensor/InfraredDetector.cs b/ThreatSource/src/Sensor/InfraredDetector.cs
index c61a81a..8e67ea5 100644
--- a/ThreatSource/src/Sensor/InfraredDetector.cs
+++ b/ThreatSource/src/Sensor/InfraredDetector.cs
@@ -17,7 +17,7 @@ namespace ThreatSource.Sensor
/// - 实时状态更新
/// 用于末敏子弹的目标探测和跟踪
///
- public class InfraredDetector : Sensor
+ public class InfraredDetector : BaseSensor
{
///
/// 红外探测器配置
diff --git a/ThreatSource/src/Sensor/LaserRangefinder.cs b/ThreatSource/src/Sensor/LaserRangefinder.cs
index 15f1dba..d4c7d18 100644
--- a/ThreatSource/src/Sensor/LaserRangefinder.cs
+++ b/ThreatSource/src/Sensor/LaserRangefinder.cs
@@ -16,7 +16,7 @@ namespace ThreatSource.Sensor
/// - 数据采集
/// 用于目标距离的精确测量和跟踪
///
- public class LaserRangefinder : Sensor
+ public class LaserRangefinder : BaseSensor
{
///
/// 激光测距仪配置
diff --git a/ThreatSource/src/Sensor/MillimeterWaveAltimeter.cs b/ThreatSource/src/Sensor/MillimeterWaveAltimeter.cs
index 767c5ea..2a46846 100644
--- a/ThreatSource/src/Sensor/MillimeterWaveAltimeter.cs
+++ b/ThreatSource/src/Sensor/MillimeterWaveAltimeter.cs
@@ -17,7 +17,7 @@ namespace ThreatSource.Sensor
/// - 数据采集
/// 用于末敏子弹的高度测量和地形跟踪
///
- public class MillimeterWaveAltimeter : Sensor
+ public class MillimeterWaveAltimeter : BaseSensor
{
///
/// 毫米波测高雷达配置
diff --git a/ThreatSource/src/Sensor/MillimeterWaveRadiometer.cs b/ThreatSource/src/Sensor/MillimeterWaveRadiometer.cs
index b7f6827..cafb8fc 100644
--- a/ThreatSource/src/Sensor/MillimeterWaveRadiometer.cs
+++ b/ThreatSource/src/Sensor/MillimeterWaveRadiometer.cs
@@ -17,7 +17,7 @@ namespace ThreatSource.Sensor
/// - 实时状态更新
/// 用于末敏子弹的目标探测和识别
///
- public class MillimeterWaveRadiometer : Sensor
+ public class MillimeterWaveRadiometer : BaseSensor
{
///
/// 毫米波辐射计配置
diff --git a/ThreatSource/src/Simulation/ElementStatusInfo.cs b/ThreatSource/src/Simulation/ElementStatusInfo.cs
new file mode 100644
index 0000000..d8fc5a4
--- /dev/null
+++ b/ThreatSource/src/Simulation/ElementStatusInfo.cs
@@ -0,0 +1,85 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using ThreatSource.Utils;
+
+namespace ThreatSource.Simulation
+{
+ ///
+ /// 仿真元素状态信息类,包含所有仿真元素的基本状态属性和扩展属性
+ ///
+ public class ElementStatusInfo
+ {
+ ///
+ /// 仿真元素的唯一标识符
+ ///
+ public string Id { get; set; }
+
+ ///
+ /// 仿真元素的类型名称
+ ///
+ public string ElementType { get; set; }
+
+ ///
+ /// 仿真元素的当前位置
+ ///
+ public Vector3D Position { get; set; }
+
+ ///
+ /// 仿真元素的当前朝向
+ ///
+ public Orientation Orientation { get; set; }
+
+ ///
+ /// 仿真元素的当前速度
+ ///
+ public double Speed { get; set; }
+
+ ///
+ /// 仿真元素是否处于活动状态
+ ///
+ public bool IsActive { get; set; }
+
+ ///
+ /// 状态信息的创建时间戳
+ ///
+ public long Timestamp { get; set; }
+
+ ///
+ /// 扩展属性字典,用于存储特定元素类型的额外属性
+ ///
+ public Dictionary ExtendedProperties { get; set; }
+
+ ///
+ /// 初始化状态信息对象
+ ///
+ public ElementStatusInfo()
+ {
+ ExtendedProperties = new Dictionary();
+ Timestamp = DateTime.UtcNow.Ticks;
+
+ // 初始化非空属性
+ Id = string.Empty;
+ ElementType = string.Empty;
+ Position = Vector3D.Zero;
+ Orientation = new Orientation();
+ }
+
+ ///
+ /// 将状态信息转换为格式化的字符串表示
+ ///
+ /// 状态的字符串表示
+ 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;
+ }
+ }
+}
\ No newline at end of file
diff --git a/ThreatSource/src/Simulation/ISimulationElement.cs b/ThreatSource/src/Simulation/ISimulationElement.cs
index c4068cb..e1d51d7 100644
--- a/ThreatSource/src/Simulation/ISimulationElement.cs
+++ b/ThreatSource/src/Simulation/ISimulationElement.cs
@@ -59,6 +59,12 @@ namespace ThreatSource.Simulation
/// 停用仿真元素,将其从仿真中移除
///
void Deactivate();
+
+ ///
+ /// 获取仿真元素的结构化状态信息
+ ///
+ /// 包含实体当前状态的结构化对象
+ ElementStatusInfo GetStatusInfo();
///
/// 获取仿真元素的状态信息
diff --git a/ThreatSource/src/Simulation/SimulationElement.cs b/ThreatSource/src/Simulation/SimulationElement.cs
index b4cbb89..941fb17 100644
--- a/ThreatSource/src/Simulation/SimulationElement.cs
+++ b/ThreatSource/src/Simulation/SimulationElement.cs
@@ -93,7 +93,23 @@ namespace ThreatSource.Simulation
///
public virtual string GetStatus()
{
- return $"仿真元素状态:{GetType().Name} {Id} at {Position}, Orientation: {Orientation}, Active: {IsActive}\n";
+ return GetStatusInfo().ToString();
+ }
+
+ ///
+ public virtual ElementStatusInfo GetStatusInfo()
+ {
+ var statusInfo = new ElementStatusInfo
+ {
+ Id = Id,
+ ElementType = GetType().Name,
+ Position = Position,
+ Orientation = Orientation,
+ Speed = Speed,
+ IsActive = IsActive
+ };
+
+ return statusInfo;
}
///