Confirm camp save overwrites
This commit is contained in:
@@ -10717,6 +10717,8 @@ export class CampScene extends Phaser.Scene {
|
|||||||
private dialogueObjects: Phaser.GameObjects.GameObject[] = [];
|
private dialogueObjects: Phaser.GameObjects.GameObject[] = [];
|
||||||
private sortieObjects: Phaser.GameObjects.GameObject[] = [];
|
private sortieObjects: Phaser.GameObjects.GameObject[] = [];
|
||||||
private saveSlotObjects: Phaser.GameObjects.GameObject[] = [];
|
private saveSlotObjects: Phaser.GameObjects.GameObject[] = [];
|
||||||
|
private saveSlotConfirmObjects: Phaser.GameObjects.GameObject[] = [];
|
||||||
|
private pendingSaveSlot?: number;
|
||||||
private tabButtons: CampTabButtonView[] = [];
|
private tabButtons: CampTabButtonView[] = [];
|
||||||
private visitedTabs = new Set<CampTab>();
|
private visitedTabs = new Set<CampTab>();
|
||||||
private selectedSortieUnitIds: string[] = [];
|
private selectedSortieUnitIds: string[] = [];
|
||||||
@@ -10742,6 +10744,8 @@ export class CampScene extends Phaser.Scene {
|
|||||||
this.dialogueObjects = [];
|
this.dialogueObjects = [];
|
||||||
this.sortieObjects = [];
|
this.sortieObjects = [];
|
||||||
this.saveSlotObjects = [];
|
this.saveSlotObjects = [];
|
||||||
|
this.saveSlotConfirmObjects = [];
|
||||||
|
this.pendingSaveSlot = undefined;
|
||||||
this.tabButtons = [];
|
this.tabButtons = [];
|
||||||
this.visitedTabs = new Set(['status']);
|
this.visitedTabs = new Set(['status']);
|
||||||
this.campaign = getCampaignState();
|
this.campaign = getCampaignState();
|
||||||
@@ -11936,7 +11940,7 @@ export class CampScene extends Phaser.Scene {
|
|||||||
saveLabel.setDepth(depth + 1);
|
saveLabel.setDepth(depth + 1);
|
||||||
this.saveSlotObjects.push(saveLabel);
|
this.saveSlotObjects.push(saveLabel);
|
||||||
|
|
||||||
const run = () => this.saveCampToSlot(summary.slot);
|
const run = () => this.requestSaveCampToSlot(summary.slot);
|
||||||
[row, title, detail, meta, saveLabel].forEach((object) => {
|
[row, title, detail, meta, saveLabel].forEach((object) => {
|
||||||
object.setInteractive({ useHandCursor: true });
|
object.setInteractive({ useHandCursor: true });
|
||||||
object.on('pointerdown', run);
|
object.on('pointerdown', run);
|
||||||
@@ -11973,6 +11977,88 @@ export class CampScene extends Phaser.Scene {
|
|||||||
return `${month}/${day} ${hour}:${minute}`;
|
return `${month}/${day} ${hour}:${minute}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private requestSaveCampToSlot(slot: number) {
|
||||||
|
const activeSlot = this.campaign?.activeSaveSlot ?? getCampaignState().activeSaveSlot;
|
||||||
|
const summary = listCampaignSaveSlots().find((candidate) => candidate.slot === slot);
|
||||||
|
if (summary?.exists && summary.slot !== activeSlot) {
|
||||||
|
this.showCampSaveOverwriteConfirm(summary);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.saveCampToSlot(slot);
|
||||||
|
}
|
||||||
|
|
||||||
|
private showCampSaveOverwriteConfirm(summary: CampaignSaveSlotSummary) {
|
||||||
|
this.hideCampSaveConfirm();
|
||||||
|
this.pendingSaveSlot = summary.slot;
|
||||||
|
|
||||||
|
const depth = 64;
|
||||||
|
const width = 386;
|
||||||
|
const height = 166;
|
||||||
|
const x = this.scale.width - width - 58;
|
||||||
|
const y = 158;
|
||||||
|
|
||||||
|
const shade = this.add.rectangle(0, 0, this.scale.width, this.scale.height, 0x020406, 0.34);
|
||||||
|
shade.setOrigin(0);
|
||||||
|
shade.setDepth(depth - 1);
|
||||||
|
shade.setInteractive();
|
||||||
|
this.saveSlotConfirmObjects.push(shade);
|
||||||
|
|
||||||
|
const panel = this.add.rectangle(x, y, width, height, 0x111a24, 0.99);
|
||||||
|
panel.setOrigin(0);
|
||||||
|
panel.setDepth(depth);
|
||||||
|
panel.setStrokeStyle(2, palette.gold, 0.9);
|
||||||
|
panel.setInteractive();
|
||||||
|
this.saveSlotConfirmObjects.push(panel);
|
||||||
|
|
||||||
|
const title = this.add.text(x + 22, y + 18, `슬롯 ${summary.slot} 덮어쓰기`, this.textStyle(20, '#f2e3bf', true));
|
||||||
|
title.setDepth(depth + 1);
|
||||||
|
this.saveSlotConfirmObjects.push(title);
|
||||||
|
|
||||||
|
const detail = this.add.text(
|
||||||
|
x + 22,
|
||||||
|
y + 50,
|
||||||
|
`${this.campSaveSlotDetail(summary)}\n${this.campSaveSlotMeta(summary)}`,
|
||||||
|
this.textStyle(12, '#b9c3cf')
|
||||||
|
);
|
||||||
|
detail.setDepth(depth + 1);
|
||||||
|
detail.setLineSpacing(5);
|
||||||
|
this.saveSlotConfirmObjects.push(detail);
|
||||||
|
|
||||||
|
const message = this.add.text(x + 22, y + 96, '현재 군영 진행으로 이 슬롯을 교체합니다.', this.textStyle(12, '#ffdf7b', true));
|
||||||
|
message.setDepth(depth + 1);
|
||||||
|
this.saveSlotConfirmObjects.push(message);
|
||||||
|
|
||||||
|
const confirm = this.add.text(x + width - 174, y + 126, '덮어쓰기', this.textStyle(14, '#f2e3bf', true));
|
||||||
|
confirm.setDepth(depth + 1);
|
||||||
|
confirm.setPadding(14, 5, 14, 5);
|
||||||
|
confirm.setBackgroundColor('#6d4420');
|
||||||
|
confirm.setInteractive({ useHandCursor: true });
|
||||||
|
confirm.on('pointerdown', () => this.confirmCampSaveOverwrite());
|
||||||
|
this.saveSlotConfirmObjects.push(confirm);
|
||||||
|
|
||||||
|
const cancel = this.add.text(x + width - 70, y + 126, '취소', this.textStyle(14, '#d8b15f', true));
|
||||||
|
cancel.setDepth(depth + 1);
|
||||||
|
cancel.setPadding(14, 5, 14, 5);
|
||||||
|
cancel.setBackgroundColor('#1a2630');
|
||||||
|
cancel.setInteractive({ useHandCursor: true });
|
||||||
|
cancel.on('pointerdown', () => {
|
||||||
|
soundDirector.playSelect();
|
||||||
|
this.hideCampSaveConfirm();
|
||||||
|
});
|
||||||
|
this.saveSlotConfirmObjects.push(cancel);
|
||||||
|
}
|
||||||
|
|
||||||
|
private confirmCampSaveOverwrite() {
|
||||||
|
const slot = this.pendingSaveSlot;
|
||||||
|
if (!slot) {
|
||||||
|
this.hideCampSaveConfirm();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.saveCampToSlot(slot);
|
||||||
|
}
|
||||||
|
|
||||||
private saveCampToSlot(slot: number) {
|
private saveCampToSlot(slot: number) {
|
||||||
soundDirector.playSelect();
|
soundDirector.playSelect();
|
||||||
this.hideCampSaveSlotPanel();
|
this.hideCampSaveSlotPanel();
|
||||||
@@ -11982,6 +12068,14 @@ export class CampScene extends Phaser.Scene {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private handleSaveSlotKey(event: KeyboardEvent) {
|
private handleSaveSlotKey(event: KeyboardEvent) {
|
||||||
|
if (this.saveSlotConfirmObjects.length > 0) {
|
||||||
|
if (event.key === 'Enter') {
|
||||||
|
event.preventDefault();
|
||||||
|
this.confirmCampSaveOverwrite();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (this.saveSlotObjects.length === 0) {
|
if (this.saveSlotObjects.length === 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -11992,15 +12086,28 @@ export class CampScene extends Phaser.Scene {
|
|||||||
}
|
}
|
||||||
|
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
this.saveCampToSlot(slot);
|
this.requestSaveCampToSlot(slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
private hideCampSaveSlotPanel() {
|
private hideCampSaveSlotPanel() {
|
||||||
|
this.hideCampSaveConfirm();
|
||||||
this.saveSlotObjects.forEach((object) => object.destroy());
|
this.saveSlotObjects.forEach((object) => object.destroy());
|
||||||
this.saveSlotObjects = [];
|
this.saveSlotObjects = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private hideCampSaveConfirm() {
|
||||||
|
this.saveSlotConfirmObjects.forEach((object) => object.destroy());
|
||||||
|
this.saveSlotConfirmObjects = [];
|
||||||
|
this.pendingSaveSlot = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
private handleEscapeKey() {
|
private handleEscapeKey() {
|
||||||
|
if (this.saveSlotConfirmObjects.length > 0) {
|
||||||
|
soundDirector.playSelect();
|
||||||
|
this.hideCampSaveConfirm();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (this.saveSlotObjects.length > 0) {
|
if (this.saveSlotObjects.length > 0) {
|
||||||
soundDirector.playSelect();
|
soundDirector.playSelect();
|
||||||
this.hideCampSaveSlotPanel();
|
this.hideCampSaveSlotPanel();
|
||||||
|
|||||||
Reference in New Issue
Block a user