删除了 json 格式的配置文件,添加了坦克移动模式,并修改了坦克的朝向和速度

This commit is contained in:
Tian jianyong 2025-06-09 14:27:14 +08:00
parent f873ebfd5b
commit 953ef0b968
45 changed files with 195 additions and 996 deletions

View File

@ -1,35 +0,0 @@
{
"name": {
"zh": "装甲运兵车-001",
"en": "Armored Personnel Carrier-001"
},
"type": "APC",
"properties": {
"type": "APC",
"mass": 25000.0,
"length": 7.0,
"width": 3.2,
"height": 2.8,
"maxSpeed": 80.0,
"armorThickness": 400.0,
"radarCrossSection": 12.0,
"infraredRadiationIntensity": 2000.0,
"ultravioletRadiationIntensity": 12.0,
"millimeterWaveRadiationIntensity": 8.0,
"millimeterWaveRadiationTemperature": 350.0,
"laserReflectivity": 0.25,
"thermalPattern": {
"description": "3x3 matrix representing side view temperature distribution (°C)",
"static": [
[35, 40, 65],
[30, 35, 70],
[40, 40, 45]
],
"moving": [
[40, 45, 70],
[35, 40, 75],
[50, 50, 55]
]
}
}
}

View File

@ -1,35 +0,0 @@
{
"name": {
"zh": "武装直升机-001",
"en": "Attack Helicopter-001"
},
"type": "Helicopter",
"properties": {
"type": "Helicopter",
"mass": 10000.0,
"length": 17.0,
"width": 3.0,
"height": 4.5,
"maxSpeed": 280.0,
"armorThickness": 150.0,
"radarCrossSection": 8.0,
"infraredRadiationIntensity": 3000.0,
"ultravioletRadiationIntensity": 20.0,
"millimeterWaveRadiationIntensity": 6.0,
"millimeterWaveRadiationTemperature": 450.0,
"laserReflectivity": 0.2,
"thermalPattern": {
"description": "3x3 matrix representing side view temperature distribution (°C)",
"static": [
[85, 110, 80],
[35, 45, 40],
[30, 35, 30]
],
"moving": [
[90, 115, 85],
[40, 50, 45],
[35, 40, 35]
]
}
}
}

View File

@ -1,35 +0,0 @@
{
"name": {
"zh": "主战坦克-001",
"en": "Main Battle Tank-001"
},
"type": "Tank",
"properties": {
"type": "Tank",
"mass": 50000.0,
"length": 10.0,
"width": 3.5,
"height": 2.4,
"maxSpeed": 70.0,
"armorThickness": 800.0,
"radarCrossSection": 15.0,
"infraredRadiationIntensity": 250.0,
"ultravioletRadiationIntensity": 15.0,
"millimeterWaveRadiationIntensity": 10.0,
"millimeterWaveRadiationTemperature": 150.0,
"laserReflectivity": 0.3,
"thermalPattern": {
"description": "3x3 matrix representing side view temperature distribution (°C)",
"static": [
[40, 45, 80],
[35, 40, 90],
[50, 50, 60]
],
"moving": [
[45, 50, 85],
[40, 45, 95],
[65, 65, 75]
]
}
}
}

View File

@ -1,14 +0,0 @@
{
"name": {
"zh": "红外测角仪-001",
"en": "IR Tracker-001"
},
"type": "InfraredTracker",
"infraredTrackerConfig": {
"maxTrackingRange": 10000.0,
"fieldOfView": 0.2,
"angleMeasurementAccuracy": 0.001,
"updateFrequency": 10.0,
"jammingResistanceThreshold": 1e-5
}
}

View File

@ -1,19 +0,0 @@
{
"name": {
"zh": "激光驾束仪-001",
"en": "Laser Beam Rider-001"
},
"type": "LaserBeamRider",
"beamRiderConfig": {
"power": 1000,
"wavelength": 1.06,
"jammingResistanceThreshold": 1e-5,
"controlFieldDiameter": 6.0,
"laserCodeConfig": {
"code": {
"codeType": "PRF",
"codeValue": 1010
}
}
}
}

View File

@ -1,19 +0,0 @@
{
"name": {
"zh": "前视激光指示器-001",
"en": "Forward Looking Laser Designator-001"
},
"type": "LaserDesignator",
"designatorConfig": {
"power": 5000,
"wavelength": 1.06,
"divergenceAngle": 0.0003,
"jammingResistanceThreshold": 1e-5,
"laserCodeConfig": {
"code": {
"codeType": "PRF",
"codeValue": 1010
}
}
}
}

View File

@ -1,14 +0,0 @@
{
"name": {
"zh": "红外阻塞干扰器",
"en": "Infrared Blocking Jammer"
},
"type": "Infrared",
"InfraredJammerConfig": {
"Power": 2000,
"Wavelength": 5,
"AngleRange": 10,
"Mode": "Blocking",
"Duration": 60
}
}

View File

@ -1,14 +0,0 @@
{
"name": {
"zh": "红外欺骗干扰器",
"en": "Infrared Deception Jammer"
},
"type": "Infrared",
"InfraredJammerConfig": {
"Power": 800,
"Wavelength": 5,
"AngleRange": 15,
"Mode": "Deception",
"Duration": 60
}
}

View File

