diff --git a/src/configs/configHandler.ts b/src/configs/configHandler.ts index 9ebfd326d21..4cd9dae498f 100644 --- a/src/configs/configHandler.ts +++ b/src/configs/configHandler.ts @@ -111,9 +111,8 @@ export function getIconForLatestInput(configs, source, devices, settingName) { export function assign(config, settingNameTarget, keycode): boolean { // first, we need to check if this keycode is already used on another settingName + if (!canIAssignThisKey(config, getKeyWithKeycode(config, keycode)) || !canIOverrideThisSetting(config, settingNameTarget)) return false; const previousSettingName = getSettingNameWithKeycode(config, keycode); - const key = getKeyWithSettingName(config, previousSettingName); - if (!canIAssignThisKey(config, key) || ! canIOverrideThisSetting(config, settingNameTarget)) return false; // if it was already bound, we delete the bind if (previousSettingName) { const previousKey = getKeyWithSettingName(config, previousSettingName); @@ -157,8 +156,9 @@ export function deleteBind(config, settingName) { export function canIAssignThisKey(config, key) { const settingName = getSettingNameWithKey(config, key); + if (config.blacklist?.includes(key)) return false; if (settingName === -1) return true; - if (config.blacklist?.includes(key) || isTheLatestBind(config, settingName)) return false; + if (isTheLatestBind(config, settingName)) return false; return true; } diff --git a/src/system/settings-gamepad.ts b/src/system/settings-gamepad.ts index b4208ae3c39..386ff8a0202 100644 --- a/src/system/settings-gamepad.ts +++ b/src/system/settings-gamepad.ts @@ -4,6 +4,7 @@ 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 { Default_Controller = "DEFAULT_CONTROLLER", @@ -71,6 +72,13 @@ export const settingGamepadDefaults: SettingDefaults = { [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: diff --git a/src/system/settings-keyboard.ts b/src/system/settings-keyboard.ts index 5de921420c9..2b2b0e32a17 100644 --- a/src/system/settings-keyboard.ts +++ b/src/system/settings-keyboard.ts @@ -118,6 +118,16 @@ export const settingKeyboardDefaults: SettingDefaults = { [SettingKeyboard.Alt_Button_Submit]: 0, }; +export const settingKeyboardBlackList = [ + SettingKeyboard.Button_Submit, + SettingKeyboard.Button_Menu, + SettingKeyboard.Button_Action, + SettingKeyboard.Button_Up, + SettingKeyboard.Button_Down, + SettingKeyboard.Button_Left, + SettingKeyboard.Button_Right, +]; + export function setSettingKeyboard(scene: BattleScene, setting: SettingKeyboard, value: integer): boolean { switch (setting) { diff --git a/src/test/cfg_keyboard.example.ts b/src/test/cfg_keyboard.example.ts index cf05cfd5c34..20e2bd2c5fb 100644 --- a/src/test/cfg_keyboard.example.ts +++ b/src/test/cfg_keyboard.example.ts @@ -322,7 +322,7 @@ const cfg_keyboard_azerty = { "KEY_ARROW_DOWN", "KEY_ARROW_LEFT", "KEY_ARROW_RIGHT", - "KEY_DELETE", + "KEY_DEL", "KEY_HOME", ] }; diff --git a/src/test/rebinding_setting.test.ts b/src/test/rebinding_setting.test.ts index f47a0780fb2..5c29f66727f 100644 --- a/src/test/rebinding_setting.test.ts +++ b/src/test/rebinding_setting.test.ts @@ -393,6 +393,7 @@ describe('Test Rebinding', () => { inGame.whenWePressOnKeyboard("RIGHT").weShouldTriggerTheButton("Button_Right"); inGame.whenWePressOnKeyboard("ESC").weShouldTriggerTheButton("Button_Menu"); inGame.whenWePressOnKeyboard("HOME").nothingShouldHappen(); + inGame.whenWePressOnKeyboard("DELETE").nothingShouldHappen(); inTheSettingMenu.whenCursorIsOnSetting("Button_Submit").iconDisplayedIs("KEY_ENTER").whenWeDelete().iconDisplayedIs("KEY_ENTER") inTheSettingMenu.whenCursorIsOnSetting("Button_Up").iconDisplayedIs("KEY_ARROW_UP").whenWeDelete().iconDisplayedIs("KEY_ARROW_UP") inTheSettingMenu.whenCursorIsOnSetting("Button_Down").iconDisplayedIs("KEY_ARROW_DOWN").whenWeDelete().iconDisplayedIs("KEY_ARROW_DOWN") @@ -400,6 +401,11 @@ describe('Test Rebinding', () => { inTheSettingMenu.whenCursorIsOnSetting("Button_Right").iconDisplayedIs("KEY_ARROW_RIGHT").whenWeDelete().iconDisplayedIs("KEY_ARROW_RIGHT") inTheSettingMenu.whenCursorIsOnSetting("Button_Menu").iconDisplayedIs("KEY_ESC").whenWeDelete().iconDisplayedIs("KEY_ESC") inTheSettingMenu.whenCursorIsOnSetting("Alt_Button_Up").iconDisplayedIs("KEY_Z").whenWeDelete().thereShouldBeNoIconAnymore(); + inTheSettingMenu.whenCursorIsOnSetting("Alt_Button_Up").thereShouldBeNoIcon().weWantThisBindInstead("DELETE").weCantAssignThisKey().butLetsForceIt(); + inTheSettingMenu.whenCursorIsOnSetting("Alt_Button_Up").thereShouldBeNoIcon().weWantThisBindInstead("HOME").weCantAssignThisKey().butLetsForceIt(); + inGame.whenWePressOnKeyboard("DELETE").nothingShouldHappen(); + inGame.whenWePressOnKeyboard("HOME").nothingShouldHappen(); + inGame.whenWePressOnKeyboard("Z").nothingShouldHappen(); }); it("check to delete all the binds of an action", () => { diff --git a/src/ui/settings/abstract-settings-ui-handler.ts b/src/ui/settings/abstract-settings-ui-handler.ts index c41ee2aa69f..2b78bb646dc 100644 --- a/src/ui/settings/abstract-settings-ui-handler.ts +++ b/src/ui/settings/abstract-settings-ui-handler.ts @@ -49,6 +49,7 @@ export default abstract class AbstractSettingsUiUiHandler extends UiHandler { protected bindingSettings: Array; protected settingDevice; + protected settingBlacklisted; protected settingDeviceDefaults; protected settingDeviceOptions; protected configs; @@ -160,7 +161,8 @@ export default abstract class AbstractSettingsUiUiHandler extends UiHandler { let settingName = setting.replace(/\_/g, ' '); // Create and add a text object for the setting name to the scene. - settingLabels[s] = addTextObject(this.scene, 8, 28 + s * 16, settingName, TextStyle.SETTINGS_LABEL); + const labelStyle = this.settingBlacklisted.includes(this.settingDevice[setting]) ? TextStyle.SETTINGS_LOCKED : TextStyle.SETTINGS_LABEL + settingLabels[s] = addTextObject(this.scene, 8, 28 + s * 16, settingName, labelStyle); settingLabels[s].setOrigin(0, 0); optionsContainer.add(settingLabels[s]); diff --git a/src/ui/settings/settings-gamepad-ui-handler.ts b/src/ui/settings/settings-gamepad-ui-handler.ts index fed424a2da3..2a7d55ddfea 100644 --- a/src/ui/settings/settings-gamepad-ui-handler.ts +++ b/src/ui/settings/settings-gamepad-ui-handler.ts @@ -1,7 +1,12 @@ import BattleScene from "../../battle-scene"; import {addTextObject, TextStyle} from "../text"; import {Mode} from "../ui"; -import {SettingGamepad, settingGamepadDefaults, settingGamepadOptions} from "../../system/settings-gamepad"; +import { + SettingGamepad, + settingGamepadBlackList, + settingGamepadDefaults, + settingGamepadOptions +} from "../../system/settings-gamepad"; import pad_xbox360 from "#app/configs/pad_xbox360"; import pad_dualshock from "#app/configs/pad_dualshock"; import pad_unlicensedSNES from "#app/configs/pad_unlicensedSNES"; @@ -33,6 +38,7 @@ export default class SettingsGamepadUiHandler extends AbstractSettingsUiUiHandle this.configs = [pad_xbox360, pad_dualshock, pad_unlicensedSNES] this.commonSettingsCount = 2; this.localStoragePropertyName = 'settingsGamepad'; + this.settingBlacklisted = settingGamepadBlackList; } /** diff --git a/src/ui/settings/settings-keyboard-ui-handler.ts b/src/ui/settings/settings-keyboard-ui-handler.ts index 347a39c805b..90ba9fe3a72 100644 --- a/src/ui/settings/settings-keyboard-ui-handler.ts +++ b/src/ui/settings/settings-keyboard-ui-handler.ts @@ -1,7 +1,12 @@ import BattleScene from "../../battle-scene"; import {Mode} from "../ui"; import cfg_keyboard_azerty from "#app/configs/cfg_keyboard_azerty"; -import {SettingKeyboard, settingKeyboardDefaults, settingKeyboardOptions} from "#app/system/settings-keyboard"; +import { + SettingKeyboard, + settingKeyboardBlackList, + settingKeyboardDefaults, + settingKeyboardOptions +} from "#app/system/settings-keyboard"; import {reverseValueToKeySetting, truncateString} from "#app/utils"; import AbstractSettingsUiUiHandler from "#app/ui/settings/abstract-settings-ui-handler"; import {InterfaceConfig} from "#app/inputs-controller"; @@ -31,6 +36,7 @@ export default class SettingsKeyboardUiHandler extends AbstractSettingsUiUiHandl this.commonSettingsCount = 1; this.textureOverride = 'keyboard'; this.localStoragePropertyName = 'settingsKeyboard'; + this.settingBlacklisted = settingKeyboardBlackList; const deleteEvent = scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.DELETE); deleteEvent.on('up', this.onDeleteDown, this); diff --git a/src/ui/text.ts b/src/ui/text.ts index d7ecd3b2526..dab37e17b99 100644 --- a/src/ui/text.ts +++ b/src/ui/text.ts @@ -23,6 +23,7 @@ export enum TextStyle { MONEY, SETTINGS_LABEL, SETTINGS_SELECTED, + SETTINGS_LOCKED, TOOLTIP_TITLE, TOOLTIP_CONTENT, MOVE_INFO_CONTENT @@ -89,6 +90,7 @@ function getTextStyleOptions(style: TextStyle, uiTheme: UiTheme, extraStyleOptio case TextStyle.WINDOW_ALT: case TextStyle.MESSAGE: case TextStyle.SETTINGS_LABEL: + case TextStyle.SETTINGS_LOCKED: case TextStyle.SETTINGS_SELECTED: styleOptions.fontSize = '96px'; break; @@ -166,6 +168,7 @@ export function getTextColor(textStyle: TextStyle, shadow?: boolean, uiTheme: Ui case TextStyle.SUMMARY_GOLD: case TextStyle.MONEY: return !shadow ? '#e8e8a8' : '#a0a060'; + case TextStyle.SETTINGS_LOCKED: case TextStyle.SUMMARY_GRAY: return !shadow ? '#a0a0a0' : '#636363'; case TextStyle.SUMMARY_GREEN: