Merge pull request #11 from AkiChase/dev

Scrcpy Mask v0.1.5
This commit is contained in:
如初 2024-05-05 20:05:05 +08:00 committed by GitHub
commit a4a665d639
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 173 additions and 16 deletions

View File

@ -1,7 +1,7 @@
{
"name": "scrcpy-mask",
"private": true,
"version": "0.1.4",
"version": "0.1.5",
"type": "module",
"scripts": {
"dev": "vite",
@ -12,7 +12,6 @@
},
"dependencies": {
"@tauri-apps/api": ">=2.0.0-beta.8",
"@tauri-apps/plugin-clipboard-manager": "2.1.0-beta.0",
"@tauri-apps/plugin-http": "2.0.0-beta.3",
"@tauri-apps/plugin-process": "2.0.0-beta.2",
"@tauri-apps/plugin-shell": "2.0.0-beta.3",

View File

@ -1,6 +1,6 @@
[package]
name = "scrcpy-mask"
version = "0.1.4"
version = "0.1.5"
description = "A Tauri App"
authors = ["AkiChase"]
edition = "2021"
@ -17,7 +17,6 @@ serde = { version = "1", features = ["derive"] }
serde_json = "1"
anyhow = "1.0"
tokio = { version = "1.36.0", features = ["rt-multi-thread", "net", "macros", "io-util", "time", "sync"] }
tauri-plugin-clipboard-manager = "2.1.0-beta.1"
tauri-plugin-process = "2.0.0-beta.3"
tauri-plugin-shell = "2.0.0-beta.4"
tauri-plugin-http = "2.0.0-beta.7"

View File

@ -22,8 +22,6 @@
"store:allow-clear",
"store:allow-entries",
"store:allow-delete",
"clipboard-manager:default",
"clipboard-manager:allow-write-text",
"process:default",
"process:allow-restart",
"webview:default",

View File

@ -1,3 +1,5 @@
[
{"list":[{"key":{"down":"KeyS","left":"KeyA","right":"KeyD","up":"KeyW"},"note":"方向轮盘","offset":175,"pointerId":1,"posX":180,"posY":560,"type":"SteeringWheel"},{"key":"KeyQ","note":"技能1","pointerId":2,"posX":950,"posY":610,"range":50,"type":"DirectionalSkill"},{"key":"AltLeft","note":"技能2","pointerId":2,"posX":1025,"posY":500,"range":50,"type":"DirectionalSkill"},{"key":"KeyE","note":"技能3","pointerId":2,"posX":1160,"posY":420,"range":50,"type":"DirectionalSkill"},{"directional":true,"key":"M4","note":"技能3","pointerId":2,"posX":1160,"posY":420,"rangeOrTime":0,"type":"TriggerWhenPressedSkill"},{"key":"M1","note":"无方向装备技能","pointerId":2,"posX":1150,"posY":280,"type":"DirectionlessSkill"},{"key":"Space","note":"取消技能","pointerId":2,"posX":1160,"posY":140,"type":"CancelSkill"},{"key":"KeyB","note":"回城","pointerId":3,"posX":650,"posY":650,"time":80,"type":"Tap"},{"key":"KeyC","note":"回复","pointerId":3,"posX":740,"posY":650,"time":80,"type":"Tap"},{"key":"KeyF","note":"召唤师技能","pointerId":2,"posX":840,"posY":650,"range":50,"type":"DirectionalSkill"},{"directional":false,"key":"ControlLeft","note":"无方向召唤师技能","pointerId":3,"posX":840,"posY":650,"rangeOrTime":80,"type":"TriggerWhenPressedSkill"},{"key":"M2","note":"攻击","pointerId":3,"posX":1165,"posY":620,"time":80,"type":"Tap"},{"key":"Digit1","note":"技能1升级","pointerId":3,"posX":880,"posY":560,"time":80,"type":"Tap"},{"key":"Digit2","note":"技能2升级","pointerId":3,"posX":960,"posY":430,"time":80,"type":"Tap"},{"key":"Digit3","note":"技能3升级","pointerId":3,"posX":1090,"posY":350,"time":80,"type":"Tap"},{"key":"Digit5","note":"快速购买1","pointerId":3,"posX":130,"posY":300,"time":80,"type":"Tap"},{"key":"Digit6","note":"快速购买2","pointerId":3,"posX":130,"posY":370,"time":80,"type":"Tap"},{"directional":false,"key":"WheelDown","note":"装备技能","pointerId":3,"posX":1150,"posY":280,"rangeOrTime":80,"type":"TriggerWhenPressedSkill"},{"key":"M3","note":"观察","pointerId":4,"posX":1000,"posY":200,"scale":0.5,"type":"Observation"},{"key":"Tab","macro":{"down":[{"args":["default",5,1185,40,80],"type":"touch"}],"loop":null,"up":[{"args":["default",5,1220,100,80],"type":"touch"}]},"note":"战绩面板","pointerId":5,"posX":1185,"posY":40,"type":"Macro"},{"key":"ShiftLeft","macro":{"down":[{"args":["default",5,40,300,80],"type":"touch"}],"loop":null,"up":[{"args":["default",5,1200,60,80],"type":"touch"}]},"note":"商店","pointerId":5,"posX":40,"posY":300,"type":"Macro"},{"key":"KeyZ","macro":{"down":[{"args":["default",5,250,230,80],"type":"touch"}],"loop":null,"up":[{"args":["default",5,640,150,80],"type":"touch"}]},"note":"地图","pointerId":5,"posX":250,"posY":230,"type":"Macro"}],"relativeSize":{"h":720,"w":1280},"title":"王者荣耀-暃"}
{"title":"AVD-王者荣耀-标准三技能-导入默认","list":[{"key":{"down":"KeyS","left":"KeyA","right":"KeyD","up":"KeyW"},"note":"方向轮盘","offset":175,"pointerId":1,"posX":183,"posY":566,"type":"SteeringWheel"},{"key":"KeyQ","note":"技能1","pointerId":2,"posX":951,"posY":636,"range":50,"type":"DirectionalSkill"},{"key":"KeyE","note":"技能2","pointerId":2,"posX":1025,"posY":500,"range":50,"type":"DirectionalSkill"},{"key":"AltLeft","note":"技能3","pointerId":2,"posX":1160,"posY":420,"range":50,"type":"DirectionalSkill"},{"key":"Space","note":"取消技能","pointerId":2,"posX":1160,"posY":140,"type":"CancelSkill"},{"key":"KeyB","note":"回城","pointerId":3,"posX":650,"posY":650,"time":80,"type":"Tap"},{"key":"KeyC","note":"回复","pointerId":3,"posX":740,"posY":650,"time":80,"type":"Tap"},{"key":"KeyF","note":"召唤师技能","pointerId":2,"posX":838,"posY":647,"range":50,"type":"DirectionalSkill"},{"key":"M2","note":"攻击","pointerId":3,"posX":1174,"posY":618,"time":80,"type":"Tap"},{"key":"Digit1","note":"技能1升级","pointerId":3,"posX":880,"posY":560,"time":80,"type":"Tap"},{"key":"Digit2","note":"技能2升级","pointerId":3,"posX":960,"posY":430,"time":80,"type":"Tap"},{"key":"Digit3","note":"技能3升级","pointerId":3,"posX":1090,"posY":350,"time":80,"type":"Tap"},{"key":"Digit5","note":"快速购买1","pointerId":3,"posX":133,"posY":289,"time":80,"type":"Tap"},{"key":"Digit6","note":"快速购买2","pointerId":3,"posX":130,"posY":370,"time":80,"type":"Tap"},{"key":"M3","note":"观察","pointerId":4,"posX":1000,"posY":200,"scale":1,"type":"Observation"},{"key":"Tab","macro":{"down":[{"args":["default",5,1185,40,80],"type":"touch"}],"loop":null,"up":[{"args":["default",5,1220,100,80],"type":"touch"}]},"note":"战绩面板","pointerId":5,"posX":1185,"posY":40,"type":"Macro"},{"key":"ShiftLeft","macro":{"down":[{"args":["default",5,40,300,80],"type":"touch"}],"loop":null,"up":[{"args":["default",5,1200,60,80],"type":"touch"}]},"note":"商店","pointerId":5,"posX":44,"posY":302,"type":"Macro"},{"key":"KeyZ","macro":{"down":[{"args":["default",5,250,230,80],"type":"touch"}],"loop":null,"up":[{"args":["default",5,640,150,80],"type":"touch"}]},"note":"地图","pointerId":5,"posX":250,"posY":230,"type":"Macro"},{"key":"WheelDown","note":"推塔键","pointerId":2,"posX":1228,"posY":513,"time":80,"type":"Tap"},{"key":"Backquote","macro":{"down":[{"args":["default",5,40,300,80],"type":"touch"},{"args":["200"],"type":"sleep"},{"args":["default",5,510,630,80],"type":"touch"},{"args":["default",5,1165,575,80],"type":"touch"},{"args":["default",5,1200,65,80],"type":"touch"},{"args":["300"],"type":"sleep"},{"args":["default",5,125,300,80],"type":"touch"}],"loop":null,"up":null},"note":"换装2","pointerId":5,"posX":236,"posY":66,"type":"Macro"},{"type":"Tap","key":"WheelUp","note":"补兵键","posX":1059,"posY":659,"pointerId":2,"time":80}],"relativeSize":{"h":720,"w":1280}},
{"title":"AVD-王者荣耀-标准四技能-导入默认","relativeSize":{"h":720,"w":1280},"list":[{"key":{"down":"KeyS","left":"KeyA","right":"KeyD","up":"KeyW"},"note":"方向轮盘","offset":175,"pointerId":1,"posX":183,"posY":566,"type":"SteeringWheel"},{"key":"KeyQ","note":"技能1","pointerId":2,"posX":952,"posY":636,"range":50,"type":"DirectionalSkill"},{"key":"KeyE","note":"技能2","pointerId":2,"posX":979,"posY":526,"range":50,"type":"DirectionalSkill"},{"key":"AltLeft","note":"技能3","pointerId":2,"posX":1074,"posY":438,"range":50,"type":"DirectionalSkill"},{"key":"Space","note":"取消技能","pointerId":2,"posX":1160,"posY":140,"type":"CancelSkill"},{"key":"KeyB","note":"回城","pointerId":3,"posX":644,"posY":650,"time":80,"type":"Tap"},{"key":"KeyC","note":"回复","pointerId":3,"posX":742,"posY":650,"time":80,"type":"Tap"},{"key":"KeyF","note":"召唤师技能","pointerId":2,"posX":838,"posY":647,"range":50,"type":"DirectionalSkill"},{"key":"M2","note":"攻击","pointerId":3,"posX":1179,"posY":621,"time":80,"type":"Tap"},{"key":"Digit1","note":"技能1升级","pointerId":3,"posX":895,"posY":564,"time":80,"type":"Tap"},{"key":"Digit2","note":"技能2升级","pointerId":3,"posX":922,"posY":456,"time":80,"type":"Tap"},{"key":"Digit3","note":"技能3升级","pointerId":3,"posX":1015,"posY":376,"time":80,"type":"Tap"},{"key":"Digit5","note":"快速购买1","pointerId":3,"posX":133,"posY":289,"time":80,"type":"Tap"},{"key":"Digit6","note":"快速购买2","pointerId":3,"posX":130,"posY":370,"time":80,"type":"Tap"},{"key":"M3","note":"观察","pointerId":4,"posX":1000,"posY":200,"scale":1,"type":"Observation"},{"key":"Tab","macro":{"down":[{"args":["default",5,1185,40,80],"type":"touch"}],"loop":null,"up":[{"args":["default",5,1220,100,80],"type":"touch"}]},"note":"战绩面板","pointerId":5,"posX":1185,"posY":40,"type":"Macro"},{"key":"ShiftLeft","macro":{"down":[{"args":["default",5,40,300,80],"type":"touch"}],"loop":null,"up":[{"args":["default",5,1200,60,80],"type":"touch"}]},"note":"商店","pointerId":5,"posX":44,"posY":302,"type":"Macro"},{"key":"KeyZ","macro":{"down":[{"args":["default",5,250,230,80],"type":"touch"}],"loop":null,"up":[{"args":["default",5,640,150,80],"type":"touch"}]},"note":"地图","pointerId":5,"posX":250,"posY":230,"type":"Macro"},{"key":"WheelDown","note":"推塔键","pointerId":2,"posX":1225,"posY":514,"time":80,"type":"Tap"},{"key":"Backquote","macro":{"down":[{"args":["default",5,40,300,80],"type":"touch"},{"args":["200"],"type":"sleep"},{"args":["default",5,510,630,80],"type":"touch"},{"args":["default",5,1165,575,80],"type":"touch"},{"args":["default",5,1200,65,80],"type":"touch"},{"args":["300"],"type":"sleep"},{"args":["default",5,125,300,80],"type":"touch"}],"loop":null,"up":null},"note":"换装2","pointerId":5,"posX":236,"posY":66,"type":"Macro"},{"type":"Tap","key":"WheelUp","note":"补兵键","posX":1058,"posY":655,"pointerId":2,"time":80},{"type":"DirectionalSkill","key":"KeyR","note":"","posX":1189,"posY":422,"pointerId":2,"range":50}]},
{"title":"AVD-王者荣耀-暃-导入默认","list":[{"key":{"down":"KeyS","left":"KeyA","right":"KeyD","up":"KeyW"},"note":"方向轮盘","offset":175,"pointerId":1,"posX":183,"posY":566,"type":"SteeringWheel"},{"key":"KeyQ","note":"技能1","pointerId":2,"posX":951,"posY":636,"range":50,"type":"DirectionalSkill"},{"key":"AltLeft","note":"技能2","pointerId":2,"posX":1025,"posY":500,"range":100,"type":"DirectionalSkill"},{"key":"KeyE","note":"技能3","pointerId":2,"posX":1160,"posY":420,"range":0,"type":"DirectionalSkill"},{"directional":false,"key":"WheelUp","note":"无方向装备技能","pointerId":2,"posX":1154,"posY":279,"rangeOrTime":80,"type":"TriggerWhenPressedSkill"},{"key":"Space","note":"取消技能","pointerId":2,"posX":1160,"posY":140,"type":"CancelSkill"},{"key":"KeyB","note":"回城","pointerId":3,"posX":650,"posY":650,"time":80,"type":"Tap"},{"key":"KeyC","note":"回复","pointerId":3,"posX":740,"posY":650,"time":80,"type":"Tap"},{"key":"KeyF","note":"召唤师技能","pointerId":2,"posX":840,"posY":650,"range":50,"type":"DirectionalSkill"},{"directional":false,"key":"ControlLeft","note":"无方向召唤师技能","pointerId":3,"posX":840,"posY":650,"rangeOrTime":80,"type":"TriggerWhenPressedSkill"},{"key":"M2","note":"攻击","pointerId":3,"posX":1165,"posY":616,"time":80,"type":"Tap"},{"key":"Digit1","note":"技能1升级","pointerId":3,"posX":880,"posY":560,"time":80,"type":"Tap"},{"key":"Digit2","note":"技能2升级","pointerId":3,"posX":960,"posY":430,"time":80,"type":"Tap"},{"key":"Digit3","note":"技能3升级","pointerId":3,"posX":1090,"posY":350,"time":80,"type":"Tap"},{"key":"Digit5","note":"快速购买1","pointerId":3,"posX":130,"posY":300,"time":80,"type":"Tap"},{"key":"Digit6","note":"快速购买2","pointerId":3,"posX":130,"posY":370,"time":80,"type":"Tap"},{"key":"M3","note":"观察","pointerId":4,"posX":1000,"posY":200,"scale":1,"type":"Observation"},{"key":"Tab","macro":{"down":[{"args":["default",5,1185,40,80],"type":"touch"}],"loop":null,"up":[{"args":["default",5,1220,100,80],"type":"touch"}]},"note":"战绩面板","pointerId":5,"posX":1185,"posY":40,"type":"Macro"},{"key":"ShiftLeft","macro":{"down":[{"args":["default",5,40,300,80],"type":"touch"}],"loop":null,"up":[{"args":["default",5,1200,60,80],"type":"touch"}]},"note":"商店","pointerId":5,"posX":44,"posY":302,"type":"Macro"},{"key":"KeyZ","macro":{"down":[{"args":["default",5,250,230,80],"type":"touch"}],"loop":null,"up":[{"args":["default",5,640,150,80],"type":"touch"}]},"note":"地图","pointerId":5,"posX":250,"posY":230,"type":"Macro"},{"directional":false,"key":"M4","note":"技能1","pointerId":2,"posX":949,"posY":635,"rangeOrTime":80,"type":"TriggerWhenPressedSkill"},{"key":"WheelDown","note":"推塔键","pointerId":2,"posX":1212,"posY":519,"time":80,"type":"Tap"},{"key":"Backquote","macro":{"down":[{"args":["default",5,40,300,80],"type":"touch"},{"args":["200"],"type":"sleep"},{"args":["default",5,510,630,80],"type":"touch"},{"args":["default",5,1165,575,80],"type":"touch"},{"args":["default",5,1200,65,80],"type":"touch"},{"args":["300"],"type":"sleep"},{"args":["default",5,125,300,80],"type":"touch"}],"loop":null,"up":null},"note":"换装2","pointerId":5,"posX":236,"posY":66,"type":"Macro"}],"relativeSize":{"h":720,"w":1280}}
]

View File

@ -145,7 +145,6 @@ async fn main() {
.plugin(tauri_plugin_http::init())
.plugin(tauri_plugin_shell::init())
.plugin(tauri_plugin_process::init())
.plugin(tauri_plugin_clipboard_manager::init())
.plugin(tauri_plugin_store::Builder::new().build())
.setup(|app| {
let stores = app

View File

@ -1,6 +1,6 @@
{
"productName": "scrcpy-mask",
"version": "0.1.4",
"version": "0.1.5",
"identifier": "com.akichase.mask",
"build": {
"beforeDevCommand": "pnpm dev",

View File

@ -78,6 +78,7 @@ function onAddButtonSelect(
up: "NONE",
down: "NONE",
};
(keyMapping as unknown as KeyMappingSteeringWheel).offset = 100;
} else if (type === "DirectionalSkill") {
(keyMapping as unknown as KeyDirectionalSkill).range = 30;
} else if (type === "CancelSkill") {
@ -292,7 +293,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"
/>

View File

@ -15,7 +15,6 @@ import {
import { computed, onActivated, onMounted, ref, watch } from "vue";
import { useGlobalStore } from "../../store/global";
import { Store } from "@tauri-apps/plugin-store";
import { writeText } from "@tauri-apps/plugin-clipboard-manager";
import { loadDefaultKeyconfig } from "../../invoke";
import { KeyMappingConfig } from "../../keyMappingConfig";
import { useKeyboardStore } from "../../store/keyboard";
@ -241,7 +240,8 @@ function renameKeyMappingConfig() {
function exportKeyMappingConfig() {
const config = store.keyMappingConfigList[store.curKeyMappingIndex];
const data = JSON.stringify(config, null, 2);
writeText(data)
navigator.clipboard
.writeText(data)
.then(() => {
message.success("当前按键方案已导出到剪切板");
})

View File

@ -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"

View File

@ -15,6 +15,7 @@ import {
KeyObservation,
KeySteeringWheel,
KeyTap,
KeyTriggerWhenDoublePressedSkill,
KeyTriggerWhenPressedSkill,
} from "./keyMappingConfig";
@ -44,7 +45,7 @@ function clientPosToSkillOffset(
clientPos: { x: number; y: number },
range: number
): { offsetX: number; offsetY: number } {
const maxLength = (100 / maskSizeH) * screenSizeH;
const maxLength = (120 / maskSizeH) * screenSizeH;
const centerX = maskSizeW * 0.5;
const centerY = maskSizeH * 0.5;
@ -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(

View File

@ -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,