test(compare): trace scenario action effects
This commit is contained in:
@@ -120,6 +120,19 @@ function comparisonRunBattle(array $fixture): array
|
||||
$rawAttackerNation = $fixture['attackerNation'];
|
||||
$rawDefenderCity = $fixture['defenderCity'];
|
||||
$rawDefenderNation = $fixture['defenderNation'];
|
||||
// 비교 fixture에 명시된 경우에만 ref runtime의 scenario action chain을
|
||||
// 활성화합니다. 일반 비교 fixture의 기존 동작은 그대로 유지합니다.
|
||||
$scenarioEffect = $fixture['scenarioEffect'] ?? null;
|
||||
if ($scenarioEffect === '' || $scenarioEffect === 'None') {
|
||||
$scenarioEffect = null;
|
||||
}
|
||||
if (
|
||||
$scenarioEffect !== null
|
||||
&& (!is_string($scenarioEffect) || getScenarioEffectClass($scenarioEffect) === null)
|
||||
) {
|
||||
throw new \InvalidArgumentException('scenarioEffect is invalid');
|
||||
}
|
||||
GameConst::$scenarioEffect = $scenarioEffect;
|
||||
|
||||
$tracingRng = new ComparisonTracingRNG(new LiteHashDRBG($seed));
|
||||
$warRng = new RandUtil($tracingRng);
|
||||
@@ -182,6 +195,17 @@ function comparisonRunBattle(array $fixture): array
|
||||
},
|
||||
);
|
||||
|
||||
$attackerLogs = $attacker->getLogger()->rollback();
|
||||
$defenderLogs = [];
|
||||
foreach ($defenderList as $defenderUnit) {
|
||||
if (!($defenderUnit instanceof WarUnitGeneral)) {
|
||||
continue;
|
||||
}
|
||||
$snapshot = buildWarTraceUnitSnapshot($defenderUnit);
|
||||
$defenderLogs[(string)$snapshot['id']] = $defenderUnit->getLogger()->rollback();
|
||||
}
|
||||
$cityLogs = $city->getLogger()->rollback();
|
||||
|
||||
return [
|
||||
'engine' => 'ref',
|
||||
'seed' => $seed,
|
||||
@@ -191,6 +215,11 @@ function comparisonRunBattle(array $fixture): array
|
||||
'finishedDefenders' => $finishedDefenders,
|
||||
'events' => $events,
|
||||
'rng' => $tracingRng->calls,
|
||||
'logs' => [
|
||||
'attacker' => $attackerLogs,
|
||||
'defenders' => $defenderLogs,
|
||||
'city' => $cityLogs,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user