@ -1,14 +0,0 @@
{
"name": {
"zh": "红外阻塞干扰器",
"en": "Infrared Blocking Jammer"
},
"type": "Infrared",
"InfraredJammerConfig": {
"Power": 1000,
"Wavelength": 5,
"AngleRange": 10,
"Mode": "Blocking",
"Duration": 60
}
}

View File

@ -1,14 +0,0 @@
{
"name": {
"zh": "红外阻塞干扰器",
"en": "Infrared Blocking Jammer"
},
"type": "Infrared",
"InfraredJammerConfig": {
"Power": 2000,
"Wavelength": 5,
"AngleRange": 90,
"Mode": "Blocking",
"Duration": 60
}
}

View File

@ -1,14 +0,0 @@
{
"name": {
"zh": "激光阻塞干扰器",
"en": "Laser Blocking Jammer"
},
"type": "Laser",
"LaserJammerConfig": {
"Power": 2000,
"wavelength": 1.06,
"angleRange": 10,
"Mode": "Blocking",
"Duration": 60
}
}

View File

@ -1,14 +0,0 @@
{
"name": {
"zh": "激光欺骗干扰器",
"en": "Laser Deception Jammer"
},
"type": "Laser",
"LaserJammerConfig": {
"Power": 800,
"Wavelength": 1.06,
"AngleRange": 15,
"Mode": "Deception",
"Duration": 60
}
}

View File

@ -1,16 +0,0 @@
{
"name": {
"zh": "激光诱偏目标",
"en": "Laser Decoy"
},
"type": "LaserDecoy",
"LaserDecoyConfig": {
"Mode": "Deception",
"Power": 200.0,
"Wavelength": 1.06,
"DivergenceAngle": 0.001,
"ReflectiveArea": 1.2,
"ReflectionCoefficient": 0.8,
"Duration": 60.0
}
}

View File

@ -7,7 +7,7 @@ En = "Laser Decoy"
[LaserDecoyConfig]
Mode = "Deception" # 模式
Power = 200.0 # 功率 (瓦特)
Power = 10.0 # 功率 (瓦特)
Wavelength = 1.06 # 波长 (微米)
DivergenceAngle = 0.001 # 发散角 (弧度)
ReflectiveArea = 1.2 # 反射面积 (平方米)

View File

@ -1,14 +0,0 @@
{
"name": {
"zh": "激光阻塞干扰器",
"en": "Laser Blocking Jammer"
},
"type": "Laser",
"LaserJammerConfig": {
"Power": 2000,
"wavelength": 1.06,
"angleRange": 90,
"Mode": "Blocking",
"Duration": 60
}
}

View File

@ -1,14 +0,0 @@
{
"name": {
"zh": "毫米波阻塞干扰器",
"en": "Millimeter Wave Blocking Jammer"
},
"type": "MillimeterWave",
"MillimeterWaveJammerConfig": {
"Power": 2000,
"Wavelength": 3.19,
"AngleRange": 15,
"Mode": "Blocking",
"Duration": 60
}
}

View File

@ -1,15 +0,0 @@
{
"name": {
"zh": "毫米波补偿干扰器",
"en": "Millimeter Wave Compensation Jammer"
},
"type": "MillimeterWaveCompensation",
"MillimeterWaveCompensationJammerConfig": {
"CompensationTemperature": 293.15,
"Power": 1000,
"Wavelength": 8,
"AngleRange": 90,
"Mode": "Deception",
"Duration": 60
}
}

View File

@ -1,14 +0,0 @@
{
"name": {
"zh": "毫米波顶部阻塞干扰器",
"en": "Millimeter Wave Top Blocking Jammer"
},
"type": "MillimeterWave",
"MillimeterWaveJammerConfig": {
"Power": 2000,
"Wavelength": 3.19,
"AngleRange": 90,
"Mode": "Blocking",
"Duration": 60
}
}

View File

@ -1,20 +0,0 @@
{
"name": {
"zh": "周边烟幕弹",
"en": "Surround Smoke Grenade"
},
"type": "SmokeGrenade",
"SmokeGrenadeConfig": {
"smokeType": "Wall",
"IsObscuring": true,
"RadiationTemperature": 395.0,
"concentration": 0.2,
"duration": 60.0,
"wallWidth": 50.0,
"wallHeight": 10.0,
"cloudDiameter": 0.0,
"thickness": 5.0,
"formationDelay": 2.0,
"expansionRate": 5.0
}
}

View File

@ -1,20 +0,0 @@
{
"name": {
"zh": "周边烟幕弹",
"en": "Surround Smoke Grenade"
},
"type": "SmokeGrenade",
"SmokeGrenadeConfig": {
"smokeType": "Wall",
"IsObscuring": true,
"RadiationTemperature": 173.15,
"concentration": 0.2,
"duration": 60.0,
"wallWidth": 50.0,
"wallHeight": 10.0,
"cloudDiameter": 0.0,
"thickness": 5.0,
"formationDelay": 2.0,
"expansionRate": 5.0
}
}

View File

