From 9f682c9b91dfc61ea522fadfb6ca636329d7dacf Mon Sep 17 00:00:00 2001 From: tian <11429339@qq.com> Date: Thu, 18 Jun 2026 15:55:37 +0800 Subject: [PATCH] =?UTF-8?q?SaveTarget=E2=86=92SaveDroneProfile=20+=20?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E6=96=B9=E6=B3=95=E5=90=8D=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/design/architecture/总体架构设计.md | 2 +- docs/对接文档_Unity前端.md | 4 ++-- src/CounterDrone.Core/DefaultScenarios.cs | 12 ++++++------ .../Services/IScenarioService.cs | 2 +- .../Services/ScenarioService.cs | 2 +- .../CounterDrone.Core/CounterDrone.Core.dll | Bin 177664 -> 177664 bytes .../Scripts/Managers/ScenarioManager.cs | 2 +- .../Scripts/Managers/SimulationBootstrap.cs | 2 +- .../CounterDrone.Core.Tests/EdgeCaseTests.cs | 6 +++--- .../FullPipelineTests.cs | 4 ++-- .../ScenarioServiceTests.cs | 8 ++++---- .../SimulationEngineTests.cs | 8 ++++---- unity_plugins/CounterDrone.Core.dll | Bin 177664 -> 177664 bytes 13 files changed, 26 insertions(+), 26 deletions(-) diff --git a/docs/design/architecture/总体架构设计.md b/docs/design/architecture/总体架构设计.md index 8264fbc..9731286 100644 --- a/docs/design/architecture/总体架构设计.md +++ b/docs/design/architecture/总体架构设计.md @@ -1395,7 +1395,7 @@ interface IScenarioService // 步骤保存 void SaveScene(string scenarioId, CombatScene scene); void SaveControlZones(string scenarioId, List zones); // NEW - void SaveTarget(string scenarioId, DroneProfile target); + void SaveDroneProfile(string scenarioId, DroneProfile target); void SaveDeployment(string scenarioId, List equips); // 重构 void SaveCloudDispersal(string scenarioId, CloudDispersal cloud); void SaveRoute(string scenarioId, RoutePlan route, List wps); diff --git a/docs/对接文档_Unity前端.md b/docs/对接文档_Unity前端.md index 1a94712..6c699fa 100644 --- a/docs/对接文档_Unity前端.md +++ b/docs/对接文档_Unity前端.md @@ -72,7 +72,7 @@ var scenarioId = demos.Items[0].Id; // 方式 B:自定义 var sc = scenario.CreateScenario("我的想定", ""); scenario.SaveScene(sc.Id, new CombatScene { WindSpeed = 5, WindDirection = (int)WindDirection.E }); -scenario.SaveTarget(sc.Id, new DroneProfile { +scenario.SaveDroneProfile(sc.Id, new DroneProfile { WaveId = "w1", Model = "Shahed-136", Description = "活塞巡飞弹", Quantity = 1, DroneType = (int)DroneType.FixedWing, TypicalSpeed = 200, TypicalAltitude = 500 @@ -150,7 +150,7 @@ mgr.DataService.GetAllEnvironments() / GetAllFormations() / GetAllRoutes() // 想定 CRUD mgr.CreateScenario(name, number) / mgr.DeleteScenario(id) mgr.Search(kw, from, to, page, size) -mgr.SaveScene / SaveTarget / SaveDeployment / SaveCloud / SaveRoute / UpdateStep +mgr.SaveScene / SaveDroneProfile / SaveDeployment / SaveCloud / SaveRoute / UpdateStep mgr.GetDetail(id) → ScenarioConfig ``` diff --git a/src/CounterDrone.Core/DefaultScenarios.cs b/src/CounterDrone.Core/DefaultScenarios.cs index 55b503f..42f0529 100644 --- a/src/CounterDrone.Core/DefaultScenarios.cs +++ b/src/CounterDrone.Core/DefaultScenarios.cs @@ -37,7 +37,7 @@ namespace CounterDrone.Core { var t = s.CreateScenario("[Demo] 无防御-无人机抵达目标", ""); s.SaveScene(t.Id, d.Environments.First(w => w.Id == "sunny-calm").ToCombatScene()); - s.SaveTarget(t.Id, d.Drones.First(p => p.Id == "shahed").ToDroneProfile()); + s.SaveDroneProfile(t.Id, d.Drones.First(p => p.Id == "shahed").ToDroneProfile()); s.SaveRoute(t.Id, "default", d.Formations.First(f => f.Id == "single").ToRoutePlan(), R("3km-h400", 600, d)); s.SaveCloudDispersal(t.Id, new CloudDispersal()); s.SaveDeployment(t.Id, new List()); @@ -48,7 +48,7 @@ namespace CounterDrone.Core { var t = s.CreateScenario("[Demo] 管控区域侵入", ""); s.SaveScene(t.Id, d.Environments.First(w => w.Id == "sunny-calm").ToCombatScene()); - s.SaveTarget(t.Id, d.Drones.First(p => p.Id == "electric-scout").ToDroneProfile()); + s.SaveDroneProfile(t.Id, d.Drones.First(p => p.Id == "electric-scout").ToDroneProfile()); s.SaveRoute(t.Id, "default", d.Formations.First(f => f.Id == "single").ToRoutePlan(), R("3km-h300", 300, d)); s.SaveCloudDispersal(t.Id, new CloudDispersal()); s.SaveDeployment(t.Id, new List()); @@ -71,7 +71,7 @@ namespace CounterDrone.Core scene.WindSpeed = 5; scene.WindDirection = (int)WindDirection.W; s.SaveScene(t.Id, scene); - s.SaveTarget(t.Id, d.Drones.First(p => p.Id == "shahed").ToDroneProfile()); + s.SaveDroneProfile(t.Id, d.Drones.First(p => p.Id == "shahed").ToDroneProfile()); s.SaveRoute(t.Id, "default", d.Formations.First(f => f.Id == "single").ToRoutePlan(), new List { new() { PosX = 6600, PosY = 500, PosZ = 0, Speed = 200 }, @@ -89,7 +89,7 @@ namespace CounterDrone.Core { var t = s.CreateScenario("[Demo] 喷气式拦截-活性材料", ""); s.SaveScene(t.Id, d.Environments.First(w => w.Id == "sunny-calm").ToCombatScene()); - s.SaveTarget(t.Id, d.Drones.First(p => p.Id == "cruise-missile").ToDroneProfile()); + s.SaveDroneProfile(t.Id, d.Drones.First(p => p.Id == "cruise-missile").ToDroneProfile()); s.SaveRoute(t.Id, "default", d.Formations.First(f => f.Id == "single").ToRoutePlan(), new List { new() { PosX = 18000, PosY = 500, PosZ = 0, Speed = 200 }, @@ -110,7 +110,7 @@ namespace CounterDrone.Core scene.WindSpeed = 5; scene.WindDirection = (int)WindDirection.E; s.SaveScene(t.Id, scene); - s.SaveTarget(t.Id, d.Drones.First(p => p.Id == "shahed").ToDroneProfile()); + s.SaveDroneProfile(t.Id, d.Drones.First(p => p.Id == "shahed").ToDroneProfile()); s.SaveRoute(t.Id, "default", d.Formations.First(f => f.Id == "single").ToRoutePlan(), new List { new() { PosX = 9500, PosY = 500, PosZ = 0, Speed = 200 }, @@ -133,7 +133,7 @@ namespace CounterDrone.Core s.SaveScene(t.Id, scene); var target = d.Drones.First(p => p.Id == "shahed").ToDroneProfile(); target.Quantity = 3; - s.SaveTarget(t.Id, target); + s.SaveDroneProfile(t.Id, target); s.SaveRoute(t.Id, "default", d.Formations.First(f => f.Id == "line-3").ToRoutePlan(), new List { new() { PosX = 10000, PosY = 500, PosZ = 0, Speed = 200 }, diff --git a/src/CounterDrone.Core/Services/IScenarioService.cs b/src/CounterDrone.Core/Services/IScenarioService.cs index 73b2156..743f871 100644 --- a/src/CounterDrone.Core/Services/IScenarioService.cs +++ b/src/CounterDrone.Core/Services/IScenarioService.cs @@ -13,7 +13,7 @@ namespace CounterDrone.Core.Services void SaveScene(string scenarioId, CombatScene scene); void SaveControlZones(string scenarioId, List zones); - void SaveTarget(string scenarioId, DroneProfile target); + void SaveDroneProfile(string scenarioId, DroneProfile target); void SaveDeployment(string scenarioId, List equips); /// 添加单个探测设备(独立于 SaveDeployment,不覆盖火力单元) diff --git a/src/CounterDrone.Core/Services/ScenarioService.cs b/src/CounterDrone.Core/Services/ScenarioService.cs index 713a8e4..7a759ab 100644 --- a/src/CounterDrone.Core/Services/ScenarioService.cs +++ b/src/CounterDrone.Core/Services/ScenarioService.cs @@ -131,7 +131,7 @@ namespace CounterDrone.Core.Services TouchScenario(scenarioId); } - public void SaveTarget(string scenarioId, DroneProfile target) + public void SaveDroneProfile(string scenarioId, DroneProfile target) { target.ScenarioId = scenarioId; if (string.IsNullOrEmpty(target.Id)) diff --git a/src/Unity/Assets/Plugins/CounterDrone.Core/CounterDrone.Core.dll b/src/Unity/Assets/Plugins/CounterDrone.Core/CounterDrone.Core.dll index 23a37bf4224a009b1b6cc3931667f85167126e73..f469d2a975418b10a2da81ba6efe5444be5e37ae 100644 GIT binary patch delta 27278 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 delta 27275 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 diff --git a/src/Unity/Assets/Scripts/Managers/ScenarioManager.cs b/src/Unity/Assets/Scripts/Managers/ScenarioManager.cs index 93cb812..4835d16 100644 --- a/src/Unity/Assets/Scripts/Managers/ScenarioManager.cs +++ b/src/Unity/Assets/Scripts/Managers/ScenarioManager.cs @@ -52,7 +52,7 @@ namespace CounterDrone.Unity => _service.SearchScenarios(kw, from, to, page, size); public void SaveScene(string scenarioId, CombatScene s) => _service.SaveScene(scenarioId, s); - public void SaveTarget(string scenarioId, DroneProfile t) => _service.SaveTarget(scenarioId, t); + public void SaveDroneProfile(string scenarioId, DroneProfile t) => _service.SaveDroneProfile(scenarioId, t); public void SaveDeployment(string scenarioId, List e) => _service.SaveDeployment(scenarioId, e); public void SaveCloud(string scenarioId, CloudDispersal c) => _service.SaveCloudDispersal(scenarioId, c); public void SaveRoute(string scenarioId, string waveId, RoutePlan r, List w) => _service.SaveRoute(scenarioId, waveId, r, w); diff --git a/src/Unity/Assets/Scripts/Managers/SimulationBootstrap.cs b/src/Unity/Assets/Scripts/Managers/SimulationBootstrap.cs index 448dacf..5a65f57 100644 --- a/src/Unity/Assets/Scripts/Managers/SimulationBootstrap.cs +++ b/src/Unity/Assets/Scripts/Managers/SimulationBootstrap.cs @@ -70,7 +70,7 @@ namespace CounterDrone.Unity scenarioId = sc.Id; scenario.SaveScene(scenarioId, defaults.Environments.First(w => w.Id == "sunny-calm").ToCombatScene()); - scenario.SaveTarget(scenarioId, defaults.Drones.First(p => p.Id == "shahed").ToDroneProfile()); + scenario.SaveDroneProfile(scenarioId, defaults.Drones.First(p => p.Id == "shahed").ToDroneProfile()); scenario.SaveRoute(scenarioId, "default", defaults.Formations.First(f => f.Id == "single").ToRoutePlan(), defaults.Routes.First(r => _routeLength > 6000 ? r.Id == "10km-h500" : r.Id == "5km-h500") diff --git a/test/unit/CounterDrone.Core.Tests/EdgeCaseTests.cs b/test/unit/CounterDrone.Core.Tests/EdgeCaseTests.cs index 0403865..f20202f 100644 --- a/test/unit/CounterDrone.Core.Tests/EdgeCaseTests.cs +++ b/test/unit/CounterDrone.Core.Tests/EdgeCaseTests.cs @@ -46,7 +46,7 @@ namespace CounterDrone.Core.Tests _scenarioId = scenario.Id; _scenario.SaveScene(_scenarioId, new CombatScene { WindSpeed = 0 }); - _scenario.SaveTarget(_scenarioId, new DroneProfile + _scenario.SaveDroneProfile(_scenarioId, new DroneProfile { WaveId = "default", DroneType = (int)DroneType.FixedWing, @@ -89,7 +89,7 @@ namespace CounterDrone.Core.Tests WindSpeed = 30, // 最大风速 WindDirection = (int)WindDirection.E, }); - _scenario.SaveTarget(_scenarioId, new DroneProfile + _scenario.SaveDroneProfile(_scenarioId, new DroneProfile { WaveId = "default", DroneType = (int)DroneType.FixedWing, @@ -128,7 +128,7 @@ namespace CounterDrone.Core.Tests _scenarioId = scenario.Id; _scenario.SaveScene(_scenarioId, new CombatScene { WindSpeed = 0 }); - _scenario.SaveTarget(_scenarioId, new DroneProfile + _scenario.SaveDroneProfile(_scenarioId, new DroneProfile { WaveId = "default", DroneType = (int)DroneType.HighSpeed, diff --git a/test/unit/CounterDrone.Core.Tests/FullPipelineTests.cs b/test/unit/CounterDrone.Core.Tests/FullPipelineTests.cs index 98dee63..fe72add 100644 --- a/test/unit/CounterDrone.Core.Tests/FullPipelineTests.cs +++ b/test/unit/CounterDrone.Core.Tests/FullPipelineTests.cs @@ -185,7 +185,7 @@ namespace CounterDrone.Core.Tests var scenarioA = _scenario.CreateScenario("无探测远航路", ""); _scenarioId = scenarioA.Id; _scenario.SaveScene(_scenarioId, new CombatScene { WindSpeed = 0, Visibility = 10000 }); - _scenario.SaveTarget(_scenarioId, new DroneProfile + _scenario.SaveDroneProfile(_scenarioId, new DroneProfile { WaveId = "default", DroneType = (int)DroneType.FixedWing, PowerType = (int)PowerType.Piston, Quantity = 1, TypicalSpeed = 200, TypicalAltitude = 500, @@ -210,7 +210,7 @@ namespace CounterDrone.Core.Tests var scenarioB = _scenario.CreateScenario("有探测远航路", ""); _scenarioId = scenarioB.Id; _scenario.SaveScene(_scenarioId, new CombatScene { WindSpeed = 0, Visibility = 10000 }); - _scenario.SaveTarget(_scenarioId, new DroneProfile + _scenario.SaveDroneProfile(_scenarioId, new DroneProfile { WaveId = "default", DroneType = (int)DroneType.FixedWing, PowerType = (int)PowerType.Piston, Quantity = 1, TypicalSpeed = 200, TypicalAltitude = 500, diff --git a/test/unit/CounterDrone.Core.Tests/ScenarioServiceTests.cs b/test/unit/CounterDrone.Core.Tests/ScenarioServiceTests.cs index b334ea1..7fef505 100644 --- a/test/unit/CounterDrone.Core.Tests/ScenarioServiceTests.cs +++ b/test/unit/CounterDrone.Core.Tests/ScenarioServiceTests.cs @@ -101,7 +101,7 @@ namespace CounterDrone.Core.Tests Temperature = 25.0, }); - _service.SaveTarget(scenario.Id, new DroneProfile + _service.SaveDroneProfile(scenario.Id, new DroneProfile { WaveId = "default", DroneType = (int)DroneType.FixedWing, @@ -196,10 +196,10 @@ namespace CounterDrone.Core.Tests } [Fact] - public void SaveTarget_SavesCorrectly() + public void SaveDroneProfile_SavesCorrectly() { var scenario = _service.CreateScenario("Target Test", ""); - _service.SaveTarget(scenario.Id, new DroneProfile + _service.SaveDroneProfile(scenario.Id, new DroneProfile { WaveId = "default", DroneType = (int)DroneType.FixedWing, @@ -392,7 +392,7 @@ namespace CounterDrone.Core.Tests }); // 4. 步骤2:目标配置 - _service.SaveTarget(scenario.Id, new DroneProfile + _service.SaveDroneProfile(scenario.Id, new DroneProfile { WaveId = "default", DroneType = (int)DroneType.HighSpeed, diff --git a/test/unit/CounterDrone.Core.Tests/SimulationEngineTests.cs b/test/unit/CounterDrone.Core.Tests/SimulationEngineTests.cs index 8e8f5be..871aa3a 100644 --- a/test/unit/CounterDrone.Core.Tests/SimulationEngineTests.cs +++ b/test/unit/CounterDrone.Core.Tests/SimulationEngineTests.cs @@ -50,7 +50,7 @@ namespace CounterDrone.Core.Tests var scenario = _scenarioService.CreateScenario("Test", ""); _scenarioId = scenario.Id; _scenarioService.SaveScene(_scenarioId, new CombatScene { WindSpeed = 0 }); - _scenarioService.SaveTarget(_scenarioId, new DroneProfile + _scenarioService.SaveDroneProfile(_scenarioId, new DroneProfile { WaveId = "default", DroneType = (int)DroneType.FixedWing, @@ -151,7 +151,7 @@ namespace CounterDrone.Core.Tests var scenario = _scenarioService.CreateScenario("Detect", ""); _scenarioId = scenario.Id; _scenarioService.SaveScene(_scenarioId, new CombatScene { WindSpeed = 0, Visibility = 10000 }); - _scenarioService.SaveTarget(_scenarioId, new DroneProfile + _scenarioService.SaveDroneProfile(_scenarioId, new DroneProfile { WaveId = "w1", DroneType = (int)DroneType.FixedWing, @@ -224,7 +224,7 @@ namespace CounterDrone.Core.Tests // 探测设备在 X=5000 半径 1000 → 入口 X=4000,出口 X=6000 var scenario = _scenarioService.CreateScenario("Reenter", ""); _scenarioService.SaveScene(scenario.Id, new CombatScene { WindSpeed = 0, Visibility = 10000 }); - _scenarioService.SaveTarget(scenario.Id, new DroneProfile + _scenarioService.SaveDroneProfile(scenario.Id, new DroneProfile { WaveId = "w1", Quantity = 1, TypicalSpeed = 120, PowerType = (int)PowerType.Piston, TypicalAltitude = 300, }); @@ -275,7 +275,7 @@ namespace CounterDrone.Core.Tests // D1 边界 X=1000,D2 边界 X=3000 → D1 更早发现 var scenario = _scenarioService.CreateScenario("Fuse", ""); _scenarioService.SaveScene(scenario.Id, new CombatScene { WindSpeed = 0, Visibility = 10000 }); - _scenarioService.SaveTarget(scenario.Id, new DroneProfile + _scenarioService.SaveDroneProfile(scenario.Id, new DroneProfile { WaveId = "w1", Quantity = 1, TypicalSpeed = 60, PowerType = (int)PowerType.Piston, TypicalAltitude = 300, }); diff --git a/unity_plugins/CounterDrone.Core.dll b/unity_plugins/CounterDrone.Core.dll index 23a37bf4224a009b1b6cc3931667f85167126e73..f469d2a975418b10a2da81ba6efe5444be5e37ae 100644 GIT binary patch delta 27278 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 delta 27275 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