diff --git a/src/Unity/Assets/Scripts/Managers/ManagerVerification.cs b/src/Unity/Assets/Scripts/Managers/ManagerVerification.cs index e443d8a..0cb37cf 100644 --- a/src/Unity/Assets/Scripts/Managers/ManagerVerification.cs +++ b/src/Unity/Assets/Scripts/Managers/ManagerVerification.cs @@ -91,6 +91,7 @@ namespace CounterDrone.Unity var runner = gameObject.AddComponent(); runner.Awake(); + runner.Engine.SetFireSchedule(plan.MergedSchedule); runner.LoadAndStart(taskId); runner.Engine.TimeScale = 10f; diff --git a/src/Unity/Assets/Scripts/Managers/SimulationBootstrap.cs b/src/Unity/Assets/Scripts/Managers/SimulationBootstrap.cs index 0ca006c..4a13500 100644 --- a/src/Unity/Assets/Scripts/Managers/SimulationBootstrap.cs +++ b/src/Unity/Assets/Scripts/Managers/SimulationBootstrap.cs @@ -110,6 +110,7 @@ namespace CounterDrone.Unity Runner = GetComponent(); if (Runner == null) Runner = gameObject.AddComponent(); else Runner.enabled = true; + Runner.Engine.SetFireSchedule(plan.MergedSchedule); Runner.LoadAndStart(taskId); // 设置倍速 diff --git a/src/Unity/Assets/Scripts/Managers/SimulationRunner.cs b/src/Unity/Assets/Scripts/Managers/SimulationRunner.cs index 8a43e3a..7095997 100644 --- a/src/Unity/Assets/Scripts/Managers/SimulationRunner.cs +++ b/src/Unity/Assets/Scripts/Managers/SimulationRunner.cs @@ -55,16 +55,6 @@ namespace CounterDrone.Unity var detail = _scenario.GetTaskDetail(taskId); if (detail == null) { Debug.LogError("Task not found"); return; } - var cloud = detail.Cloud; - if (cloud.RecommendedTiming > 0) - { - var db = new DatabaseManager(_paths).OpenMainDb(); - var ammoCatalog = db.Table().ToList(); - db.Close(); - var schedule = BuildFireSchedule(detail, ammoCatalog); - _engine.SetFireSchedule(schedule); - } - _engine.Initialize(taskId); foreach (var drone in _engine.Drones) @@ -205,41 +195,5 @@ namespace CounterDrone.Unity catch { } return 1f; } - - private List BuildFireSchedule(TaskFullConfig detail, List ammoCatalog) - { - var schedule = new List(); - var cloud = detail.Cloud; - if (!cloud.RecommendedTiming.HasValue || cloud.RecommendedTiming <= 0) return schedule; - - var platforms = detail.Equipment.FindAll(e => e.EquipmentRole == (int)EquipmentRole.LaunchPlatform); - if (platforms.Count == 0) return schedule; - - var releaseAlt = (float)cloud.DisperseHeight; - if (releaseAlt < 10) releaseAlt = 300f; - - var spacing = (float)cloud.SalvoSpacing; - if (spacing <= 0) spacing = 50f; - - for (int i = 0; i < platforms.Count; i++) - { - var p = platforms[i]; - var mv = (float)(p.MuzzleVelocity ?? 800); - var offset = (i - (platforms.Count - 1) / 2f) * spacing; - var tx = (float)cloud.PositionX + offset; var ty = (float)cloud.PositionY; var tz = (float)cloud.PositionZ; - var dx = tx - (float)p.PositionX; var dz = tz - (float)p.PositionZ; - var dist = Mathf.Sqrt(dx * dx + dz * dz); - var angle = Kinematics.CalculateLaunchAngle(dist, mv, releaseAlt); - var sinA = Mathf.Sin(angle); - var tUp = mv * sinA / 9.81f; - var peakH = mv * mv * sinA * sinA / (2f * 9.81f); - var dropH = Mathf.Max(0, peakH - releaseAlt); - var ft = tUp + Mathf.Sqrt(2f * dropH / 9.81f); - var fireTime = (float)cloud.RecommendedTiming.Value - ft; - if (fireTime < 0) fireTime = 0.1f; - schedule.Add(new FireEvent { FireTime = fireTime, PlatformIndex = i, TargetX = tx, TargetY = ty, TargetZ = tz, MuzzleVelocity = mv }); - } - return schedule; - } } }