@ -1,22 +0,0 @@
{
"name": {
"zh": "周边烟幕弹",
"en": "Surround Smoke Grenade"
},
"type": "SmokeGrenade",
"SmokeGrenadeConfig": {
"smokeType": "Wall",
"IsObscuring": false,
"IsAntiInfrared": false,
"IsAntiMillimeterWave": false,
"RadiationTemperature": 293.15,
"concentration": 0.2,
"duration": 60.0,
"wallWidth": 50.0,
"wallHeight": 10.0,
"cloudDiameter": 0.0,
"thickness": 5.0,
"formationDelay": 2.0,
"expansionRate": 5.0
}
}

View File

@ -1,20 +0,0 @@
{
"name": {
"zh": "顶部烟幕弹",
"en": "Top Smoke Grenade"
},
"type": "SmokeGrenade",
"SmokeGrenadeConfig": {
"smokeType": "Cloud",
"IsObscuring": true,
"RadiationTemperature": 395.0,
"concentration": 0.2,
"duration": 60.0,
"wallWidth": 0.0,
"wallHeight": 0.0,
"cloudDiameter": 20.0,
"thickness": 5.0,
"formationDelay": 1.5,
"expansionRate": 5.0
}
}

View File

@ -1,28 +0,0 @@
{
"name": {
"zh": "红外指令导引导弹-001",
"en": "IR Command Guided Missile-001"
},
"type": "InfraredCommandGuidance",
"properties": {
"type": "InfraredCommandGuidance",
"maxSpeed": 300.0,
"maxFlightTime": 60.0,
"maxFlightDistance": 5000.0,
"maxAcceleration": 100.0,
"proportionalNavigationCoefficient": 3.0,
"launchAcceleration": 100.0,
"maxEngineBurnTime": 0.1,
"cruiseTime": 5.0,
"mass": 23.5,
"explosionRadius": 5.0,
"hitProbability": 0.9,
"selfDestructHeight": 0.0,
"trackerSensitivity": null,
"commandLatency": null,
"irSignature": null
},
"infraredCommandGuidanceConfig": {
"jammingResistanceThreshold": 1e-5
}
}

View File

@ -1,36 +0,0 @@
{
"name": {
"zh": "红外成像末制导导弹-001",
"en": "IR Imaging Terminal Guided Missile-001"
},
"type": "InfraredImagingTerminalGuidance",
"properties": {
"type": "InfraredImagingTerminalGuidance",
"maxSpeed": 250.0,
"maxFlightTime": 60.0,
"maxFlightDistance": 5000.0,
"maxAcceleration": 100.0,
"proportionalNavigationCoefficient": 3.0,
"launchAcceleration": 100.0,
"maxEngineBurnTime": 0.1,
"cruiseTime": 5.0,
"mass": 25.0,
"explosionRadius": 5.5,
"hitProbability": 0.9,
"selfDestructHeight": 0.0
},
"infraredImagingGuidanceConfig": {
"maxDetectionRange": 1000,
"searchFieldOfView": 0.209,
"trackFieldOfView": 0.052,
"imageWidth": 640,
"imageHeight": 512,
"backgroundIntensity": 1e-4,
"searchRecognitionProbability": 0.6,
"trackRecognitionProbability": 0.8,
"targetLostTolerance": 0.2,
"lockConfirmationTime": 0.3,
"jammingResistanceThreshold": 1e-5,
"waveLength": 3.0
}
}

View File

@ -1,43 +0,0 @@
{
"name": {
"zh": "红箭-10",
"en": "HJ-10"
},
"type": "LaserBeamRiderGuidance",
"properties": {
"type": "LaserBeamRiderGuidance",
"maxSpeed": 300.0,
"maxFlightTime": 60.0,
"maxFlightDistance": 5000.0,
"maxAcceleration": 100.0,
"proportionalNavigationCoefficient": 3.0,
"launchAcceleration": 100.0,
"maxEngineBurnTime": 0.1,
"cruiseTime": 5.0,
"mass": 24.5,
"explosionRadius": 5.0,
"hitProbability": 0.9,
"selfDestructHeight": 0.0,
"laserCodeConfig": {
"code": {
"codeType": "PRF",
"codeValue": 1010
},
"IsCodeEnabled": true,
"IsCodeMatchRequired": true
}
},
"LaserBeamRiderGuidanceConfig": {
"minDetectablePower": 1e-10,
"detectorDiameter": 0.03,
"controlFieldDiameter": 20.0,
"proportionalGain": 30.0,
"integralGain": 0.05,
"derivativeGain": 5.0,
"nonlinearGain": 0.5,
"maxGuidanceAcceleration": 50.0,
"lowPassFilterCoefficient": 0.2,
"wavelength": 1.06,
"jammingResistanceThreshold": 1e-5
}
}

View File

@ -1,28 +0,0 @@
{
"name": {
"zh": "科尔内特",
"en": "Kornet"
},
"type": "LaserBeamRiderGuidance",
"properties": {
"type": "LaserBeamRiderGuidance",
"maxSpeed": 300.0,
"maxFlightTime": 70.0,
"maxFlightDistance": 5500.0,
"maxAcceleration": 110.0,
"proportionalNavigationCoefficient": 3.0,
"launchAcceleration": 100.0,
"maxEngineBurnTime": 12.0,
"cruiseTime": 5.0,
"mass": 27.0,
"explosionRadius": 5.5,
"hitProbability": 0.9,
"selfDestructHeight": 10.0,
"laserCodeConfig": {
"code": {
"codeType": "PRF",
"codeValue": 1100
}
}
}
}

View File

