feat: refine battle feedback and early guidance

This commit is contained in:
2026-07-18 03:16:05 +09:00
parent 470516bfd9
commit af2f5dbf06
4 changed files with 650 additions and 87 deletions

View File

@@ -123,7 +123,16 @@ export class StoryScene extends Phaser.Scene {
? { x: progressPanelBounds.x, y: progressPanelBounds.y, width: progressPanelBounds.width, height: progressPanelBounds.height }
: null,
isLastPage,
advanceHint: isLastPage ? 'continue' : 'next',
advanceHint:
isLastPage && this.nextScene === 'BattleScene'
? 'battle-deployment'
: isLastPage && this.nextScene === 'CampScene'
? 'camp-return'
: isLastPage
? 'continue'
: 'next',
advanceLabel: this.progressActionLabel(isLastPage),
nextScene: this.nextScene,
cutsceneKind: page?.cutscene?.kind ?? null,
cutsceneActors: page?.cutscene?.actors?.map((actor) => actor.unitId) ?? []
};
@@ -312,9 +321,9 @@ export class StoryScene extends Phaser.Scene {
});
this.bodyText.setDepth(dialogDepth + 2);
const progressX = width - ui(174);
const progressX = width - ui(214);
const progressY = panelY + panelH + ui(20);
this.progressBackground = this.add.rectangle(progressX, progressY, ui(300), ui(34), cutsceneUiColors.ink, 0.82);
this.progressBackground = this.add.rectangle(progressX, progressY, ui(380), ui(34), cutsceneUiColors.ink, 0.82);
this.progressBackground.setStrokeStyle(ui(1), palette.gold, 0.42);
this.progressBackground.setDepth(dialogDepth + 1);
@@ -324,7 +333,7 @@ export class StoryScene extends Phaser.Scene {
color: '#d8b15f',
fontStyle: '700',
align: 'center',
fixedWidth: ui(276)
fixedWidth: ui(356)
});
this.progressText.setOrigin(0.5);
this.progressText.setDepth(dialogDepth + 2);
@@ -404,10 +413,23 @@ export class StoryScene extends Phaser.Scene {
this.bodyText?.setText(page.text);
const isLastPage = this.pageIndex >= this.pages.length - 1;
this.progressText?.setText(
`${this.pageIndex + 1} / ${this.pages.length} · 클릭 / 스페이스·엔터 · ${isLastPage ? '계속' : '다음'}`
`${this.pageIndex + 1} / ${this.pages.length} · 클릭 / 스페이스·엔터 · ${this.progressActionLabel(isLastPage)}`
);
}
private progressActionLabel(isLastPage = this.pageIndex >= this.pages.length - 1) {
if (!isLastPage) {
return '다음';
}
if (this.nextScene === 'BattleScene') {
return '전투 배치';
}
if (this.nextScene === 'CampScene') {
return '군영으로';
}
return '계속';
}
private pagePortraitKey(page: StoryPage) {
return page.portrait ?? portraitKeyForSpeaker(page.speaker);
}