fix assign blacklisted key + locked setting greyed

This commit is contained in:
Greenlamp 2024-05-17 12:55:25 +02:00
parent 2217e33d02
commit 6f1e52ff22
9 changed files with 48 additions and 7 deletions

View File

@ -111,9 +111,8 @@ export function getIconForLatestInput(configs, source, devices, settingName) {
export function assign(config, settingNameTarget, keycode): boolean { export function assign(config, settingNameTarget, keycode): boolean {
// first, we need to check if this keycode is already used on another settingName // 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 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 it was already bound, we delete the bind
if (previousSettingName) { if (previousSettingName) {
const previousKey = getKeyWithSettingName(config, previousSettingName); const previousKey = getKeyWithSettingName(config, previousSettingName);
@ -157,8 +156,9 @@ export function deleteBind(config, settingName) {
export function canIAssignThisKey(config, key) { export function canIAssignThisKey(config, key) {
const settingName = getSettingNameWithKey(config, key); const settingName = getSettingNameWithKey(config, key);
if (config.blacklist?.includes(key)) return false;
if (settingName === -1) return true; if (settingName === -1) return true;
if (config.blacklist?.includes(key) || isTheLatestBind(config, settingName)) return false; if (isTheLatestBind(config, settingName)) return false;
return true; return true;
} }

View File

@ -4,6 +4,7 @@ import SettingsGamepadUiHandler from "../ui/settings/settings-gamepad-ui-handler
import {Mode} from "../ui/ui"; import {Mode} from "../ui/ui";
import {truncateString} from "../utils"; import {truncateString} from "../utils";
import {Button} from "../enums/buttons"; import {Button} from "../enums/buttons";
import {SettingKeyboard} from "#app/system/settings-keyboard";
export enum SettingGamepad { export enum SettingGamepad {
Default_Controller = "DEFAULT_CONTROLLER", Default_Controller = "DEFAULT_CONTROLLER",
@ -71,6 +72,13 @@ export const settingGamepadDefaults: SettingDefaults = {
[SettingGamepad.Button_Submit]: 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 { export function setSettingGamepad(scene: BattleScene, setting: SettingGamepad, value: integer): boolean {
switch (setting) { switch (setting) {
case SettingGamepad.Gamepad_Support: case SettingGamepad.Gamepad_Support:

View File

@ -118,6 +118,16 @@ export const settingKeyboardDefaults: SettingDefaults = {
[SettingKeyboard.Alt_Button_Submit]: 0, [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 { export function setSettingKeyboard(scene: BattleScene, setting: SettingKeyboard, value: integer): boolean {
switch (setting) { switch (setting) {

View File

@ -322,7 +322,7 @@ const cfg_keyboard_azerty = {
"KEY_ARROW_DOWN", "KEY_ARROW_DOWN",
"KEY_ARROW_LEFT", "KEY_ARROW_LEFT",
"KEY_ARROW_RIGHT", "KEY_ARROW_RIGHT",
"KEY_DELETE", "KEY_DEL",
"KEY_HOME", "KEY_HOME",
] ]
}; };

View File

@ -393,6 +393,7 @@ describe('Test Rebinding', () => {
inGame.whenWePressOnKeyboard("RIGHT").weShouldTriggerTheButton("Button_Right"); inGame.whenWePressOnKeyboard("RIGHT").weShouldTriggerTheButton("Button_Right");
inGame.whenWePressOnKeyboard("ESC").weShouldTriggerTheButton("Button_Menu"); inGame.whenWePressOnKeyboard("ESC").weShouldTriggerTheButton("Button_Menu");
inGame.whenWePressOnKeyboard("HOME").nothingShouldHappen(); inGame.whenWePressOnKeyboard("HOME").nothingShouldHappen();
inGame.whenWePressOnKeyboard("DELETE").nothingShouldHappen();
inTheSettingMenu.whenCursorIsOnSetting("Button_Submit").iconDisplayedIs("KEY_ENTER").whenWeDelete().iconDisplayedIs("KEY_ENTER") 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_Up").iconDisplayedIs("KEY_ARROW_UP").whenWeDelete().iconDisplayedIs("KEY_ARROW_UP")
inTheSettingMenu.whenCursorIsOnSetting("Button_Down").iconDisplayedIs("KEY_ARROW_DOWN").whenWeDelete().iconDisplayedIs("KEY_ARROW_DOWN") 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_Right").iconDisplayedIs("KEY_ARROW_RIGHT").whenWeDelete().iconDisplayedIs("KEY_ARROW_RIGHT")
inTheSettingMenu.whenCursorIsOnSetting("Button_Menu").iconDisplayedIs("KEY_ESC").whenWeDelete().iconDisplayedIs("KEY_ESC") 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").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", () => { it("check to delete all the binds of an action", () => {

View File

@ -49,6 +49,7 @@ export default abstract class AbstractSettingsUiUiHandler extends UiHandler {
protected bindingSettings: Array<String>; protected bindingSettings: Array<String>;
protected settingDevice; protected settingDevice;
protected settingBlacklisted;
protected settingDeviceDefaults; protected settingDeviceDefaults;
protected settingDeviceOptions; protected settingDeviceOptions;
protected configs; protected configs;
@ -160,7 +161,8 @@ export default abstract class AbstractSettingsUiUiHandler extends UiHandler {
let settingName = setting.replace(/\_/g, ' '); let settingName = setting.replace(/\_/g, ' ');
// Create and add a text object for the setting name to the scene. // 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); settingLabels[s].setOrigin(0, 0);
optionsContainer.add(settingLabels[s]); optionsContainer.add(settingLabels[s]);

View File

@ -1,7 +1,12 @@
import BattleScene from "../../battle-scene"; import BattleScene from "../../battle-scene";
import {addTextObject, TextStyle} from "../text"; import {addTextObject, TextStyle} from "../text";
import {Mode} from "../ui"; 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_xbox360 from "#app/configs/pad_xbox360";
import pad_dualshock from "#app/configs/pad_dualshock"; import pad_dualshock from "#app/configs/pad_dualshock";
import pad_unlicensedSNES from "#app/configs/pad_unlicensedSNES"; 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.configs = [pad_xbox360, pad_dualshock, pad_unlicensedSNES]
this.commonSettingsCount = 2; this.commonSettingsCount = 2;
this.localStoragePropertyName = 'settingsGamepad'; this.localStoragePropertyName = 'settingsGamepad';
this.settingBlacklisted = settingGamepadBlackList;
} }
/** /**

View File

@ -1,7 +1,12 @@
import BattleScene from "../../battle-scene"; import BattleScene from "../../battle-scene";
import {Mode} from "../ui"; import {Mode} from "../ui";
import cfg_keyboard_azerty from "#app/configs/cfg_keyboard_azerty"; 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 {reverseValueToKeySetting, truncateString} from "#app/utils";
import AbstractSettingsUiUiHandler from "#app/ui/settings/abstract-settings-ui-handler"; import AbstractSettingsUiUiHandler from "#app/ui/settings/abstract-settings-ui-handler";
import {InterfaceConfig} from "#app/inputs-controller"; import {InterfaceConfig} from "#app/inputs-controller";
@ -31,6 +36,7 @@ export default class SettingsKeyboardUiHandler extends AbstractSettingsUiUiHandl
this.commonSettingsCount = 1; this.commonSettingsCount = 1;
this.textureOverride = 'keyboard'; this.textureOverride = 'keyboard';
this.localStoragePropertyName = 'settingsKeyboard'; this.localStoragePropertyName = 'settingsKeyboard';
this.settingBlacklisted = settingKeyboardBlackList;
const deleteEvent = scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.DELETE); const deleteEvent = scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.DELETE);
deleteEvent.on('up', this.onDeleteDown, this); deleteEvent.on('up', this.onDeleteDown, this);

View File

@ -23,6 +23,7 @@ export enum TextStyle {
MONEY, MONEY,
SETTINGS_LABEL, SETTINGS_LABEL,
SETTINGS_SELECTED, SETTINGS_SELECTED,
SETTINGS_LOCKED,
TOOLTIP_TITLE, TOOLTIP_TITLE,
TOOLTIP_CONTENT, TOOLTIP_CONTENT,
MOVE_INFO_CONTENT MOVE_INFO_CONTENT
@ -89,6 +90,7 @@ function getTextStyleOptions(style: TextStyle, uiTheme: UiTheme, extraStyleOptio
case TextStyle.WINDOW_ALT: case TextStyle.WINDOW_ALT:
case TextStyle.MESSAGE: case TextStyle.MESSAGE:
case TextStyle.SETTINGS_LABEL: case TextStyle.SETTINGS_LABEL:
case TextStyle.SETTINGS_LOCKED:
case TextStyle.SETTINGS_SELECTED: case TextStyle.SETTINGS_SELECTED:
styleOptions.fontSize = '96px'; styleOptions.fontSize = '96px';
break; break;
@ -166,6 +168,7 @@ export function getTextColor(textStyle: TextStyle, shadow?: boolean, uiTheme: Ui
case TextStyle.SUMMARY_GOLD: case TextStyle.SUMMARY_GOLD:
case TextStyle.MONEY: case TextStyle.MONEY:
return !shadow ? '#e8e8a8' : '#a0a060'; return !shadow ? '#e8e8a8' : '#a0a060';
case TextStyle.SETTINGS_LOCKED:
case TextStyle.SUMMARY_GRAY: case TextStyle.SUMMARY_GRAY:
return !shadow ? '#a0a0a0' : '#636363'; return !shadow ? '#a0a0a0' : '#636363';
case TextStyle.SUMMARY_GREEN: case TextStyle.SUMMARY_GREEN: