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,