From 84841a8d14608d41bad65f819377c4821077dc25 Mon Sep 17 00:00:00 2001 From: AkiChase <1003019131@qq.com> Date: Mon, 6 May 2024 09:12:43 +0800 Subject: [PATCH] fix(hotkey): double press skill conflict with other skill --- src/hotkey.ts | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/src/hotkey.ts b/src/hotkey.ts index df889fa..be6812e 100644 --- a/src/hotkey.ts +++ b/src/hotkey.ts @@ -252,7 +252,13 @@ function addCancelSkillShortcuts( loopDownKeyCBMap.delete(cancelAbleKey); upKeyCBMap.delete(cancelAbleKey); } - + // special case for double press skill + for (const [key, val] of doublePressedDownKey) { + if (val) { + loopDownKeyCBMap.delete(key); + doublePressedDownKey.set(key, false); + } + } let distance = 0; while (distance <= 20) { await touch({ @@ -308,6 +314,12 @@ function addTriggerWhenPressedSkillShortcuts( key, // down async () => { + // up doublepress skill + for (const [key, val] of doublePressedDownKey) { + if (val) { + downKeyCBMap.get(key)?.(); + } + } const skillOffset = clientPosToSkillOffset( { x: mouseX, y: mouseY }, rangeOrTime @@ -337,6 +349,8 @@ function addTriggerWhenPressedSkillShortcuts( } } +// add shortcuts for trigger when double pressed skill (cancelable, but in another way) +const doublePressedDownKey = new Map(); function addTriggerWhenDoublePressedSkillShortcuts( key: string, relativeSize: { w: number; h: number }, @@ -348,12 +362,12 @@ function addTriggerWhenDoublePressedSkillShortcuts( ) { posX = Math.round((posX / relativeSize.w) * screenSizeW); posY = Math.round((posY / relativeSize.h) * screenSizeH); - let curKeyDownFlag = false; + doublePressedDownKey.set(key, false); addShortcut( key, // down async () => { - if (curKeyDownFlag === false) { + if (doublePressedDownKey.get(key) === false) { // first press: touch down const skillOffset = clientPosToSkillOffset( { x: mouseX, y: mouseY }, @@ -376,7 +390,7 @@ function addTriggerWhenDoublePressedSkillShortcuts( intervalBetweenPos: 0, }); // set the flag to true - curKeyDownFlag = true; + doublePressedDownKey.set(key, true); // add loop CB loopDownKeyCBMap.set(key, async () => { const loopSkillOffset = clientPosToSkillOffset( @@ -417,7 +431,7 @@ function addTriggerWhenDoublePressedSkillShortcuts( }, }); // set the flag to false - curKeyDownFlag = false; + doublePressedDownKey.set(key, false); } }, undefined, @@ -440,6 +454,12 @@ function addDirectionlessSkillShortcuts( key, // down async () => { + // up doublepress skill + for (const [key, val] of doublePressedDownKey) { + if (val) { + downKeyCBMap.get(key)?.(); + } + } await touch({ action: TouchAction.Down, pointerId, @@ -490,6 +510,12 @@ function addDirectionalSkillShortcuts( key, // down async () => { + // up doublepress skill + for (const [key, val] of doublePressedDownKey) { + if (val) { + downKeyCBMap.get(key)?.(); + } + } const skillOffset = clientPosToSkillOffset( { x: mouseX, y: mouseY }, range