mirror of
https://github.com/AkiChase/scrcpy-mask
synced 2025-02-22 23:12:16 +08:00
feat(hotkey+KeyBoard): add TriggerWhenDoublePressedSkill
This commit is contained in:
parent
23c6593d44
commit
1385477bfe
@ -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"
|
||||
/>
|
||||
|
@ -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) {
|
||||
<NH4 prefix="bar">技能</NH4>
|
||||
<NFormItem label="选项">
|
||||
<NFlex vertical>
|
||||
<NCheckbox
|
||||
@click="changeSkillType('trigger-double')"
|
||||
:checked="isTriggerWhenDoublePressed"
|
||||
>双击施放</NCheckbox
|
||||
>
|
||||
<NCheckbox
|
||||
@click="changeSkillType('direction')"
|
||||
:checked="isDirectionless"
|
||||
@ -230,7 +276,10 @@ function updateRangeIndicator(element?: HTMLElement) {
|
||||
</NFormItem>
|
||||
<NFormItem v-if="!isDirectionless" label="范围">
|
||||
<NInputNumber
|
||||
v-if="keyMapping.type === 'DirectionalSkill'"
|
||||
v-if="
|
||||
keyMapping.type === 'DirectionalSkill' ||
|
||||
'TriggerWhenDoublePressedSkill'
|
||||
"
|
||||
v-model:value="(keyMapping as KeyDirectionalSkill).range"
|
||||
placeholder="请输入技能范围"
|
||||
:min="0"
|
||||
|
100
src/hotkey.ts
100
src/hotkey.ts
@ -15,6 +15,7 @@ import {
|
||||
KeyObservation,
|
||||
KeySteeringWheel,
|
||||
KeyTap,
|
||||
KeyTriggerWhenDoublePressedSkill,
|
||||
KeyTriggerWhenPressedSkill,
|
||||
} 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)
|
||||
function addDirectionlessSkillShortcuts(
|
||||
key: string,
|
||||
@ -1018,6 +1107,17 @@ function applyKeyMappingConfigShortcuts(
|
||||
item.pointerId
|
||||
);
|
||||
break;
|
||||
case "TriggerWhenDoublePressedSkill":
|
||||
asType<KeyTriggerWhenDoublePressedSkill>(item);
|
||||
addTriggerWhenDoublePressedSkillShortcuts(
|
||||
item.key,
|
||||
relativeSize,
|
||||
item.posX,
|
||||
item.posY,
|
||||
item.range,
|
||||
item.pointerId
|
||||
);
|
||||
break;
|
||||
case "Observation":
|
||||
asType<KeyObservation>(item);
|
||||
addObservationShortcuts(
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user