fix: recommendedTiming按目标点位置算而非中点——每个弹道到达时间不同

- GenerateFireEventsAt: txArrival = distToTx/droneSpeed 替代 threat.ArrivalTime
- 航路反方向截断保护
- 暴露毁伤时间 34.4s→38.4s
This commit is contained in:
tian 2026-06-13 11:54:39 +08:00
parent fe7eb723a1
commit 182af5026d

View File

@ -411,12 +411,23 @@ namespace CounterDrone.Core.Algorithms
var mid = ThreatMidpoint(threat);
var (effectiveR, expansionTime) = ComputeEffectiveRadius(threat, ammo, env);
float recommendedTiming = threat.ArrivalTime - expansionTime;
if (recommendedTiming < 0.1f) recommendedTiming = 0.1f;
float tx = mid.X + targetOffset;
float tz = mid.Z;
// 按目标点位置计算无人机到达时间,非中点
float droneSpeed = (float)threat.Target.TypicalSpeed / 3.6f;
float startX = (float)threat.Waypoints[0].PosX;
float startZ = (float)threat.Waypoints[0].PosZ;
float endX = (float)threat.Waypoints[^1].PosX;
float endZ = (float)threat.Waypoints[^1].PosZ;
float totalDist = Kinematics.Distance2D(startX, startZ, endX, endZ);
float distToTx = Kinematics.Distance2D(startX, startZ, tx, tz);
// 如果目标点在航路反向,截断到 [0, totalDist]
distToTx = Math.Max(0, Math.Min(totalDist, distToTx));
float txArrival = totalDist > 0.1f ? distToTx / Math.Max(0.1f, droneSpeed) : 0;
float recommendedTiming = txArrival - expansionTime;
if (recommendedTiming < 0.1f) recommendedTiming = 0.1f;
float fireTime;
if (unit.Type == PlatformType.AirBased)
{