Solidify campaign progression state

This commit is contained in:
2026-06-22 17:05:59 +09:00
parent 797051ac9f
commit 635b3a7a81
6 changed files with 369 additions and 31 deletions

View File

@@ -1,5 +1,7 @@
import Phaser from 'phaser';
import { soundDirector } from '../audio/SoundDirector';
import { firstBattleVictoryPages } from '../data/scenario';
import { hasCampaignSave, loadCampaignState, startNewCampaign } from '../state/campaignState';
import { palette } from '../ui/palette';
export class TitleScene extends Phaser.Scene {
@@ -160,8 +162,9 @@ export class TitleScene extends Phaser.Scene {
this.add.rectangle(menuX, menuY - 126, 186, 2, palette.gold, 0.7);
this.add.rectangle(menuX, menuY + 126, 186, 2, palette.gold, 0.36);
const canContinue = hasCampaignSave();
this.createMenuButton(menuX, menuY - 70, '새 게임', true, () => this.startGame());
this.createMenuButton(menuX, menuY, '이어하기', false, () => undefined);
this.createMenuButton(menuX, menuY, '이어하기', canContinue, () => this.continueGame());
this.createMenuButton(menuX, menuY + 70, '설정', true, () => this.openSettingsPanel(menuX, menuY));
}
@@ -285,6 +288,31 @@ export class TitleScene extends Phaser.Scene {
soundDirector.start();
soundDirector.resume();
soundDirector.playSelect();
startNewCampaign();
this.scene.start('StoryScene');
}
private continueGame() {
soundDirector.start();
soundDirector.resume();
soundDirector.playSelect();
const campaign = loadCampaignState();
if (campaign.step === 'first-camp') {
this.scene.start('CampScene');
return;
}
if (campaign.step === 'first-battle') {
this.scene.start('BattleScene');
return;
}
if (campaign.step === 'first-victory-story') {
this.scene.start('StoryScene', { pages: firstBattleVictoryPages, nextScene: 'TitleScene' });
return;
}
this.scene.start('StoryScene');
}
}