diff --git a/src/configs/gamepad-utils.ts b/src/configs/gamepad-utils.ts index 514e906c9..70e0c0d28 100644 --- a/src/configs/gamepad-utils.ts +++ b/src/configs/gamepad-utils.ts @@ -84,15 +84,17 @@ export function swapCurrentKeys(config: InterfaceConfig, settingName, pressedBut if (newBind && previousBind.action === -1) { //special case when rebinding deleted key with already assigned key const toRestore = deepCopy(newBind); + const iconFromThePressedButton = config.ogIcons[prevKey.key]; config.custom[newBind.key] = prevKey.from.action; - config.icons[prevKey.key] = newBind.icon; + config.icons[prevKey.key] = newBind.icon || iconFromThePressedButton; config.icons[newBind.key] = prevKey.from.icon; delete prevKey.from; const nextSettingName = getKeyAndSettingNameFromCurrentKeysWithAction(config, newBind.action, newBind.isAlt).settingName; - config.currentKeys[nextSettingName].from = toRestore; + config.currentKeys[nextSettingName].from = toRestore.action === -1 ? config.currentKeys[nextSettingName].from : toRestore; config.currentKeys[nextSettingName].isDeleted = true; + config.currentKeys[settingName].isDeleted = false; config.currentKeys[settingName].replacedBy = toRestore.key; } else if (!newBind) { assignNewKey(config, settingName, pressedButton, previousBind); @@ -160,6 +162,8 @@ export function regenerateCustom(config): void { custom[latestReplacedBy] = action; } else if (!latestIsDeleted) { custom[key] = action; + } else if (latestIsDeleted) { + custom[key] = -1; } } config.custom = deepCopy(custom); diff --git a/src/test/keyboard_remaping.test.ts b/src/test/keyboard_remaping.test.ts index ccdbd6a33..284adb2ca 100644 --- a/src/test/keyboard_remaping.test.ts +++ b/src/test/keyboard_remaping.test.ts @@ -590,4 +590,42 @@ describe('Test Keyboard', () => { expect(config.custom["KEY_D"]).toEqual(Button.RIGHT); }) + it('by method: Delete 2 binds, than rebind one of them', () => { + + expect(config.currentKeys[SettingInterfaceKeyboard.Alt_Button_Up].key).toEqual("KEY_Z"); + expect(config.currentKeys[SettingInterfaceKeyboard.Alt_Button_Up].action).toEqual(Button.UP); + expect(config.currentKeys[SettingInterfaceKeyboard.Alt_Button_Up].icon).toEqual("T_Z_Key_Dark.png"); + expect(config.custom["KEY_Z"]).toEqual(Button.UP); + deleteBind(config, SettingInterfaceKeyboard.Alt_Button_Up); + expect(config.currentKeys[SettingInterfaceKeyboard.Alt_Button_Up].key).toEqual("KEY_Z"); + expect(config.currentKeys[SettingInterfaceKeyboard.Alt_Button_Up].action).toEqual(-1); + expect(config.currentKeys[SettingInterfaceKeyboard.Alt_Button_Up].icon).toEqual(undefined); + expect(config.custom["KEY_Z"]).toEqual(-1); + + + + expect(config.currentKeys[SettingInterfaceKeyboard.Alt_Button_Down].key).toEqual("KEY_S"); + expect(config.currentKeys[SettingInterfaceKeyboard.Alt_Button_Down].action).toEqual(Button.DOWN); + expect(config.currentKeys[SettingInterfaceKeyboard.Alt_Button_Down].icon).toEqual("T_S_Key_Dark.png"); + expect(config.custom["KEY_S"]).toEqual(Button.DOWN); + deleteBind(config, SettingInterfaceKeyboard.Alt_Button_Down); + expect(config.currentKeys[SettingInterfaceKeyboard.Alt_Button_Down].key).toEqual("KEY_S"); + expect(config.currentKeys[SettingInterfaceKeyboard.Alt_Button_Down].action).toEqual(-1); + expect(config.currentKeys[SettingInterfaceKeyboard.Alt_Button_Down].icon).toEqual(undefined); + expect(config.custom["KEY_S"]).toEqual(-1); + + + swapCurrentKeys(config, SettingInterfaceKeyboard.Alt_Button_Up, Phaser.Input.Keyboard.KeyCodes.Z); + expect(config.currentKeys[SettingInterfaceKeyboard.Alt_Button_Up].key).toEqual("KEY_Z"); + expect(config.currentKeys[SettingInterfaceKeyboard.Alt_Button_Up].action).toEqual(Button.UP); + expect(config.currentKeys[SettingInterfaceKeyboard.Alt_Button_Up].icon).toEqual("T_Z_Key_Dark.png"); + expect(config.custom["KEY_Z"]).toEqual(Button.UP); + + expect(config.currentKeys[SettingInterfaceKeyboard.Alt_Button_Down].key).toEqual("KEY_S"); + expect(config.currentKeys[SettingInterfaceKeyboard.Alt_Button_Down].action).toEqual(-1); + expect(config.currentKeys[SettingInterfaceKeyboard.Alt_Button_Down].icon).toEqual(undefined); + expect(config.custom["KEY_S"]).toEqual(-1); + + }); + }); \ No newline at end of file