perf: RunSimulation支持自定义TimeScale + 删除诊断dump + 批量commit

- RunSimulation 增加 timeScale 参数(默认8f)
- 删除 fireSchedule 诊断 dump 到桌面
- Commit 批量50帧
This commit is contained in:
tian 2026-06-13 15:20:50 +08:00
parent 197f8b6e5c
commit 2162a342b7

View File

@ -47,27 +47,12 @@ namespace CounterDrone.Core.Tests
if (Directory.Exists(_testDir)) Directory.Delete(_testDir, true); if (Directory.Exists(_testDir)) Directory.Delete(_testDir, true);
} }
private SimulationEngine RunSimulation(int maxTicks, float tickDt = 1f / 20f) private SimulationEngine RunSimulation(int maxTicks, float tickDt = 1f / 20f, float timeScale = 8f)
{ {
var engine = new SimulationEngine(_scenario, _frameStore, new DamageModelRouter(), _paths, new DefaultDefensePlanner(_ammoCatalog)); var engine = new SimulationEngine(_scenario, _frameStore, new DamageModelRouter(), _paths, new DefaultDefensePlanner(_ammoCatalog));
engine.Initialize(_taskId); engine.Initialize(_taskId);
engine.TimeScale = timeScale; // 8倍速加速
// 诊断:检查 _fireSchedule 的时序
var fld = typeof(SimulationEngine).GetField("_fireSchedule", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
if (fld != null)
{
var schedule = fld.GetValue(engine) as System.Collections.IList;
if (schedule != null && schedule.Count > 0)
{
var ftimes = schedule.Cast<object>().Select(e => ((dynamic)e).FireTime).Cast<float>().ToList();
System.IO.File.WriteAllText(@"C:\Users\Tellme\Desktop\schedule_dump.txt",
$"count={schedule.Count} first={ftimes.Min():F3} last={ftimes.Max():F3} span={ftimes.Max()-ftimes.Min():F3}\n" +
string.Join("\n", ftimes.Select((t,i) => $"{t:F3}")));
}
}
engine.TimeScale = 8f; // 8倍速加速
for (int i = 0; i < maxTicks; i++) for (int i = 0; i < maxTicks; i++)
{ {
var r = engine.Tick(tickDt); var r = engine.Tick(tickDt);