@ -1,28 +0,0 @@
{
"name": {
"zh": "陶式导弹",
"en": "TOW"
},
"type": "LaserBeamRiderGuidance",
"properties": {
"type": "LaserBeamRiderGuidance",
"maxSpeed": 278.0,
"maxFlightTime": 65.0,
"maxFlightDistance": 4500.0,
"maxAcceleration": 100.0,
"proportionalNavigationCoefficient": 3.0,
"launchAcceleration": 100.0,
"maxEngineBurnTime": 10.0,
"cruiseTime": 5.0,
"mass": 22.6,
"explosionRadius": 5.0,
"hitProbability": 0.9,
"selfDestructHeight": 10.0,
"laserCodeConfig": {
"code": {
"codeType": "PRF",
"codeValue": 1110
}
}
}
}

View File

@ -1,44 +0,0 @@
{
"name": {
"zh": "激光半主动制导导弹-001",
"en": "Laser Semi-Active Guidance Missile-001"
},
"type": "LaserSemiActiveGuidance",
"properties": {
"type": "LaserSemiActiveGuidance",
"maxSpeed": 800.0,
"maxFlightTime": 60.0,
"maxFlightDistance": 4000.0,
"maxAcceleration": 50.0,
"proportionalNavigationCoefficient": 2.0,
"launchAcceleration": 100.0,
"maxEngineBurnTime": 0.1,
"cruiseTime": 5.0,
"mass": 22.0,
"explosionRadius": 5.0,
"hitProbability": 0.9,
"selfDestructHeight": 0.0,
"laserCodeConfig": {
"code": {
"codeType": "PRF",
"codeValue": 1010
},
"IsCodeEnabled": true,
"IsCodeMatchRequired": true
}
},
"laserSemiActiveGuidanceConfig": {
"fieldOfViewAngle": 30.0,
"lensDiameter": 0.1,
"sensorDiameter": 0.03,
"focusedSpotDiameter": 0.006,
"reflectionCoefficient": 0.2,
"targetReflectiveArea": 1.0,
"lockThreshold": 1e-7,
"spotOffsetSensitivity": 0.05,
"jammingResistanceThreshold": 1e-5,
"transmitterEfficiency": 0.85,
"receiverEfficiency": 0.8,
"wavelength": 1.06
}
}

View File

@ -1,58 +0,0 @@
{
"name": {
"zh": "毫米波末制导导弹-001",
"en": "Millimeter Wave Terminal Guided Missile-001"
},
"type": "MillimeterWaveTerminalGuidance",
"properties": {
"type": "MillimeterWaveTerminalGuidance",
"maxSpeed": 250.0,
"maxFlightTime": 60.0,
"maxFlightDistance": 8000.0,
"maxAcceleration": 100.0,
"proportionalNavigationCoefficient": 3.0,
"launchAcceleration": 100.0,
"maxEngineBurnTime": 0.1,
"cruiseTime": 4.0,
"mass": 28.0,
"explosionRadius": 5.0,
"hitProbability": 0.9,
"selfDestructHeight": 0.0
},
"millimeterWaveGuidanceConfig": {
"maxDetectionRange": 5000.0,
"fieldOfViewAngle": 30.0,
"targetRecognitionProbability": 0.95,
"waveFrequency": 94e9,
"pulseDuration": 1e-6,
"searchBeamWidth": 4.0,
"trackBeamWidth": 3.0,
"lockBeamWidth": 2.0,
"scanAngularSpeedDeg": 180.0,
"spiralTightness": 1.2,
"spiralTurns": 2,
"recognitionSNRThreshold": -25.0,
"lockSNRThreshold": -15.0,
"targetLostTolerance": 0.8,
"lockConfirmationTime": 0.15,
"pulseRepetitionFrequency": 1.0e-4,
"transmitPower": 0.3,
"dopplerVelocityResolution": 1.0,
"maxMeasurableVelocity": 1000.0,
"antennaGain": 35.0,
"noiseFigureDB": 7.0,
"systemLossDB": 6.0,
"monopulseSensitivity": 0.1,
"yawControlEffectiveness": 120.0,
"pitchControlEffectiveness": 150.0,
"jammingResistanceThreshold": 1e-5
}
}

View File

