feat(KeyBoard): add key modify

This commit is contained in:
AkiChase 2024-04-28 11:42:41 +08:00
parent 16752de2fc
commit cb35607b1b
2 changed files with 110 additions and 15 deletions

View File

@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref } from "vue"; import { onActivated, ref } from "vue";
import KeyInfo from "./KeyInfo.vue"; import KeyInfo from "./KeyInfo.vue";
import KeySetting from "./KeySetting.vue"; import KeySetting from "./KeySetting.vue";
import KeyCommon from "./KeyCommon.vue"; import KeyCommon from "./KeyCommon.vue";
@ -7,15 +7,15 @@ import { useGlobalStore } from "../../store/global";
import { useDialog } from "naive-ui"; import { useDialog } from "naive-ui";
import { onBeforeRouteLeave } from "vue-router"; import { onBeforeRouteLeave } from "vue-router";
// TODO KeyMacroKeyCancelSkillKeyTap
// KeyMacro
// TODO KeySteeringWheel // TODO KeySteeringWheel
// +offset // +offset
// TODO KeyDirectionalSkillKeyDirectionlessSkillKeyTriggerWhenPressedSkilldirectional) // TODO KeyDirectionalSkillKeyDirectionlessSkillKeyTriggerWhenPressedSkilldirectional)
// flagrangetime // flagrangetime
// TODO KeyObservation // TODO KeyObservation
// scale // scale
// TODO KeyMacroKeyCancelSkillKeyTap // TODO 齿
// KeyMacro
// TODO
// TODO // TODO
// TODO utools // TODO utools
// TODO // TODO
@ -26,22 +26,112 @@ const store = useGlobalStore();
const dialog = useDialog(); const dialog = useDialog();
const activeButtonIndex = ref(-1); const activeButtonIndex = ref(-1);
const activeSteeringWheelButtonKeyIndex = ref(-1);
let edited = ref(false); let edited = ref(false);
function handleClick(event: MouseEvent) { function setCurButtonKey(curKey: string) {
if ( const keyMapping = store.editKeyMappingList[activeButtonIndex.value];
event.button === 0 && if (keyMapping.type === "SteeringWheel") {
event.target === document.getElementById("keyboardElement") const keyObject = keyMapping.key as {
) { left: string;
if (showSettingFlag.value) { right: string;
showSettingFlag.value = false; up: string;
return; down: string;
};
switch (activeSteeringWheelButtonKeyIndex.value) {
case 0:
keyObject.up = curKey;
break;
case 1:
keyObject.down = curKey;
break;
case 2:
keyObject.left = curKey;
break;
case 3:
keyObject.right = curKey;
break;
} }
activeButtonIndex.value = -1; } else {
keyMapping.key = curKey;
} }
} }
function handleClick(event: MouseEvent) {
if (event.button === 0) {
// left click
if (event.target === document.getElementById("keyboardElement")) {
if (showSettingFlag.value) {
showSettingFlag.value = false;
return;
}
activeButtonIndex.value = -1;
}
} else if (event.button === 2) {
// right click
if (event.target === document.getElementById("keyboardElement")) {
// add button
if (showSettingFlag.value) showSettingFlag.value = false;
activeButtonIndex.value = -1;
console.log("弹出新增");
} else if (
// modify key
activeButtonIndex.value !== -1 &&
activeButtonIndex.value < store.editKeyMappingList.length
) {
event.preventDefault();
const curKey = `M${event.button}`;
setCurButtonKey(curKey);
}
} else {
// other click
if (
activeButtonIndex.value !== -1 &&
activeButtonIndex.value < store.editKeyMappingList.length
) {
event.preventDefault();
const curKey = `M${event.button}`;
setCurButtonKey(curKey);
}
}
}
function handleKeyUp(event: KeyboardEvent) {
if (
activeButtonIndex.value !== -1 &&
activeButtonIndex.value < store.editKeyMappingList.length
) {
event.preventDefault();
const curKey = event.code;
setCurButtonKey(curKey);
}
}
function handleMouseWheel(event: WheelEvent) {
if (
activeButtonIndex.value !== -1 &&
activeButtonIndex.value < store.editKeyMappingList.length
) {
event.preventDefault();
if (event.deltaY > 0) {
// WheelDown
setCurButtonKey("WheelDown");
} else if (event.deltaY < 0) {
// WheelUp
setCurButtonKey("WheelUp");
}
}
}
onActivated(() => {
document.addEventListener("keyup", handleKeyUp);
document.addEventListener("wheel", handleMouseWheel);
});
onBeforeRouteLeave(() => { onBeforeRouteLeave(() => {
document.removeEventListener("keyup", handleKeyUp);
document.removeEventListener("wheel", handleMouseWheel);
if (edited.value) { if (edited.value) {
dialog.warning({ dialog.warning({
title: "Warning", title: "Warning",
@ -62,7 +152,12 @@ onBeforeRouteLeave(() => {
</script> </script>
<template> <template>
<div id="keyboardElement" class="keyboard" @click="handleClick"> <div
id="keyboardElement"
class="keyboard"
@mousedown="handleClick"
@contextmenu.prevent
>
<KeySetting <KeySetting
v-model:showKeyInfoFlag="showKeyInfoFlag" v-model:showKeyInfoFlag="showKeyInfoFlag"
v-model:showSettingFlag="showSettingFlag" v-model:showSettingFlag="showSettingFlag"

View File

@ -63,7 +63,7 @@ function dragHandler(downEvent: MouseEvent) {
class="key-common" class="key-common"
ref="elementRef" ref="elementRef"
> >
{{ store.editKeyMappingList[props.index].key }} <span>{{ store.editKeyMappingList[props.index].key }}</span>
</div> </div>
</template> </template>