Support number keys for battle save slots

This commit is contained in:
2026-07-05 04:23:06 +09:00
parent d6a1b06c74
commit bd3b3e23f4

View File

@@ -3069,6 +3069,7 @@ export class BattleScene extends Phaser.Scene {
private resultAnimationToken = 0;
private resultSettlementText?: Phaser.GameObjects.Text;
private saveSlotPanelObjects: Phaser.GameObjects.GameObject[] = [];
private saveSlotPanelMode?: SaveSlotMode;
private unitViews = new Map<string, UnitView>();
private actedUnitIds = new Set<string>();
private bondStates = new Map<string, BondState>();
@@ -3215,6 +3216,9 @@ export class BattleScene extends Phaser.Scene {
this.refreshUnitLegibilityStyles();
}
});
this.input.keyboard?.on('keydown', (event: KeyboardEvent) => {
this.handleSaveSlotPanelKey(event);
});
this.input.keyboard?.on('keydown-SPACE', (event: KeyboardEvent) => {
if (this.activeFaction !== 'enemy' || this.fastForwardHeld) {
return;
@@ -11150,8 +11154,40 @@ export class BattleScene extends Phaser.Scene {
return Array.from({ length: campaignSaveSlotCount }, (_, index) => index + 1).some((slot) => Boolean(this.readBattleSaveState(slot)));
}
private handleSaveSlotPanelKey(event: KeyboardEvent) {
if (!this.saveSlotPanelMode) {
return false;
}
const slot = Number(event.key);
if (!Number.isInteger(slot) || slot < 1 || slot > campaignSaveSlotCount) {
return false;
}
event.preventDefault();
this.activateSaveSlotPanelSlot(slot);
return true;
}
private activateSaveSlotPanelSlot(slot: number) {
const mode = this.saveSlotPanelMode;
if (!mode || (mode === 'load' && !this.readBattleSaveState(slot))) {
return;
}
this.suppressNextLeftClick = true;
soundDirector.playSelect();
if (mode === 'save') {
this.showSaveBattleConfirm(slot);
return;
}
this.showLoadBattleConfirm(slot);
}
private showSaveSlotPanel(mode: SaveSlotMode) {
this.hideSaveSlotPanel();
this.saveSlotPanelMode = mode;
this.clearPointerFeedback();
const depth = 70;
const width = 520;
@@ -11226,13 +11262,7 @@ export class BattleScene extends Phaser.Scene {
if (!disabled) {
const run = () => {
this.suppressNextLeftClick = true;
soundDirector.playSelect();
if (mode === 'save') {
this.showSaveBattleConfirm(slot);
} else {
this.showLoadBattleConfirm(slot);
}
this.activateSaveSlotPanelSlot(slot);
};
row.setInteractive({ useHandCursor: true });
row.on('pointerover', () => row.setFillStyle(0x263647, 0.98));
@@ -11264,6 +11294,7 @@ export class BattleScene extends Phaser.Scene {
private hideSaveSlotPanel() {
this.saveSlotPanelObjects.forEach((object) => object.destroy());
this.saveSlotPanelObjects = [];
this.saveSlotPanelMode = undefined;
}
private showSaveBattleConfirm(slot: number) {
@@ -17214,6 +17245,7 @@ export class BattleScene extends Phaser.Scene {
commandMenuVisible: this.commandMenuObjects.length > 0,
mapMenuVisible: this.mapMenuObjects.length > 0,
saveSlotPanelVisible: this.saveSlotPanelObjects.length > 0,
saveSlotPanelMode: this.saveSlotPanelMode ?? null,
resultVisible: this.resultObjects.length > 0,
turnPromptVisible: this.turnPromptObjects.length > 0,
turnPromptMode: this.turnPromptMode ?? null,