@ -1,79 +0,0 @@
{
"name": {
"zh": "末敏导弹-001",
"en": "Terminal Sensitive Missile-001"
},
"type": "TerminalSensitiveMissile",
"properties": {
"type": "TerminalSensitiveMissile",
"maxSpeed": 1000.0,
"maxFlightTime": 100.0,
"maxFlightDistance": 5000.0,
"maxAcceleration": 200.0,
"proportionalNavigationCoefficient": 3.0,
"launchAcceleration": 100.0,
"maxEngineBurnTime": 0.1,
"cruiseTime": 5.0,
"mass": 50.0,
"explosionRadius": 5.0,
"selfDestructHeight": 0.0
},
"submunitionProperties": {
"maxSpeed": 2000.0,
"maxFlightTime": 60.0,
"maxFlightDistance": 2000.0,
"maxAcceleration": 300.0,
"proportionalNavigationCoefficient": 4.0,
"launchAcceleration": 10.0,
"maxEngineBurnTime": 0.1,
"mass": 10.0,
"explosionRadius": 5.0,
"hitProbability": 0.9,
"selfDestructHeight": 20.0
},
"submunitionCount": 1,
"submunitionConfig": {
"separationHeight": 1000.0,
"separationDistance": 1000.0,
"submunitionSeparationAngle": 45.0,
"separationRange": 50.0,
"decelerationAcceleration": 250.0,
"decelerationEndSpeed": 50.0,
"parachuteDeploymentHeight": 400.0,
"parachuteDeceleration": 90.0,
"stableScanHeight": 200.0,
"verticalDeclineSpeed": 10.0,
"spiralRotationSpeed": 25.13,
"scanAngle": 30.0,
"targetDetectionDistance": 150.0,
"selfDestructHeight": 20.0,
"attackSpeed": 200.0,
"infraredDetectorConfig": {
"maxDetectionRange": 1000.0,
"band": "Medium",
"fieldOfView": 1.0,
"detectionRadiationIntensityThreshold": 50.0,
"jammingResistanceThreshold": 1e-4
},
"radiometerConfig": {
"maxDetectionRange": 1000.0,
"band": "Band8",
"scanFieldOfView": 1.0,
"jammingResistanceThreshold": 1e-4
},
"altimeterConfig": {
"maxAltitude": 1000.0,
"band": "Band3",
"measurementAccuracy": 0.5,
"scanFieldOfView": 25.0,
"jammingResistanceThreshold": 1e-4
},
"rangefinderConfig": {
"maxDetectionRange": 1000.0,
"wavelength": 1.06,
"pulseRate": 100.0,
"accuracy": 0.5,
"jammingResistanceThreshold": 1e-4
}
}
}

View File

@ -1,15 +0,0 @@
{
"name": {
"zh": "浓雾",
"en": "Heavy Fog"
},
"type": "Fog",
"temperature": 8.0,
"relativeHumidity": 99.0,
"visibility": 0.1,
"precipitation": 0.0,
"cO2Concentration": 415.0,
"pressure": 998.0,
"windSpeed": 0.0,
"windDirection": 0.0
}

View File

@ -1,15 +0,0 @@
{
"name": {
"zh": "大雨",
"en": "Heavy Rain"
},
"type": "Rain",
"temperature": 16.0,
"relativeHumidity": 95.0,
"visibility": 2.0,
"precipitation": 25.0,
"cO2Concentration": 415.0,
"pressure": 985.0,
"windSpeed": 8.0,
"windDirection": 180.0
}

View File

@ -1,15 +0,0 @@
{
"name": {
"zh": "大雪",
"en": "Heavy Snow"
},
"type": "Snow",
"temperature": -7.0,
"relativeHumidity": 85.0,
"visibility": 1.0,
"precipitation": 8.0,
"cO2Concentration": 410.0,
"pressure": 990.0,
"windSpeed": 6.0,
"windDirection": 270.0
}

View File

@ -1,15 +0,0 @@
{
"name": {
"zh": "轻雾",
"en": "Light Fog"
},
"type": "Fog",
"temperature": 12.0,
"relativeHumidity": 95.0,
"visibility": 0.8,
"precipitation": 0.0,
"cO2Concentration": 415.0,
"pressure": 1000.0,
"windSpeed": 0.5,
"windDirection": 20.0
}

View File

@ -1,15 +0,0 @@
{
"name": {
"zh": "小雨",
"en": "Light Rain"
},
"type": "Rain",
"temperature": 20.0,
"relativeHumidity": 80.0,
"visibility": 6.0,
"precipitation": 5.0,
"cO2Concentration": 415.0,
"pressure": 1005.0,
"windSpeed": 3.0,
"windDirection": 180.0
}

View File

@ -1,15 +0,0 @@
{
"name": {
"zh": "小雪",
"en": "Light Snow"
},
"type": "Snow",
"temperature": -3.0,
"relativeHumidity": 75.0,
"visibility": 4.0,
"precipitation": 2.0,
"cO2Concentration": 410.0,
"pressure": 1002.0,
"windSpeed": 3.0,
"windDirection": 270.0
}

View File

@ -1,15 +0,0 @@
{
"name": {
"zh": "中雾",
"en": "Medium Fog"
},
"type": "Fog",
"temperature": 10.0,
"relativeHumidity": 98.0,
"visibility": 0.4,
"precipitation": 0.0,
"cO2Concentration": 415.0,
"pressure": 1000.0,
"windSpeed": 0.2,
"windDirection": 10.0
}

View File

@ -1,15 +0,0 @@
{
"name": {
"zh": "中雨",
"en": "Medium Rain"
},
"type": "Rain",
"temperature": 18.0,
"relativeHumidity": 90.0,
"visibility": 4.0,
"precipitation": 15.0,
"cO2Concentration": 415.0,
"pressure": 995.0,
"windSpeed": 6.0,
"windDirection": 180.0
}

View File

@ -1,15 +0,0 @@
{
"name": {
"zh": "中雪",
"en": "Medium Snow"
},
"type": "Snow",
"temperature": -5.0,
"relativeHumidity": 80.0,
"visibility": 2.0,
"precipitation": 4.0,
"cO2Concentration": 410.0,
"pressure": 1000.0,
"windSpeed": 4.0,
"windDirection": 270.0
}

View File

