pokerogue/src/ui/ui.ts

102 lines
2.6 KiB
TypeScript
Raw Normal View History

2023-03-28 19:54:52 +01:00
import { default as BattleScene } from '../battle-scene';
import UiHandler from './uiHandler';
import BattleMessageUiHandler from './battle-message-ui-handler';
import CommandUiHandler from './command-ui-handler';
import PartyUiHandler from './party-ui-handler';
import FightUiHandler from './fight-ui-handler';
import MessageUiHandler from './message-ui-handler';
import SwitchCheckUiHandler from './switch-check-ui-handler';
import ModifierSelectUiHandler from './modifier-select-ui-handler';
export enum Mode {
MESSAGE = 0,
COMMAND,
FIGHT,
SWITCH_CHECK,
MODIFIER_SELECT,
PARTY
};
export default class UI extends Phaser.GameObjects.Container {
private mode: Mode;
private handlers: UiHandler[];
constructor(scene: BattleScene) {
super(scene, 0, scene.game.canvas.height / 6);
this.mode = Mode.MESSAGE;
this.handlers = [
new BattleMessageUiHandler(scene),
new CommandUiHandler(scene),
new FightUiHandler(scene),
new SwitchCheckUiHandler(scene),
new ModifierSelectUiHandler(scene),
new PartyUiHandler(scene)
];
}
setup() {
for (let handler of this.handlers) {
handler.setup();
}
}
getHandler() {
return this.handlers[this.mode];
}
getMessageHandler() {
return this.handlers[Mode.MESSAGE] as BattleMessageUiHandler;
}
processInput(keyCode: integer) {
this.getHandler().processInput(keyCode);
}
showText(text: string, delay?: integer, callback?: Function, callbackDelay?: integer, prompt?: boolean) {
const handler = this.getHandler();
if (handler instanceof MessageUiHandler)
(handler as MessageUiHandler).showText(text, delay, callback, callbackDelay, prompt);
else
this.getMessageHandler().showText(text, delay, callback, callbackDelay, prompt);
}
clearText() {
const handler = this.getHandler();
if (handler instanceof MessageUiHandler)
(handler as MessageUiHandler).clearText();
else
this.getMessageHandler().clearText();
}
setCursor(cursor: integer): boolean {
const changed = this.getHandler().setCursor(cursor);
if (changed)
this.playSelect();
return changed;
}
playSelect() {
this.scene.sound.play('select');
}
playError() {
this.scene.sound.play('error');
}
setMode(mode: Mode, ...args: any[]) {
if (this.mode === mode)
return;
this.getHandler().clear();
this.mode = mode;
this.getHandler().show(args);
}
setModeWithoutClear(mode: Mode, ...args: any[]) {
if (this.mode === mode)
return;
this.mode = mode;
this.getHandler().show(args);
}
}