mirror of
https://github.com/AkiChase/scrcpy-mask
synced 2025-02-23 07:22:17 +08:00
feat(hotkey+KeyBoard): add TriggerWhenDoublePressedSkill
This commit is contained in:
parent
23c6593d44
commit
1385477bfe
@ -292,7 +292,9 @@ onBeforeRouteLeave(() => {
|
|||||||
v-else-if="
|
v-else-if="
|
||||||
store.editKeyMappingList[index].type === 'DirectionalSkill' ||
|
store.editKeyMappingList[index].type === 'DirectionalSkill' ||
|
||||||
store.editKeyMappingList[index].type === 'DirectionlessSkill' ||
|
store.editKeyMappingList[index].type === 'DirectionlessSkill' ||
|
||||||
store.editKeyMappingList[index].type === 'TriggerWhenPressedSkill'
|
store.editKeyMappingList[index].type === 'TriggerWhenPressedSkill' ||
|
||||||
|
store.editKeyMappingList[index].type ===
|
||||||
|
'TriggerWhenDoublePressedSkill'
|
||||||
"
|
"
|
||||||
:index="index"
|
:index="index"
|
||||||
/>
|
/>
|
||||||
|
@ -85,21 +85,32 @@ const isTriggerWhenPressed = computed(
|
|||||||
() => keyMapping.value.type === "TriggerWhenPressedSkill"
|
() => keyMapping.value.type === "TriggerWhenPressedSkill"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const isTriggerWhenDoublePressed = computed(
|
||||||
|
() => keyMapping.value.type === "TriggerWhenDoublePressedSkill"
|
||||||
|
);
|
||||||
|
|
||||||
function changeSkillType(flag: string) {
|
function changeSkillType(flag: string) {
|
||||||
// the design of skill keymapping type is not good
|
// the design of skill keymapping type is not good
|
||||||
const t = keyMapping.value.type;
|
const t = keyMapping.value.type;
|
||||||
if (flag === "direction") {
|
if (flag === "direction") {
|
||||||
keyboardStore.edited = true;
|
keyboardStore.edited = true;
|
||||||
if (t === "DirectionalSkill") {
|
if (t === "DirectionalSkill") {
|
||||||
|
// to DirectionlessSkill
|
||||||
delete (keyMapping.value as any).range;
|
delete (keyMapping.value as any).range;
|
||||||
keyMapping.value.type = "DirectionlessSkill";
|
keyMapping.value.type = "DirectionlessSkill";
|
||||||
} else if (t === "DirectionlessSkill") {
|
} else if (t === "DirectionlessSkill") {
|
||||||
|
// to DirectionalSkill
|
||||||
(keyMapping.value as any).range = 0;
|
(keyMapping.value as any).range = 0;
|
||||||
keyMapping.value.type = "DirectionalSkill";
|
keyMapping.value.type = "DirectionalSkill";
|
||||||
} else {
|
} else if (t === "TriggerWhenPressedSkill") {
|
||||||
|
// change directional flag
|
||||||
const k = keyMapping.value as KeyTriggerWhenPressedSkill;
|
const k = keyMapping.value as KeyTriggerWhenPressedSkill;
|
||||||
k.directional = !k.directional;
|
k.directional = !k.directional;
|
||||||
k.rangeOrTime = k.directional ? 0 : 80;
|
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") {
|
} else if (flag === "trigger") {
|
||||||
keyboardStore.edited = true;
|
keyboardStore.edited = true;
|
||||||
@ -114,7 +125,8 @@ function changeSkillType(flag: string) {
|
|||||||
k.directional = false;
|
k.directional = false;
|
||||||
k.rangeOrTime = 80; // touch time
|
k.rangeOrTime = 80; // touch time
|
||||||
k.type = "TriggerWhenPressedSkill";
|
k.type = "TriggerWhenPressedSkill";
|
||||||
} else {
|
} else if (t === "TriggerWhenPressedSkill") {
|
||||||
|
// to DirectionalSkill or DirectionlessSkill
|
||||||
const k = keyMapping.value as any;
|
const k = keyMapping.value as any;
|
||||||
if (k.directional) {
|
if (k.directional) {
|
||||||
k.range = k.rangeOrTime;
|
k.range = k.rangeOrTime;
|
||||||
@ -125,6 +137,35 @@ function changeSkillType(flag: string) {
|
|||||||
k.type = "DirectionlessSkill";
|
k.type = "DirectionlessSkill";
|
||||||
}
|
}
|
||||||
delete k.directional;
|
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) {
|
|||||||
<NH4 prefix="bar">技能</NH4>
|
<NH4 prefix="bar">技能</NH4>
|
||||||
<NFormItem label="选项">
|
<NFormItem label="选项">
|
||||||
<NFlex vertical>
|
<NFlex vertical>
|
||||||
|
<NCheckbox
|
||||||
|
@click="changeSkillType('trigger-double')"
|
||||||
|
:checked="isTriggerWhenDoublePressed"
|
||||||
|
>双击施放</NCheckbox
|
||||||
|
>
|
||||||
<NCheckbox
|
<NCheckbox
|
||||||
@click="changeSkillType('direction')"
|
@click="changeSkillType('direction')"
|
||||||
:checked="isDirectionless"
|
:checked="isDirectionless"
|
||||||
@ -230,7 +276,10 @@ function updateRangeIndicator(element?: HTMLElement) {
|
|||||||
</NFormItem>
|
</NFormItem>
|
||||||
<NFormItem v-if="!isDirectionless" label="范围">
|
<NFormItem v-if="!isDirectionless" label="范围">
|
||||||
<NInputNumber
|
<NInputNumber
|
||||||
v-if="keyMapping.type === 'DirectionalSkill'"
|
v-if="
|
||||||
|
keyMapping.type === 'DirectionalSkill' ||
|
||||||
|
'TriggerWhenDoublePressedSkill'
|
||||||
|
"
|
||||||
v-model:value="(keyMapping as KeyDirectionalSkill).range"
|
v-model:value="(keyMapping as KeyDirectionalSkill).range"
|
||||||
placeholder="请输入技能范围"
|
placeholder="请输入技能范围"
|
||||||
:min="0"
|
:min="0"
|
||||||
|
100
src/hotkey.ts
100
src/hotkey.ts
@ -15,6 +15,7 @@ import {
|
|||||||
KeyObservation,
|
KeyObservation,
|
||||||
KeySteeringWheel,
|
KeySteeringWheel,
|
||||||
KeyTap,
|
KeyTap,
|
||||||
|
KeyTriggerWhenDoublePressedSkill,
|
||||||
KeyTriggerWhenPressedSkill,
|
KeyTriggerWhenPressedSkill,
|
||||||
} from "./keyMappingConfig";
|
} from "./keyMappingConfig";
|
||||||
|
|
||||||
@ -336,6 +337,94 @@ function addTriggerWhenPressedSkillShortcuts(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function addTriggerWhenDoublePressedSkillShortcuts(
|
||||||
|
key: string,
|
||||||
|
relativeSize: { w: number; h: number },
|
||||||
|
// pos relative to the device
|
||||||
|
posX: number,
|
||||||
|
posY: number,
|
||||||
|
range: number,
|
||||||
|
pointerId: number
|
||||||
|
) {
|
||||||
|
posX = Math.round((posX / relativeSize.w) * screenSizeW);
|
||||||
|
posY = Math.round((posY / relativeSize.h) * screenSizeH);
|
||||||
|
let curKeyDownFlag = false;
|
||||||
|
addShortcut(
|
||||||
|
key,
|
||||||
|
// down
|
||||||
|
async () => {
|
||||||
|
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)
|
// add shortcuts for directionless skill (cancelable)
|
||||||
function addDirectionlessSkillShortcuts(
|
function addDirectionlessSkillShortcuts(
|
||||||
key: string,
|
key: string,
|
||||||
@ -1018,6 +1107,17 @@ function applyKeyMappingConfigShortcuts(
|
|||||||
item.pointerId
|
item.pointerId
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
case "TriggerWhenDoublePressedSkill":
|
||||||
|
asType<KeyTriggerWhenDoublePressedSkill>(item);
|
||||||
|
addTriggerWhenDoublePressedSkillShortcuts(
|
||||||
|
item.key,
|
||||||
|
relativeSize,
|
||||||
|
item.posX,
|
||||||
|
item.posY,
|
||||||
|
item.range,
|
||||||
|
item.pointerId
|
||||||
|
);
|
||||||
|
break;
|
||||||
case "Observation":
|
case "Observation":
|
||||||
asType<KeyObservation>(item);
|
asType<KeyObservation>(item);
|
||||||
addObservationShortcuts(
|
addObservationShortcuts(
|
||||||
|
@ -6,6 +6,7 @@ interface Key {
|
|||||||
| "CancelSkill"
|
| "CancelSkill"
|
||||||
| "Tap"
|
| "Tap"
|
||||||
| "TriggerWhenPressedSkill"
|
| "TriggerWhenPressedSkill"
|
||||||
|
| "TriggerWhenDoublePressedSkill"
|
||||||
| "Observation"
|
| "Observation"
|
||||||
| "Macro";
|
| "Macro";
|
||||||
note: string;
|
note: string;
|
||||||
@ -43,6 +44,11 @@ interface KeyTriggerWhenPressedSkill extends Key {
|
|||||||
rangeOrTime: number;
|
rangeOrTime: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface KeyTriggerWhenDoublePressedSkill extends Key {
|
||||||
|
key: string;
|
||||||
|
range: number;
|
||||||
|
}
|
||||||
|
|
||||||
interface KeyObservation extends Key {
|
interface KeyObservation extends Key {
|
||||||
key: string;
|
key: string;
|
||||||
scale: number;
|
scale: number;
|
||||||
@ -74,6 +80,7 @@ type KeyMapping =
|
|||||||
| KeyDirectionalSkill
|
| KeyDirectionalSkill
|
||||||
| KeyDirectionlessSkill
|
| KeyDirectionlessSkill
|
||||||
| KeyTriggerWhenPressedSkill
|
| KeyTriggerWhenPressedSkill
|
||||||
|
| KeyTriggerWhenDoublePressedSkill
|
||||||
| KeyObservation
|
| KeyObservation
|
||||||
| KeyMacro
|
| KeyMacro
|
||||||
| KeyCancelSkill
|
| KeyCancelSkill
|
||||||
@ -93,6 +100,7 @@ export type {
|
|||||||
KeyCancelSkill,
|
KeyCancelSkill,
|
||||||
KeyTap,
|
KeyTap,
|
||||||
KeyTriggerWhenPressedSkill,
|
KeyTriggerWhenPressedSkill,
|
||||||
|
KeyTriggerWhenDoublePressedSkill,
|
||||||
KeyObservation,
|
KeyObservation,
|
||||||
KeyMacro,
|
KeyMacro,
|
||||||
KeyMapping,
|
KeyMapping,
|
||||||
|
Loading…
Reference in New Issue
Block a user