@ -1,15 +0,0 @@
{
"name": {
"zh": "沙尘",
"en": "Sandstorm"
},
"type": "Dust",
"temperature": 30.0,
"relativeHumidity": 25.0,
"visibility": 1.5,
"precipitation": 0.0,
"cO2Concentration": 430.0,
"pressure": 1005.0,
"windSpeed": 12.0,
"windDirection": 315.0
}

View File

@ -1,15 +0,0 @@
{
"name": {
"zh": "晴天",
"en": "Sunny"
},
"type": "Clear",
"temperature": 25.0,
"relativeHumidity": 45.0,
"visibility": 15.0,
"precipitation": 0.0,
"cO2Concentration": 415.0,
"pressure": 1018.0,
"windSpeed": 1.2,
"windDirection": 90.0
}

View File

@ -183,7 +183,7 @@ namespace ThreatSource.Jammer
}
/// <summary>
/// 发布干扰开始事件
/// 发布干扰事件
/// </summary>
protected void PublishJammingEvent(JammingParameters parameters)
{

View File

@ -350,6 +350,8 @@ GC频率: 优秀 ✅
Gen0 GC次数: 9 (0.3 次/秒)
Gen1 GC次数: 0 (0.0 次/秒)
Gen2 GC次数: 0 (0.0 次/秒)
总GC次数: 9
【性能评级】
帧时间表现: 优秀 ✅

View File

@ -10,6 +10,23 @@ using System.Diagnostics;
namespace ThreatSource.Tools.MissileSimulation
{
/// <summary>
/// 坦克移动模式枚举
/// </summary>
public enum TankMovementMode
{
/// <summary>静止模式:位置(0,1.2,0)速度0</summary>
Stationary = 0,
/// <summary>超低速模式速度1m/s</summary>
VeryLowSpeed = 1,
/// <summary>低速模式速度5m/s</summary>
LowSpeed = 5,
/// <summary>中速模式速度10m/s</summary>
MediumSpeed = 10,
/// <summary>高速模式速度20m/s</summary>
HighSpeed = 20
}
/// <summary>
/// 综合导弹模拟器 - 支持6种不同类型的导弹模拟
/// </summary>
@ -37,6 +54,9 @@ namespace ThreatSource.Tools.MissileSimulation
// 当前选中的导弹ID
public string SelectedMissileId { get; private set; }
// 当前坦克移动模式
public TankMovementMode CurrentTankMovementMode { get; private set; } = TankMovementMode.Stationary;
private List<(JammingType Type, string DisplayName, string JammerId, string Mode, string Target)> activeJammings;
/// <summary>
@ -203,94 +223,30 @@ namespace ThreatSource.Tools.MissileSimulation
/// </summary>
private void AddTankTarget()
{
double speed = (double)CurrentTankMovementMode;
var motionParameters = new KinematicState
{
Position = new Vector3D(0, 1.2, 0),
Orientation = new Orientation(0.0, 0.0, 0.0),
Speed = 2.0
Orientation = speed > 0 ? new Orientation(0.0, 0.0, 0.0) : new Orientation(0.0, 0.0, 0.0), // 朝向Z轴正方向
Speed = speed
};
// 如果是移动模式,设置速度矢量
if (speed > 0)
{
motionParameters.Velocity = new Vector3D(0, 0, speed); // Z轴正方向运动
}
string targetId = "Tank_1";
var target = _threatSourceFactory.CreateEquipment(targetId, "mbt_001", motionParameters);
targets[targetId] = target;
simulationManager.RegisterEntity(targetId, target);
target.Activate(); // 激活目标
Console.WriteLine($"添加目标 {targetId},位置:{motionParameters.Position}");
Console.WriteLine($"目标创建后实际位置:{target.KState.Position}");
}
/// <summary>
/// 添加激光诱偏目标
/// </summary>
private void AddLaserDecoy()
{
var motionParameters = new KinematicState
{
Position = new Vector3D(0, 0, 50),
Orientation = new Orientation(Math.PI/2, 0.0, 0.0),
Speed = 0.0
};
string laserDecoyId = "LDY_1";
if (_threatSourceFactory.CreateJammer(laserDecoyId, "laser_decoy", motionParameters, "Tank_1") is LaserDecoy laserDecoy)
{
simulationManager.RegisterEntity(laserDecoyId, laserDecoy);
jammers[laserDecoyId] = laserDecoy as BaseJammer;
Console.WriteLine($"注册激光诱偏目标 {laserDecoyId}");
}
}
/// <summary>
/// 添加烟幕弹
/// </summary>
private void AddSmokeGrenade()
{
var motionParameters = new KinematicState
{
Position = new Vector3D(50, 5, 0),
Orientation = new Orientation(Math.PI/2, 0.0, 0.0),
Speed = 0.0
};
string smokeGrenadeId = "SG_1";
var smokeGrenade = _threatSourceFactory.CreateJammer(smokeGrenadeId, "surround", motionParameters, "Tank_1");
if (smokeGrenade is BaseJammer jammer1)
{
simulationManager.RegisterEntity(smokeGrenadeId, jammer1);
jammers[smokeGrenadeId] = jammer1;
Console.WriteLine($"注册烟幕弹 {smokeGrenadeId}");
}
smokeGrenadeId = "SG_2";
smokeGrenade = _threatSourceFactory.CreateJammer(smokeGrenadeId, "infrared", motionParameters, "Tank_1");
if (smokeGrenade is BaseJammer jammer2)
{
simulationManager.RegisterEntity(smokeGrenadeId, jammer2);
jammers[smokeGrenadeId] = jammer2;
Console.WriteLine($"注册烟幕弹 {smokeGrenadeId}");
}
smokeGrenadeId = "SG_3";
smokeGrenade = _threatSourceFactory.CreateJammer(smokeGrenadeId, "mmw", motionParameters, "Tank_1");
if (smokeGrenade is BaseJammer jammer3)
{
simulationManager.RegisterEntity(smokeGrenadeId, jammer3);
jammers[smokeGrenadeId] = jammer3;
Console.WriteLine($"注册烟幕弹 {smokeGrenadeId}");
}
var motionParametersTop = new KinematicState
{
Position = new Vector3D(0, 10, 0),
Orientation = new Orientation(0, Math.PI/2, 0.0),
Speed = 0.0
};
smokeGrenadeId = "SG_4";
smokeGrenade = _threatSourceFactory.CreateJammer(smokeGrenadeId, "top", motionParametersTop, "Tank_1");
if (smokeGrenade is BaseJammer jammer4)
{
simulationManager.RegisterEntity(smokeGrenadeId, jammer4);
jammers[smokeGrenadeId] = jammer4;
Console.WriteLine($"注册烟幕弹 {smokeGrenadeId}");
}
Console.WriteLine($"移动模式:{GetMovementModeDisplayName(CurrentTankMovementMode)}");
Console.WriteLine($"目标创建后实际位置:{target.KState.Position},速度:{target.KState.Speed} m/s");
}
/// <summary>
@ -863,7 +819,7 @@ namespace ThreatSource.Tools.MissileSimulation
/// <summary>
/// 清除干扰 (原有方法,保留向后兼容)
/// </summary>
public void ClearJamming(JammingType type, string category)
public static void ClearJamming(JammingType type, string category)
{
var jammingParams = new JammingParameters
{
@ -872,9 +828,7 @@ namespace ThreatSource.Tools.MissileSimulation
Duration = 0,
Direction = new Vector3D(1, 0, 0),
SourcePosition = new Vector3D(0, 0, 0)
};
// 保留原有实现...
};
}
/// <summary>
@ -1232,6 +1186,88 @@ namespace ThreatSource.Tools.MissileSimulation
return [.. activeJammings];
}
/// <summary>
/// 设置坦克移动模式
/// </summary>
/// <param name="mode">要设置的移动模式</param>
public void SetTankMovementMode(TankMovementMode mode)
{
CurrentTankMovementMode = mode;
Console.WriteLine($"坦克移动模式已设置为: {GetMovementModeDisplayName(mode)}");
// 如果坦克已经存在,更新其运动参数
if (targets.TryGetValue("Tank_1", out var tank))
{
UpdateTankMovementParameters(tank, mode);
}
}
/// <summary>
/// 获取移动模式的显示名称
/// </summary>
private static string GetMovementModeDisplayName(TankMovementMode mode)
{
return mode switch
{
TankMovementMode.Stationary => "静止, 0 m/s",
TankMovementMode.VeryLowSpeed => "超低速, 1 m/s",
TankMovementMode.LowSpeed => "低速, 5 m/s",
TankMovementMode.MediumSpeed => "中速, 10 m/s",
TankMovementMode.HighSpeed => "高速, 20 m/s",
_ => "未知模式"
};
}
/// <summary>
/// 更新坦克的运动参数
/// </summary>
private void UpdateTankMovementParameters(SimulationElement tank, TankMovementMode mode)
{
double speed = (double)mode;
// 设置运动参数
tank.KState.Speed = speed;
if (speed > 0)
{
// 移动模式设置X轴正方向运动坦克面向运动方向
tank.KState.Orientation = new Orientation(0, 0, 0); // 面向X轴正方向
tank.KState.Velocity = new Vector3D(speed, 0, 0);
}
else
{
// 静止模式:清零速度和方向
tank.KState.Velocity = Vector3D.Zero;
}
Console.WriteLine($"坦克运动参数已更新 - 速度: {speed} m/s, 位置: {tank.KState.Position}");
}
/// <summary>
/// 获取可用的坦克移动模式列表
/// </summary>
/// <returns>包含移动模式和显示名称的数组</returns>
public (TankMovementMode Mode, string DisplayName)[] GetAvailableMovementModes()
{
return new[]
{
(TankMovementMode.Stationary, GetMovementModeDisplayName(TankMovementMode.Stationary)),
(TankMovementMode.VeryLowSpeed, GetMovementModeDisplayName(TankMovementMode.VeryLowSpeed)),
(TankMovementMode.LowSpeed, GetMovementModeDisplayName(TankMovementMode.LowSpeed)),
(TankMovementMode.MediumSpeed, GetMovementModeDisplayName(TankMovementMode.MediumSpeed)),
(TankMovementMode.HighSpeed, GetMovementModeDisplayName(TankMovementMode.HighSpeed))
};
}
/// <summary>
/// 获取当前坦克移动模式信息
/// </summary>
/// <returns>当前移动模式和显示名称</returns>
public (TankMovementMode Mode, string DisplayName) GetCurrentMovementMode()
{
return (CurrentTankMovementMode, GetMovementModeDisplayName(CurrentTankMovementMode));
}
/// <summary>
/// 销毁所有实体并从仿真管理器中注销
/// </summary>
@ -1344,10 +1380,6 @@ namespace ThreatSource.Tools.MissileSimulation
// 根据导弹类型添加相应的干扰器
AddJammersForMissile(missileId);
// 添加烟幕弹和激光诱偏目标
AddSmokeGrenade();
AddLaserDecoy();
// 激活选中的导弹
if (missiles.TryGetValue(missileId, out var selectedMissile))
{
@ -1388,12 +1420,13 @@ namespace ThreatSource.Tools.MissileSimulation
{
try
{
// 根据干扰器ID确定朝向
// 根据干扰器ID确定朝向和位置
Orientation orientation = GetJammerOrientation(jammerId, target);
Vector3D position = GetJammerPosition(jammerId);
var jammerParams = new KinematicState
{
Position = new Vector3D(0, 0, 0),
Position = position,
Orientation = orientation,
Speed = 0.0
};
@ -1406,7 +1439,7 @@ namespace ThreatSource.Tools.MissileSimulation
{
simulationManager.RegisterEntity(jammerId, jammer);
jammers[jammerId] = baseJammer;
Console.WriteLine($"注册干扰器 {jammerId}");
Console.WriteLine($"注册干扰器 {jammerId},位置:{position}");
}
}
catch (Exception ex)
@ -1500,5 +1533,19 @@ namespace ThreatSource.Tools.MissileSimulation
_ => "laser_blocking" // 默认配置
};
}
/// <summary>
/// 根据干扰器ID确定初始位置
/// </summary>
private Vector3D GetJammerPosition(string jammerId)
{
return jammerId switch
{
"LDY_1" => new Vector3D(0, 0, 50), // 激光诱偏目标目标后方50米
"SG_1" or "SG_2" or "SG_3" => new Vector3D(50, 5, 0), // 水平烟幕弹侧方50米高5米
"SG_4" => new Vector3D(0, 10, 0), // 顶部烟幕弹正上方10米
_ => new Vector3D(0, 0, 0) // 其他干扰器默认位置
};
}
}
}

