private static void TestTimeToDown() { List <DebugMenuOption> list = new List <DebugMenuOption>(); foreach (PawnKindDef kindDef in DefDatabase <PawnKindDef> .AllDefs.OrderBy((PawnKindDef kd) => kd.defName)) { list.Add(new DebugMenuOption(kindDef.label, DebugMenuOptionMode.Action, delegate { if (kindDef == PawnKindDefOf.Colonist) { Log.Message("Current colonist TTD reference point: 22.3 seconds, stddev 8.35 seconds"); } List <float> results = new List <float>(); List <PawnKindDef> list2 = new List <PawnKindDef>(); List <PawnKindDef> list3 = new List <PawnKindDef>(); list2.Add(kindDef); list3.Add(kindDef); ArenaUtility.BeginArenaFightSet(1000, list2, list3, delegate(ArenaUtility.ArenaResult result) { if (result.winner != 0) { results.Add(result.tickDuration.TicksToSeconds()); } }, delegate { Log.Message($"Finished {results.Count} tests; time-to-down {results.Average()}, stddev {GenMath.Stddev(results)}\n\nraw: {results.Select((float res) => res.ToString()).ToLineList()}"); }); })); } Find.WindowStack.Add(new Dialog_DebugOptionListLister(list)); }