From 76b73e3de25d02d85f5e724ef815d51bc1ea68fb Mon Sep 17 00:00:00 2001 From: Wickedness Date: Thu, 9 Jul 2026 14:20:37 +0900 Subject: [PATCH] Expose sortie checklist summary --- scripts/verify-flow.mjs | 8 ++++++++ src/game/scenes/CampScene.ts | 10 ++++++++++ 2 files changed, 18 insertions(+) diff --git a/scripts/verify-flow.mjs b/scripts/verify-flow.mjs index ddd3e7d..eba5083 100644 --- a/scripts/verify-flow.mjs +++ b/scripts/verify-flow.mjs @@ -9578,6 +9578,14 @@ function assertSortieTacticalRoster(state, requiredUnitIds) { if (!state?.sortieVisible || !Array.isArray(state.sortieRoster)) { throw new Error(`Expected sortie tactical roster to be exposed: ${JSON.stringify(state)}`); } + if ( + typeof state.sortieChecklistSummary?.total !== 'number' || + typeof state.sortieChecklistSummary?.completeCount !== 'number' || + typeof state.sortieChecklistSummary?.requiredRemainingCount !== 'number' || + typeof state.sortieChecklistSummary?.recommendedRemainingCount !== 'number' + ) { + throw new Error(`Expected sortie checklist summary counts: ${JSON.stringify(state.sortieChecklistSummary)}`); + } const missingIds = requiredUnitIds.filter((unitId) => !state.sortieRoster.some((unit) => unit.id === unitId)); if (missingIds.length > 0) { diff --git a/src/game/scenes/CampScene.ts b/src/game/scenes/CampScene.ts index 257f6a5..1305276 100644 --- a/src/game/scenes/CampScene.ts +++ b/src/game/scenes/CampScene.ts @@ -13797,6 +13797,15 @@ export class CampScene extends Phaser.Scene { return `${prefix}: ${next.label} - ${next.detail}`; } + private sortieChecklistSummary(checklist: SortieChecklistItem[]) { + return { + total: checklist.length, + completeCount: checklist.filter((item) => item.complete).length, + requiredRemainingCount: checklist.filter((item) => !item.complete && item.priority === 'required').length, + recommendedRemainingCount: checklist.filter((item) => !item.complete && item.priority !== 'required').length + }; + } + private currentSortieFlow() { return getSortieFlow(this.campaign?.latestBattleId, this.campaign?.step); } @@ -15808,6 +15817,7 @@ export class CampScene extends Phaser.Scene { sortieFocusedUnit: this.sortieFocusedUnitSummary(), sortiePlanFeedback: this.sortiePlanFeedback, sortieChecklist, + sortieChecklistSummary: this.sortieChecklistSummary(sortieChecklist), sortieNextAction: this.sortiePrepSubtitle(sortieChecklist), reserveTrainingFocus, reserveTrainingFocusOptions: campaignReserveTrainingFocusDefinitions.map((focus) => ({