From af88ac64adc41c3256842478a2be0daf8ec8b76d Mon Sep 17 00:00:00 2001 From: Tian jianyong <11429339@qq.com> Date: Fri, 2 May 2025 17:08:09 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8ElementStatusInfo=E7=B1=BB=EF=BC=8C?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=AE=9E=E7=8E=B0=E8=BF=90=E8=A1=8C=E6=80=81?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E8=BF=94=E5=9B=9E=EF=BC=8C=E5=90=8C=E6=97=B6?= =?UTF-8?q?=E4=BF=AE=E6=94=B9GetStatus=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Jamming/InfraredTrackerJammingTests.cs | 8 +- .../src/Jamming/LaserBeamRiderJammingTests.cs | 4 +- .../Jamming/LaserDesignatorJammingTests.cs | 8 +- ...erminalSensitiveSubmunitionJammingTests.cs | 16 +-- .../src/Missile/BaseMissileTests.cs | 14 +-- .../InfraredCommandGuidedMissileTests.cs | 42 ++----- ...fraredImagingTerminalGuidedMissileTests.cs | 44 ++----- .../src/Missile/LaserBeamRiderMissileTests.cs | 29 ++--- .../LaserSemiActiveGuidedMissileTests.cs | 41 ++----- ...illimeterWaveTerminalGuidedMissileTests.cs | 41 ++----- .../Missile/TerminalSensitiveMissileTests.cs | 40 ++----- .../TerminalSensitiveSubmunitionTests.cs | 25 ---- ThreatSource/src/Data/ThreatSourceFactory.cs | 2 +- ThreatSource/src/Equipment/BaseEquipment.cs | 23 +++- .../src/Guidance/BaseGuidanceSystem.cs | 34 +++--- .../Guidance/InfraredCommandGuidanceSystem.cs | 33 +++--- .../src/Guidance/InfraredImageGenerator.cs | 3 +- .../Guidance/InfraredImagingGuidanceSystem.cs | 17 ++- .../Guidance/LaserBeamRiderGuidanceSystem.cs | 23 ++-- .../Guidance/LaserSemiActiveGuidanceSystem.cs | 18 +-- .../Guidance/MillimeterWaveGuidanceSystem.cs | 23 ++-- ThreatSource/src/Indicator/BaseIndicator.cs | 31 ++--- ThreatSource/src/Indicator/IIndicator.cs | 110 ------------------ ThreatSource/src/Indicator/InfraredTracker.cs | 68 ++--------- ThreatSource/src/Indicator/LaserBeamRider.cs | 73 +++--------- ThreatSource/src/Indicator/LaserDesignator.cs | 75 ++---------- ThreatSource/src/Jammer/BaseJammer.cs | 35 ++++-- ThreatSource/src/Jammer/LaserDecoy.cs | 16 ++- ThreatSource/src/MIssile/BaseMissile.cs | 80 ++++--------- ThreatSource/src/MIssile/IMissile.cs | 13 --- .../MIssile/InfraredCommandGuidedMissile.cs | 9 +- .../InfraredImagingTerminalGuidedMissile.cs | 12 +- .../src/MIssile/LaserBeamRiderMissile.cs | 9 +- .../MIssile/LaserSemiActiveGuidedMissile.cs | 9 +- .../MillimeterWaveTerminalGuidedMissile.cs | 12 +- .../src/MIssile/TerminalSensitiveMissile.cs | 9 +- .../MIssile/TerminalSensitiveSubmunition.cs | 21 ++-- .../src/Sensor/{Sensor.cs => BaseSensor.cs} | 4 +- ThreatSource/src/Sensor/InfraredDetector.cs | 2 +- ThreatSource/src/Sensor/LaserRangefinder.cs | 2 +- .../src/Sensor/MillimeterWaveAltimeter.cs | 2 +- .../src/Sensor/MillimeterWaveRadiometer.cs | 2 +- .../src/Simulation/ElementStatusInfo.cs | 85 ++++++++++++++ .../src/Simulation/ISimulationElement.cs | 6 + .../src/Simulation/SimulationElement.cs | 18 ++- 45 files changed, 439 insertions(+), 752 deletions(-) rename ThreatSource/src/Sensor/{Sensor.cs => BaseSensor.cs} (98%) create mode 100644 ThreatSource/src/Simulation/ElementStatusInfo.cs 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; } ///