mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-02-25 05:28:27 +00:00
148 lines
6.3 KiB
TypeScript
148 lines
6.3 KiB
TypeScript
|
import BattleScene from "../battle-scene";
|
||
|
import {SettingDefaults, SettingOptions} from "./settings";
|
||
|
import SettingsGamepadUiHandler from "../ui/settings/settings-gamepad-ui-handler";
|
||
|
import {Mode} from "../ui/ui";
|
||
|
import {truncateString} from "../utils";
|
||
|
import {Button} from "../enums/buttons";
|
||
|
import {SettingKeyboard} from "#app/system/settings-keyboard";
|
||
|
|
||
|
export enum SettingGamepad {
|
||
|
Controller = "CONTROLLER",
|
||
|
Gamepad_Support = "GAMEPAD_SUPPORT",
|
||
|
Button_Up = "BUTTON_UP",
|
||
|
Button_Down = "BUTTON_DOWN",
|
||
|
Button_Left = "BUTTON_LEFT",
|
||
|
Button_Right = "BUTTON_RIGHT",
|
||
|
Button_Action = "BUTTON_ACTION",
|
||
|
Button_Cancel = "BUTTON_CANCEL",
|
||
|
Button_Menu = "BUTTON_MENU",
|
||
|
Button_Stats = "BUTTON_STATS",
|
||
|
Button_Cycle_Form = "BUTTON_CYCLE_FORM",
|
||
|
Button_Cycle_Shiny = "BUTTON_CYCLE_SHINY",
|
||
|
Button_Cycle_Gender = "BUTTON_CYCLE_GENDER",
|
||
|
Button_Cycle_Ability = "BUTTON_CYCLE_ABILITY",
|
||
|
Button_Cycle_Nature = "BUTTON_CYCLE_NATURE",
|
||
|
Button_Cycle_Variant = "BUTTON_CYCLE_VARIANT",
|
||
|
Button_Speed_Up = "BUTTON_SPEED_UP",
|
||
|
Button_Slow_Down = "BUTTON_SLOW_DOWN",
|
||
|
Button_Submit = "BUTTON_SUBMIT",
|
||
|
}
|
||
|
|
||
|
export const settingGamepadOptions: SettingOptions = {
|
||
|
[SettingGamepad.Controller]: ["Default", "Change"],
|
||
|
[SettingGamepad.Gamepad_Support]: ["Auto", "Disabled"],
|
||
|
[SettingGamepad.Button_Up]: [`KEY ${Button.UP.toString()}`, "Press action to assign"],
|
||
|
[SettingGamepad.Button_Down]: [`KEY ${Button.DOWN.toString()}`, "Press action to assign"],
|
||
|
[SettingGamepad.Button_Left]: [`KEY ${Button.LEFT.toString()}`, "Press action to assign"],
|
||
|
[SettingGamepad.Button_Right]: [`KEY ${Button.RIGHT.toString()}`, "Press action to assign"],
|
||
|
[SettingGamepad.Button_Action]: [`KEY ${Button.ACTION.toString()}`, "Press action to assign"],
|
||
|
[SettingGamepad.Button_Cancel]: [`KEY ${Button.CANCEL.toString()}`, "Press action to assign"],
|
||
|
[SettingGamepad.Button_Menu]: [`KEY ${Button.MENU.toString()}`, "Press action to assign"],
|
||
|
[SettingGamepad.Button_Stats]: [`KEY ${Button.STATS.toString()}`, "Press action to assign"],
|
||
|
[SettingGamepad.Button_Cycle_Form]: [`KEY ${Button.CYCLE_FORM.toString()}`, "Press action to assign"],
|
||
|
[SettingGamepad.Button_Cycle_Shiny]: [`KEY ${Button.CYCLE_SHINY.toString()}`, "Press action to assign"],
|
||
|
[SettingGamepad.Button_Cycle_Gender]: [`KEY ${Button.CYCLE_GENDER.toString()}`, "Press action to assign"],
|
||
|
[SettingGamepad.Button_Cycle_Ability]: [`KEY ${Button.CYCLE_ABILITY.toString()}`, "Press action to assign"],
|
||
|
[SettingGamepad.Button_Cycle_Nature]: [`KEY ${Button.CYCLE_NATURE.toString()}`, "Press action to assign"],
|
||
|
[SettingGamepad.Button_Cycle_Variant]: [`KEY ${Button.V.toString()}`, "Press action to assign"],
|
||
|
[SettingGamepad.Button_Speed_Up]: [`KEY ${Button.SPEED_UP.toString()}`, "Press action to assign"],
|
||
|
[SettingGamepad.Button_Slow_Down]: [`KEY ${Button.SLOW_DOWN.toString()}`, "Press action to assign"],
|
||
|
[SettingGamepad.Button_Submit]: [`KEY ${Button.SUBMIT.toString()}`, "Press action to assign"],
|
||
|
};
|
||
|
|
||
|
export const settingGamepadDefaults: SettingDefaults = {
|
||
|
[SettingGamepad.Controller]: 0,
|
||
|
[SettingGamepad.Gamepad_Support]: 0,
|
||
|
[SettingGamepad.Button_Up]: 0,
|
||
|
[SettingGamepad.Button_Down]: 0,
|
||
|
[SettingGamepad.Button_Left]: 0,
|
||
|
[SettingGamepad.Button_Right]: 0,
|
||
|
[SettingGamepad.Button_Action]: 0,
|
||
|
[SettingGamepad.Button_Cancel]: 0,
|
||
|
[SettingGamepad.Button_Menu]: 0,
|
||
|
[SettingGamepad.Button_Stats]: 0,
|
||
|
[SettingGamepad.Button_Cycle_Form]: 0,
|
||
|
[SettingGamepad.Button_Cycle_Shiny]: 0,
|
||
|
[SettingGamepad.Button_Cycle_Gender]: 0,
|
||
|
[SettingGamepad.Button_Cycle_Ability]: 0,
|
||
|
[SettingGamepad.Button_Cycle_Nature]: 0,
|
||
|
[SettingGamepad.Button_Cycle_Variant]: 0,
|
||
|
[SettingGamepad.Button_Speed_Up]: 0,
|
||
|
[SettingGamepad.Button_Slow_Down]: 0,
|
||
|
[SettingGamepad.Button_Submit]: 0,
|
||
|
};
|
||
|
|
||
|
export const settingGamepadBlackList = [
|
||
|
SettingKeyboard.Button_Up,
|
||
|
SettingKeyboard.Button_Down,
|
||
|
SettingKeyboard.Button_Left,
|
||
|
SettingKeyboard.Button_Right,
|
||
|
];
|
||
|
|
||
|
export function setSettingGamepad(scene: BattleScene, setting: SettingGamepad, value: integer): boolean {
|
||
|
switch (setting) {
|
||
|
case SettingGamepad.Gamepad_Support:
|
||
|
// if we change the value of the gamepad support, we call a method in the inputController to
|
||
|
// activate or deactivate the controller listener
|
||
|
scene.inputController.setGamepadSupport(settingGamepadOptions[setting][value] !== "Disabled");
|
||
|
break;
|
||
|
case SettingGamepad.Button_Action:
|
||
|
case SettingGamepad.Button_Cancel:
|
||
|
case SettingGamepad.Button_Menu:
|
||
|
case SettingGamepad.Button_Stats:
|
||
|
case SettingGamepad.Button_Cycle_Shiny:
|
||
|
case SettingGamepad.Button_Cycle_Form:
|
||
|
case SettingGamepad.Button_Cycle_Gender:
|
||
|
case SettingGamepad.Button_Cycle_Ability:
|
||
|
case SettingGamepad.Button_Cycle_Nature:
|
||
|
case SettingGamepad.Button_Cycle_Variant:
|
||
|
case SettingGamepad.Button_Speed_Up:
|
||
|
case SettingGamepad.Button_Slow_Down:
|
||
|
case SettingGamepad.Button_Submit:
|
||
|
if (value) {
|
||
|
if (scene.ui) {
|
||
|
const cancelHandler = (success: boolean = false) : boolean => {
|
||
|
scene.ui.revertMode();
|
||
|
(scene.ui.getHandler() as SettingsGamepadUiHandler).updateBindings();
|
||
|
return success;
|
||
|
};
|
||
|
scene.ui.setOverlayMode(Mode.GAMEPAD_BINDING, {
|
||
|
target: setting,
|
||
|
cancelHandler: cancelHandler,
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case SettingGamepad.Controller:
|
||
|
if (value) {
|
||
|
const gp = scene.inputController.getGamepadsName();
|
||
|
if (scene.ui && gp) {
|
||
|
const cancelHandler = () => {
|
||
|
scene.ui.revertMode();
|
||
|
(scene.ui.getHandler() as SettingsGamepadUiHandler).setOptionCursor(Object.values(SettingGamepad).indexOf(SettingGamepad.Controller), 0, true);
|
||
|
(scene.ui.getHandler() as SettingsGamepadUiHandler).updateBindings();
|
||
|
return false;
|
||
|
};
|
||
|
const changeGamepadHandler = (gamepad: string) => {
|
||
|
scene.inputController.setChosenGamepad(gamepad);
|
||
|
cancelHandler();
|
||
|
return true;
|
||
|
};
|
||
|
scene.ui.setOverlayMode(Mode.OPTION_SELECT, {
|
||
|
options: [...gp.map((g: string) => ({
|
||
|
label: truncateString(g, 30), // Truncate the gamepad name for display
|
||
|
handler: () => changeGamepadHandler(g)
|
||
|
})), {
|
||
|
label: "Cancel",
|
||
|
handler: cancelHandler,
|
||
|
}]
|
||
|
});
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|