mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-02-27 14:38:52 +00:00
* Changed how non-BGM are loaded into the game + moved into directories * some leftovers * Apply suggestions from code review Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> * Added setting for Field Volume + rewrote playSound() and updateSoundVolume() functions to reflect the new settings. * Main -> Beta (#3635) * Fixed issue with falsy issue within condition to get a stat for IV scanner * add fix setting code to prevent form/variant bug when default form/variant setting is wrong. in addition, that fix code include gender fix, so i revert old gender fix. update wrong log message. * [Hotfix] Fix Memory Mushroom not showing relearner moves (#3619) * Fix Memory Mushroom not showing relearner moves * Fix rollout test * Rewrite player faint logic in FaintPhase (#3614) * 867 runerigus sprite (#3629) cropped static frames, fixed cropped sprite set runerigus exp to use the shiny exp's animation verified all hex colors are unchanged - fixed ultra necrozma exp front variant swapped arrays. - xatu female eye color fix * [Bug] Preventing the MBH from being stolen in Endless (#3630) * Endless MBH Fix * add import * Revert "add import" This reverts commit 814a4059c2830e972c348d698259535e117850bf. * Revert "Endless MBH Fix" This reverts commit 8eb448130132ff9eed614a2ec576926814008df0. * removed newline --------- Co-authored-by: Frederico Santos <frederico.f.santos@tecnico.ulisboa.pt> Co-authored-by: frutescens <info@laptop> * [Bug] Fix type-hints for immunity (#3620) * enable mock containers to be found by name * enable mock text to be found by name * add test coverage for type-hints Only for "immunity" and "status moves" * fix wrong message key of curse(ghost type) (#3631) Co-authored-by: Frederico Santos <frederico.f.santos@tecnico.ulisboa.pt> * [Hotfix] Steal-able Mini Black Hole Pt 2 (#3632) * Still have no idea where Eternatus is given the MBH.... * typedocs --------- Co-authored-by: frutescens <info@laptop> * [Hotfix] Abilities that prevent ATK drops no longer stop other stat drops (#3624) * Abilities that prevent ATK drops no longer stop other stat drops * Apply suggestions from code review Co-authored-by: Mumble <kimjoanne@protonmail.com> * Add `isNullOrUndefined()` utility function --------- * Grip Claw now shows the proper pokemon nickname (#3634) Co-authored-by: frutescens <info@laptop> --------- Co-authored-by: Opaque02 <66582645+Opaque02@users.noreply.github.com> Co-authored-by: KimJeongSun <leo@atlaslabs.ai> Co-authored-by: Frederico Santos <frederico.f.santos@tecnico.ulisboa.pt> Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com> Co-authored-by: cam <lrlrliwoo@gmail.com> Co-authored-by: Mumble <kimjoanne@protonmail.com> Co-authored-by: frutescens <info@laptop> Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> Co-authored-by: Enoch <enoch.jwsong@gmail.com> Co-authored-by: Mumble <171087428+frutescens@users.noreply.github.com> * [Bug] Preventing the MBH from being stolen in Endless (#3630) * Endless MBH Fix * add import * Revert "add import" This reverts commit 814a4059c2830e972c348d698259535e117850bf. * Revert "Endless MBH Fix" This reverts commit 8eb448130132ff9eed614a2ec576926814008df0. * removed newline --------- Co-authored-by: Frederico Santos <frederico.f.santos@tecnico.ulisboa.pt> Co-authored-by: frutescens <info@laptop> * [Hotfix] Steal-able Mini Black Hole Pt 2 (#3632) * Still have no idea where Eternatus is given the MBH.... * typedocs --------- Co-authored-by: frutescens <info@laptop> * Deleted phases.ts (#3618) * Updated sound terms * Added space for localization * Update src/locales/ko/settings.ts Co-authored-by: Enoch <enoch.jwsong@gmail.com> * Update src/locales/zh_TW/settings.ts Co-authored-by: mercurius-00 <80205689+mercurius-00@users.noreply.github.com> * Update src/locales/pt_BR/settings.ts Co-authored-by: José Ricardo Fleury Oliveira <josefleury@discente.ufg.br> * Update src/locales/zh_CN/settings.ts Co-authored-by: mercurius-00 <80205689+mercurius-00@users.noreply.github.com> * Update src/locales/de/settings.ts Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> * Update src/locales/ko/settings.ts Co-authored-by: returntoice <dieandbecome@gmail.com> * Update src/locales/fr/settings.ts Co-authored-by: Lugiad' <adrien.grivel@hotmail.fr> * Update src/locales/it/settings.ts Co-authored-by: Niccolò <123510358+NicusPulcis@users.noreply.github.com> * Include sound effects that were loaded in as BGM. * Removed stray placeholder localization --------- Co-authored-by: Frutescens <info@laptop> Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: Opaque02 <66582645+Opaque02@users.noreply.github.com> Co-authored-by: KimJeongSun <leo@atlaslabs.ai> Co-authored-by: Frederico Santos <frederico.f.santos@tecnico.ulisboa.pt> Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com> Co-authored-by: cam <lrlrliwoo@gmail.com> Co-authored-by: Enoch <enoch.jwsong@gmail.com> Co-authored-by: mercurius-00 <80205689+mercurius-00@users.noreply.github.com> Co-authored-by: José Ricardo Fleury Oliveira <josefleury@discente.ufg.br> Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Co-authored-by: returntoice <dieandbecome@gmail.com> Co-authored-by: Lugiad' <adrien.grivel@hotmail.fr> Co-authored-by: Niccolò <123510358+NicusPulcis@users.noreply.github.com>
218 lines
7.8 KiB
TypeScript
218 lines
7.8 KiB
TypeScript
import Phaser from "phaser";
|
|
import {Mode} from "./ui/ui";
|
|
import {InputsController} from "./inputs-controller";
|
|
import MessageUiHandler from "./ui/message-ui-handler";
|
|
import StarterSelectUiHandler from "./ui/starter-select-ui-handler";
|
|
import {Setting, SettingKeys, settingIndex} from "./system/settings/settings";
|
|
import SettingsUiHandler from "./ui/settings/settings-ui-handler";
|
|
import {Button} from "#enums/buttons";
|
|
import SettingsGamepadUiHandler from "./ui/settings/settings-gamepad-ui-handler";
|
|
import SettingsKeyboardUiHandler from "#app/ui/settings/settings-keyboard-ui-handler";
|
|
import BattleScene from "./battle-scene";
|
|
import SettingsDisplayUiHandler from "./ui/settings/settings-display-ui-handler";
|
|
import SettingsAudioUiHandler from "./ui/settings/settings-audio-ui-handler";
|
|
import RunInfoUiHandler from "./ui/run-info-ui-handler";
|
|
|
|
type ActionKeys = Record<Button, () => void>;
|
|
|
|
export class UiInputs {
|
|
private scene: BattleScene;
|
|
private events: Phaser.Events.EventEmitter;
|
|
private inputsController: InputsController;
|
|
|
|
constructor(scene: BattleScene, inputsController: InputsController) {
|
|
this.scene = scene;
|
|
this.inputsController = inputsController;
|
|
this.init();
|
|
}
|
|
|
|
init(): void {
|
|
this.events = this.inputsController.events;
|
|
this.listenInputs();
|
|
}
|
|
|
|
detectInputMethod(evt): void {
|
|
if (evt.controller_type === "keyboard") {
|
|
//if the touch property is present and defined, then this is a simulated keyboard event from the touch screen
|
|
if (evt.hasOwnProperty("isTouch") && evt.isTouch) {
|
|
this.scene.inputMethod = "touch";
|
|
} else {
|
|
this.scene.inputMethod = "keyboard";
|
|
}
|
|
} else if (evt.controller_type === "gamepad") {
|
|
this.scene.inputMethod = "gamepad";
|
|
}
|
|
}
|
|
|
|
listenInputs(): void {
|
|
this.events.on("input_down", (event) => {
|
|
this.detectInputMethod(event);
|
|
|
|
const actions = this.getActionsKeyDown();
|
|
if (!actions.hasOwnProperty(event.button)) {
|
|
return;
|
|
}
|
|
actions[event.button]();
|
|
}, this);
|
|
|
|
this.events.on("input_up", (event) => {
|
|
const actions = this.getActionsKeyUp();
|
|
if (!actions.hasOwnProperty(event.button)) {
|
|
return;
|
|
}
|
|
actions[event.button]();
|
|
}, this);
|
|
}
|
|
|
|
doVibration(inputSuccess: boolean, vibrationLength: number): void {
|
|
if (inputSuccess && this.scene.enableVibration && typeof navigator.vibrate !== "undefined") {
|
|
navigator.vibrate(vibrationLength);
|
|
}
|
|
}
|
|
|
|
getActionsKeyDown(): ActionKeys {
|
|
const actions: ActionKeys = {
|
|
[Button.UP]: () => this.buttonDirection(Button.UP),
|
|
[Button.DOWN]: () => this.buttonDirection(Button.DOWN),
|
|
[Button.LEFT]: () => this.buttonDirection(Button.LEFT),
|
|
[Button.RIGHT]: () => this.buttonDirection(Button.RIGHT),
|
|
[Button.SUBMIT]: () => this.buttonTouch(),
|
|
[Button.ACTION]: () => this.buttonAb(Button.ACTION),
|
|
[Button.CANCEL]: () => this.buttonAb(Button.CANCEL),
|
|
[Button.MENU]: () => this.buttonMenu(),
|
|
[Button.STATS]: () => this.buttonGoToFilter(Button.STATS),
|
|
[Button.CYCLE_SHINY]: () => this.buttonCycleOption(Button.CYCLE_SHINY),
|
|
[Button.CYCLE_FORM]: () => this.buttonCycleOption(Button.CYCLE_FORM),
|
|
[Button.CYCLE_GENDER]: () => this.buttonCycleOption(Button.CYCLE_GENDER),
|
|
[Button.CYCLE_ABILITY]: () => this.buttonCycleOption(Button.CYCLE_ABILITY),
|
|
[Button.CYCLE_NATURE]: () => this.buttonCycleOption(Button.CYCLE_NATURE),
|
|
[Button.V]: () => this.buttonCycleOption(Button.V),
|
|
[Button.SPEED_UP]: () => this.buttonSpeedChange(),
|
|
[Button.SLOW_DOWN]: () => this.buttonSpeedChange(false),
|
|
};
|
|
return actions;
|
|
}
|
|
|
|
getActionsKeyUp(): ActionKeys {
|
|
const actions: ActionKeys = {
|
|
[Button.UP]: () => undefined,
|
|
[Button.DOWN]: () => undefined,
|
|
[Button.LEFT]: () => undefined,
|
|
[Button.RIGHT]: () => undefined,
|
|
[Button.SUBMIT]: () => undefined,
|
|
[Button.ACTION]: () => undefined,
|
|
[Button.CANCEL]: () => undefined,
|
|
[Button.MENU]: () => undefined,
|
|
[Button.STATS]: () => this.buttonStats(false),
|
|
[Button.CYCLE_SHINY]: () => undefined,
|
|
[Button.CYCLE_FORM]: () => undefined,
|
|
[Button.CYCLE_GENDER]: () => undefined,
|
|
[Button.CYCLE_ABILITY]: () => undefined,
|
|
[Button.CYCLE_NATURE]: () => undefined,
|
|
[Button.V]: () => this.buttonInfo(false),
|
|
[Button.SPEED_UP]: () => undefined,
|
|
[Button.SLOW_DOWN]: () => undefined,
|
|
};
|
|
return actions;
|
|
}
|
|
|
|
buttonDirection(direction: Button): void {
|
|
const inputSuccess = this.scene.ui.processInput(direction);
|
|
const vibrationLength = 5;
|
|
this.doVibration(inputSuccess, vibrationLength);
|
|
}
|
|
|
|
buttonAb(button: Button): void {
|
|
this.scene.ui.processInput(button);
|
|
}
|
|
|
|
buttonTouch(): void {
|
|
this.scene.ui.processInput(Button.SUBMIT) || this.scene.ui.processInput(Button.ACTION);
|
|
}
|
|
|
|
buttonStats(pressed: boolean = true): void {
|
|
// allow access to Button.STATS as a toggle for other elements
|
|
for (const t of this.scene.getInfoToggles(true)) {
|
|
t.toggleInfo(pressed);
|
|
}
|
|
// handle normal pokemon battle ui
|
|
for (const p of this.scene.getField().filter(p => p?.isActive(true))) {
|
|
p.toggleStats(pressed);
|
|
}
|
|
}
|
|
|
|
buttonGoToFilter(button: Button): void {
|
|
const whitelist = [StarterSelectUiHandler];
|
|
const uiHandler = this.scene.ui?.getHandler();
|
|
if (whitelist.some(handler => uiHandler instanceof handler)) {
|
|
this.scene.ui.processInput(button);
|
|
} else {
|
|
this.buttonStats(true);
|
|
}
|
|
}
|
|
|
|
buttonInfo(pressed: boolean = true): void {
|
|
if (this.scene.showMovesetFlyout ) {
|
|
for (const p of this.scene.getField().filter(p => p?.isActive(true))) {
|
|
p.toggleFlyout(pressed);
|
|
}
|
|
}
|
|
|
|
if (this.scene.showArenaFlyout) {
|
|
this.scene.ui.processInfoButton(pressed);
|
|
}
|
|
}
|
|
|
|
buttonMenu(): void {
|
|
if (this.scene.disableMenu) {
|
|
return;
|
|
}
|
|
switch (this.scene.ui?.getMode()) {
|
|
case Mode.MESSAGE:
|
|
if (!(this.scene.ui.getHandler() as MessageUiHandler).pendingPrompt) {
|
|
return;
|
|
}
|
|
case Mode.TITLE:
|
|
case Mode.COMMAND:
|
|
case Mode.MODIFIER_SELECT:
|
|
this.scene.ui.setOverlayMode(Mode.MENU);
|
|
break;
|
|
case Mode.STARTER_SELECT:
|
|
this.buttonTouch();
|
|
break;
|
|
case Mode.MENU:
|
|
this.scene.ui.revertMode();
|
|
this.scene.playSound("ui/select");
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
}
|
|
|
|
buttonCycleOption(button: Button): void {
|
|
const whitelist = [StarterSelectUiHandler, SettingsUiHandler, RunInfoUiHandler, SettingsDisplayUiHandler, SettingsAudioUiHandler, SettingsGamepadUiHandler, SettingsKeyboardUiHandler];
|
|
const uiHandler = this.scene.ui?.getHandler();
|
|
if (whitelist.some(handler => uiHandler instanceof handler)) {
|
|
this.scene.ui.processInput(button);
|
|
} else if (button === Button.V) {
|
|
this.buttonInfo(true);
|
|
}
|
|
}
|
|
|
|
buttonSpeedChange(up = true): void {
|
|
const settingGameSpeed = settingIndex(SettingKeys.Game_Speed);
|
|
if (up && this.scene.gameSpeed < 5) {
|
|
this.scene.gameData.saveSetting(SettingKeys.Game_Speed, Setting[settingGameSpeed].options.findIndex((item) => item.label === `${this.scene.gameSpeed}x`) + 1);
|
|
if (this.scene.ui?.getMode() === Mode.SETTINGS) {
|
|
(this.scene.ui.getHandler() as SettingsUiHandler).show([]);
|
|
}
|
|
} else if (!up && this.scene.gameSpeed > 1) {
|
|
this.scene.gameData.saveSetting(SettingKeys.Game_Speed, Math.max(Setting[settingGameSpeed].options.findIndex((item) => item.label === `${this.scene.gameSpeed}x`) - 1, 0));
|
|
if (this.scene.ui?.getMode() === Mode.SETTINGS) {
|
|
(this.scene.ui.getHandler() as SettingsUiHandler).show([]);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|