using System.Collections.Generic; namespace Colosseum.Combat.Simulation { /// /// 여러 빌드를 순회하며 배치 시뮬레이션을 실행합니다. /// public static class SimulationBatchRunner { /// /// 생성된 빌드 목록을 순회 실행하고 결과를 묶어 반환합니다. /// public static SimulationBatchResult Run( string batchName, IReadOnlyList builds, SimulationRuleSet ruleSet, RotationPolicy rotationPolicy, IReadOnlyList generationWarnings, bool truncated) { List entries = new List(); List warnings = new List(); if (generationWarnings != null) { for (int i = 0; i < generationWarnings.Count; i++) { if (!string.IsNullOrWhiteSpace(generationWarnings[i])) warnings.Add(generationWarnings[i]); } } if (builds != null) { for (int i = 0; i < builds.Count; i++) { BuildSimulationInput build = builds[i]; if (build == null) continue; SimulationResult result = BuildSimulationEngine.Run(build, ruleSet, rotationPolicy); entries.Add(new SimulationBatchEntry(build.BuildLabel, result)); } } entries.Sort((left, right) => { float leftDps = left != null && left.Result != null ? left.Result.AverageDps : 0f; float rightDps = right != null && right.Result != null ? right.Result.AverageDps : 0f; return rightDps.CompareTo(leftDps); }); SimulationBatchResult batchResult = new SimulationBatchResult(); batchResult.Initialize(batchName, builds != null ? builds.Count : 0, truncated, entries, warnings); return batchResult; } } }