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;
}
}
}