From 04e5e5d0c5da83eff1798318ede22776f5ce2601 Mon Sep 17 00:00:00 2001 From: Wickedness Date: Thu, 9 Jul 2026 14:12:17 +0900 Subject: [PATCH] Expose recommended class coverage counts --- scripts/verify-flow.mjs | 2 ++ src/game/scenes/CampScene.ts | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/scripts/verify-flow.mjs b/scripts/verify-flow.mjs index 49e48a4..e2e453d 100644 --- a/scripts/verify-flow.mjs +++ b/scripts/verify-flow.mjs @@ -9625,6 +9625,8 @@ function assertSortieTacticalRoster(state, requiredUnitIds) { typeof state.sortiePlan.terrainScore !== 'number' || typeof state.sortiePlan.recommendedSelectedCount !== 'number' || typeof state.sortiePlan.recommendedTotal !== 'number' || + typeof state.sortiePlan.recommendedClassSelectedCount !== 'number' || + typeof state.sortiePlan.recommendedClassTotal !== 'number' || typeof state.sortiePlan.reserveTrainingExpPreview !== 'number' || typeof state.sortiePlan.reserveTrainingEquipmentPreview !== 'number' || typeof state.sortiePlan.reserveTrainingBondPreview !== 'number' || diff --git a/src/game/scenes/CampScene.ts b/src/game/scenes/CampScene.ts index 14f1941..444581c 100644 --- a/src/game/scenes/CampScene.ts +++ b/src/game/scenes/CampScene.ts @@ -276,6 +276,8 @@ type SortiePlanSummary = { reserveCount: number; recommendedSelectedCount: number; recommendedTotal: number; + recommendedClassSelectedCount: number; + recommendedClassTotal: number; deploymentLine: string; recommendationLine: string; recruitedLine: string; @@ -13332,8 +13334,9 @@ export class CampScene extends Phaser.Scene { const reserveFocus = this.reserveTrainingFocusDefinition(); const availableIds = new Set(allAllies.map((unit) => unit.id)); const recommended = rule.recommended.filter((entry) => availableIds.has(entry.unitId)); + const recommendedClasses = rule.recommendedClasses ?? []; const missingRecommended = recommended.filter((entry) => !selectedIds.has(entry.unitId)); - const missingClassRecommendations = (rule.recommendedClasses ?? []).filter( + const missingClassRecommendations = recommendedClasses.filter( (entry) => !selectedUnits.some((unit) => entry.classKeys.includes(unit.classKey)) ); const recruitedUnits = allAllies.filter((unit) => !foundingSortieUnitIds.has(unit.id)); @@ -13349,6 +13352,7 @@ export class CampScene extends Phaser.Scene { const terrainGrade = this.sortieTerrainGrade(terrainScore); const activeBondCount = this.currentBonds().filter((bond) => bond.unitIds.every((unitId) => selectedIds.has(unitId))).length; const recommendedSelectedCount = recommended.filter((entry) => selectedIds.has(entry.unitId)).length; + const recommendedClassSelectedCount = recommendedClasses.length - missingClassRecommendations.length; const roleCounts = selectedUnits.reduce( (counts, unit) => { counts[this.sortieFormationRole(unit)] += 1; @@ -13415,6 +13419,8 @@ export class CampScene extends Phaser.Scene { reserveCount: reserveUnits.length, recommendedSelectedCount, recommendedTotal: recommended.length, + recommendedClassSelectedCount, + recommendedClassTotal: recommendedClasses.length, deploymentLine: roleLine, recommendationLine: recommended.length > 0 ? `추천 무장 ${recommendedSelectedCount}/${recommended.length} · 병종 ${this.sortieRecommendedClassLine(scenario)}`