From 1385477bfef65b07e3224fb3428241b04abc1dd9 Mon Sep 17 00:00:00 2001 From: AkiChase <1003019131@qq.com> Date: Sun, 5 May 2024 19:24:50 +0800 Subject: [PATCH] feat(hotkey+KeyBoard): add TriggerWhenDoublePressedSkill --- src/components/keyboard/KeyBoard.vue | 4 +- src/components/keyboard/KeySkill.vue | 55 ++++++++++++++- src/hotkey.ts | 100 +++++++++++++++++++++++++++ src/keyMappingConfig.ts | 8 +++ 4 files changed, 163 insertions(+), 4 deletions(-) diff --git a/src/components/keyboard/KeyBoard.vue b/src/components/keyboard/KeyBoard.vue index 9ac8b08..abdab86 100644 --- a/src/components/keyboard/KeyBoard.vue +++ b/src/components/keyboard/KeyBoard.vue @@ -292,7 +292,9 @@ onBeforeRouteLeave(() => { v-else-if=" store.editKeyMappingList[index].type === 'DirectionalSkill' || store.editKeyMappingList[index].type === 'DirectionlessSkill' || - store.editKeyMappingList[index].type === 'TriggerWhenPressedSkill' + store.editKeyMappingList[index].type === 'TriggerWhenPressedSkill' || + store.editKeyMappingList[index].type === + 'TriggerWhenDoublePressedSkill' " :index="index" /> diff --git a/src/components/keyboard/KeySkill.vue b/src/components/keyboard/KeySkill.vue index f17be5f..a5682e7 100644 --- a/src/components/keyboard/KeySkill.vue +++ b/src/components/keyboard/KeySkill.vue @@ -85,21 +85,32 @@ const isTriggerWhenPressed = computed( () => keyMapping.value.type === "TriggerWhenPressedSkill" ); +const isTriggerWhenDoublePressed = computed( + () => keyMapping.value.type === "TriggerWhenDoublePressedSkill" +); + function changeSkillType(flag: string) { // the design of skill keymapping type is not good const t = keyMapping.value.type; if (flag === "direction") { keyboardStore.edited = true; if (t === "DirectionalSkill") { + // to DirectionlessSkill delete (keyMapping.value as any).range; keyMapping.value.type = "DirectionlessSkill"; } else if (t === "DirectionlessSkill") { + // to DirectionalSkill (keyMapping.value as any).range = 0; keyMapping.value.type = "DirectionalSkill"; - } else { + } else if (t === "TriggerWhenPressedSkill") { + // change directional flag const k = keyMapping.value as KeyTriggerWhenPressedSkill; k.directional = !k.directional; k.rangeOrTime = k.directional ? 0 : 80; + } else if (t === "TriggerWhenDoublePressedSkill") { + // to DirectionlessSkill + delete (keyMapping.value as any).range; + keyMapping.value.type = "DirectionlessSkill"; } } else if (flag === "trigger") { keyboardStore.edited = true; @@ -114,7 +125,8 @@ function changeSkillType(flag: string) { k.directional = false; k.rangeOrTime = 80; // touch time k.type = "TriggerWhenPressedSkill"; - } else { + } else if (t === "TriggerWhenPressedSkill") { + // to DirectionalSkill or DirectionlessSkill const k = keyMapping.value as any; if (k.directional) { k.range = k.rangeOrTime; @@ -125,6 +137,35 @@ function changeSkillType(flag: string) { k.type = "DirectionlessSkill"; } delete k.directional; + } else if (t === "TriggerWhenDoublePressedSkill") { + // to TriggerWhenPressedSkill && directional + const k = keyMapping.value as any; + k.directional = true; + k.rangeOrTime = k.range; + delete k.range; + k.type = "TriggerWhenPressedSkill"; + } + } else if (flag === "trigger-double") { + keyboardStore.edited = true; + if (t === "DirectionalSkill") { + // to TriggerWhenDoublePressedSkill + const k = keyMapping.value as any; + k.type = "TriggerWhenDoublePressedSkill"; + } else if (t === "DirectionlessSkill") { + // to TriggerWhenDoublePressedSkill + const k = keyMapping.value as any; + k.range = 0; + k.type = "TriggerWhenDoublePressedSkill"; + } else if (t === "TriggerWhenPressedSkill") { + // to TriggerWhenDoublePressedSkill + const k = keyMapping.value as any; + k.range = k.directional ? k.rangeOrTime : 0; + delete k.rangeOrTime; + k.type = "TriggerWhenDoublePressedSkill"; + } else if (t === "TriggerWhenDoublePressedSkill") { + // to DirectionalSkill + const k = keyMapping.value as any; + k.type = "DirectionalSkill"; } } } @@ -216,6 +257,11 @@ function updateRangeIndicator(element?: HTMLElement) { 技能 + 双击施放 { + if (curKeyDownFlag === false) { + // first press: touch down + const skillOffset = clientPosToSkillOffset( + { x: mouseX, y: mouseY }, + range + ); + await swipe({ + action: SwipeAction.NoUp, + pointerId, + screen: { + w: screenSizeW, + h: screenSizeH, + }, + pos: [ + { x: posX, y: posY }, + { + x: posX + skillOffset.offsetX, + y: posY + skillOffset.offsetY, + }, + ], + intervalBetweenPos: 0, + }); + // set the flag to true + curKeyDownFlag = true; + // add loop CB + loopDownKeyCBMap.set(key, async () => { + const loopSkillOffset = clientPosToSkillOffset( + { x: mouseX, y: mouseY }, + range + ); + await touch({ + action: TouchAction.Move, + pointerId, + screen: { + w: screenSizeW, + h: screenSizeH, + }, + pos: { + x: posX + loopSkillOffset.offsetX, + y: posY + loopSkillOffset.offsetY, + }, + }); + }); + } else { + // second press: touch up + // delete the loop CB + loopDownKeyCBMap.delete(key); + const skillOffset = clientPosToSkillOffset( + { x: mouseX, y: mouseY }, + range + ); + await touch({ + action: TouchAction.Up, + pointerId, + screen: { + w: screenSizeW, + h: screenSizeH, + }, + pos: { + x: posX + skillOffset.offsetX, + y: posY + skillOffset.offsetY, + }, + }); + // set the flag to false + curKeyDownFlag = false; + } + }, + undefined, + undefined + ); +} + // add shortcuts for directionless skill (cancelable) function addDirectionlessSkillShortcuts( key: string, @@ -1018,6 +1107,17 @@ function applyKeyMappingConfigShortcuts( item.pointerId ); break; + case "TriggerWhenDoublePressedSkill": + asType(item); + addTriggerWhenDoublePressedSkillShortcuts( + item.key, + relativeSize, + item.posX, + item.posY, + item.range, + item.pointerId + ); + break; case "Observation": asType(item); addObservationShortcuts( diff --git a/src/keyMappingConfig.ts b/src/keyMappingConfig.ts index b1eb7eb..43e0d42 100644 --- a/src/keyMappingConfig.ts +++ b/src/keyMappingConfig.ts @@ -6,6 +6,7 @@ interface Key { | "CancelSkill" | "Tap" | "TriggerWhenPressedSkill" + | "TriggerWhenDoublePressedSkill" | "Observation" | "Macro"; note: string; @@ -43,6 +44,11 @@ interface KeyTriggerWhenPressedSkill extends Key { rangeOrTime: number; } +interface KeyTriggerWhenDoublePressedSkill extends Key { + key: string; + range: number; +} + interface KeyObservation extends Key { key: string; scale: number; @@ -74,6 +80,7 @@ type KeyMapping = | KeyDirectionalSkill | KeyDirectionlessSkill | KeyTriggerWhenPressedSkill + | KeyTriggerWhenDoublePressedSkill | KeyObservation | KeyMacro | KeyCancelSkill @@ -93,6 +100,7 @@ export type { KeyCancelSkill, KeyTap, KeyTriggerWhenPressedSkill, + KeyTriggerWhenDoublePressedSkill, KeyObservation, KeyMacro, KeyMapping,