View File

@ -41,12 +41,16 @@ namespace ThreatSource.Tools.MissileSimulation
sensorStatusString = "(需先选导弹)";
}
// 获取当前坦克移动模式状态
var currentTankMode = simulator.GetCurrentMovementMode();
Console.WriteLine($"1. 选择导弹 ({missileStatus})");
Console.WriteLine($"2. 选择指示器 {sensorStatusString}");
Console.WriteLine($"3. 选择干扰方式 {simulator.GetActiveJammingDescription()} {(string.IsNullOrEmpty(simulator.SelectedMissileId) ? "()" : "")}");
Console.WriteLine($"4. 设置日志级别 (当前级别: {simulator.CurrentLogLevel})");
Console.WriteLine($"5. 开始仿真 {(string.IsNullOrEmpty(simulator.SelectedMissileId) ? "()" : "")}");
Console.WriteLine($"6. 设置仿真步长 (当前: {simulator.TimeStep}s)");
Console.WriteLine($"6. 设置坦克移动模式 (当前: {currentTankMode.DisplayName})");
Console.WriteLine($"7. 设置仿真步长 (当前: {simulator.TimeStep}s)");
Console.WriteLine("0. 退出程序");
Console.Write("\n请选择: ");
string choice = Console.ReadLine()?.ToLower() ?? string.Empty;
@ -82,6 +86,9 @@ namespace ThreatSource.Tools.MissileSimulation
}
break;
case "6":
ConfigureTankMovement(simulator);
break;
case "7":
ConfigureTimeStep(simulator);
break;
case "0":
@ -392,5 +399,53 @@ namespace ThreatSource.Tools.MissileSimulation
}
}
}
static void ConfigureTankMovement(ComprehensiveMissileSimulator simulator)
{
bool backToMainMenu = false;
while (!backToMainMenu)
{
var currentMode = simulator.GetCurrentMovementMode();
var availableModes = simulator.GetAvailableMovementModes();
Console.WriteLine("\n--- 设置坦克移动模式 ---");
Console.WriteLine($"当前坦克移动模式: {currentMode.DisplayName}");
Console.WriteLine("\n可选移动模式:");
for (int i = 0; i < availableModes.Length; i++)
{
string indicator = availableModes[i].Mode == currentMode.Mode ? " [当前]" : "";
Console.WriteLine($" {i + 1}. {availableModes[i].DisplayName}{indicator}");
}
Console.WriteLine(" 0. 返回主菜单");
Console.Write("请选择坦克移动模式: ");
string input = Console.ReadLine()?.ToLower() ?? string.Empty;
if (input == "0")
{
backToMainMenu = true;
}
else if (int.TryParse(input, out int choice))
{
if (choice >= 1 && choice <= availableModes.Length)
{
var selectedMode = availableModes[choice - 1];
simulator.SetTankMovementMode(selectedMode.Mode);
Console.WriteLine($"坦克移动模式已设置为: {selectedMode.DisplayName}");
return; // 设置后返回主菜单
}
else
{
Console.WriteLine("无效选择,请重试。");
}
}
else
{
Console.WriteLine("无效输入,请输入数字。");
}
}
}
}
}