From 5c23ced8b58799e45f4651a089af84cedf903754 Mon Sep 17 00:00:00 2001 From: AkiChase <1003019131@qq.com> Date: Sat, 27 Apr 2024 09:43:16 +0800 Subject: [PATCH] feat(KeyBoard): import default key config --- src-tauri/resource/default-key-config.json | 1 + src-tauri/src/main.rs | 28 ++++++++++++++++++---- src-tauri/src/resource.rs | 2 ++ src/components/keyboard/KeyBoard.vue | 2 +- src/components/keyboard/KeySetting.vue | 24 ++++++++++++++++++- src/invoke.ts | 4 ++++ 6 files changed, 55 insertions(+), 6 deletions(-) create mode 100644 src-tauri/resource/default-key-config.json diff --git a/src-tauri/resource/default-key-config.json b/src-tauri/resource/default-key-config.json new file mode 100644 index 0000000..47bb2dc --- /dev/null +++ b/src-tauri/resource/default-key-config.json @@ -0,0 +1 @@ +[{"relativeSize":{"w":1280,"h":720},"title":"王者荣耀-暃","list":[{"type":"SteeringWheel","note":"方向轮盘","key":{"left":"KeyA","right":"KeyD","up":"KeyW","down":"KeyS"},"posX":180,"posY":560,"offset":100,"pointerId":1},{"type":"DirectionalSkill","note":"技能1","key":"KeyQ","posX":950,"posY":610,"range":200,"pointerId":2},{"type":"DirectionalSkill","note":"技能2","key":"AltLeft","posX":1025,"posY":500,"range":200,"pointerId":2},{"type":"DirectionalSkill","note":"技能3","key":"KeyE","posX":1160,"posY":420,"range":200,"pointerId":2},{"type":"TriggerWhenPressedSkill","note":"技能3","key":"M4","posX":1160,"posY":420,"directional":true,"rangeOrTime":0,"pointerId":2},{"type":"DirectionlessSkill","note":"无方向装备技能","key":"M1","posX":1150,"posY":280,"pointerId":2},{"type":"CancelSkill","note":"取消技能","key":"Space","posX":1160,"posY":140,"pointerId":2},{"type":"Tap","note":"回城","key":"KeyB","time":80,"posX":650,"posY":650,"pointerId":3},{"type":"Tap","note":"回复","key":"KeyC","time":80,"posX":740,"posY":650,"pointerId":3},{"type":"DirectionalSkill","note":"召唤师技能","key":"KeyF","posX":840,"posY":650,"range":200,"pointerId":2},{"type":"TriggerWhenPressedSkill","note":"无方向召唤师技能","key":"ControlLeft","posX":840,"posY":650,"directional":false,"rangeOrTime":80,"pointerId":3},{"type":"Tap","note":"攻击","key":"M2","time":80,"posX":1165,"posY":620,"pointerId":3},{"type":"Tap","note":"技能1升级","key":"Digit1","time":80,"posX":880,"posY":560,"pointerId":3},{"type":"Tap","note":"技能2升级","key":"Digit2","time":80,"posX":960,"posY":430,"pointerId":3},{"type":"Tap","note":"技能3升级","key":"Digit3","time":80,"posX":1090,"posY":350,"pointerId":3},{"type":"Tap","note":"快速购买1","key":"Digit5","time":80,"posX":130,"posY":300,"pointerId":3},{"type":"Tap","note":"快速购买2","key":"Digit6","time":80,"posX":130,"posY":370,"pointerId":3},{"type":"TriggerWhenPressedSkill","note":"装备技能","key":"WheelDown","posX":1150,"posY":280,"directional":false,"rangeOrTime":80,"pointerId":3},{"type":"Observation","note":"观察","key":"M3","posX":1000,"posY":200,"scale":0.5,"pointerId":4},{"type":"Macro","note":"战绩面板","key":"Tab","macro":{"down":[{"type":"touch","args":["default",5,1185,40,80]}],"loop":null,"up":[{"type":"touch","args":["default",5,1220,100,80]}]},"posX":1185,"posY":40,"pointerId":5},{"type":"Macro","note":"商店","key":"ShiftLeft","macro":{"down":[{"type":"touch","args":["default",5,40,300,80]}],"loop":null,"up":[{"type":"touch","args":["default",5,1200,60,80]}]},"posX":40,"posY":300,"pointerId":5},{"type":"Macro","note":"地图","key":"KeyZ","macro":{"down":[{"type":"touch","args":["default",5,250,230,80]}],"loop":null,"up":[{"type":"touch","args":["default",5,640,150,80]}]},"posX":250,"posY":230,"pointerId":5}]}] diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 3ce670a..6ffc4a3 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -4,10 +4,10 @@ use scrcpy_mask::{ adb::{Adb, Device}, client::ScrcpyClient, - resource::ResHelper, + resource::{ResHelper, ResourceName}, socket::connect_socket, }; -use std::sync::Arc; +use std::{fs::read_to_string, sync::Arc}; use tauri::Manager; #[tauri::command] @@ -108,6 +108,16 @@ fn start_scrcpy_server( Ok(()) } +#[tauri::command] +fn load_default_keyconfig(app: tauri::AppHandle) -> Result { + let dir = app.path().resource_dir().unwrap().join("resource"); + let file = ResHelper::get_file_path(&dir, ResourceName::DefaultKeyConfig); + match read_to_string(file) { + Ok(content) => Ok(content), + Err(e) => Err(e.to_string()), + } +} + #[tokio::main] async fn main() { tauri::Builder::default() @@ -141,7 +151,16 @@ async fn main() { })) .unwrap(); } - None => {} + None => { + let main_window: tauri::WebviewWindow = + app.get_webview_window("main").unwrap(); + main_window + .set_size(tauri::Size::Logical(tauri::LogicalSize { + width: (800 + 70) as f64, + height: (600 + 30) as f64, + })) + .unwrap(); + } } Ok(()) @@ -162,7 +181,8 @@ async fn main() { adb_devices, forward_server_port, push_server_file, - start_scrcpy_server + start_scrcpy_server, + load_default_keyconfig ]) .run(tauri::generate_context!()) .expect("error while running tauri application"); diff --git a/src-tauri/src/resource.rs b/src-tauri/src/resource.rs index 86caefc..46e6420 100644 --- a/src-tauri/src/resource.rs +++ b/src-tauri/src/resource.rs @@ -4,6 +4,7 @@ use std::path::PathBuf; pub enum ResourceName { Adb, ScrcpyServer, + DefaultKeyConfig } pub struct ResHelper { @@ -32,6 +33,7 @@ impl ResHelper { ResourceName::Adb => dir.join("adb"), ResourceName::ScrcpyServer => dir.join("scrcpy-server-v2.4"), + ResourceName::DefaultKeyConfig => dir.join("default-key-config.json"), } } diff --git a/src/components/keyboard/KeyBoard.vue b/src/components/keyboard/KeyBoard.vue index baa2936..b2e61be 100644 --- a/src/components/keyboard/KeyBoard.vue +++ b/src/components/keyboard/KeyBoard.vue @@ -5,8 +5,8 @@ import KeySetting from "./KeySetting.vue"; // TODO 右键空白区域添加按键 // TODO 左键可拖动按钮(并显示到顶部),右键按钮进行修改、删除 -// TODO 导入默认配置(重复的用新名称) // TODO 设置界面添加清空本地数据的按钮 +// TODO 添加开发者工具打开按钮 const keyInfoShowFlag = ref(false); diff --git a/src/components/keyboard/KeySetting.vue b/src/components/keyboard/KeySetting.vue index d3a924c..6d11965 100644 --- a/src/components/keyboard/KeySetting.vue +++ b/src/components/keyboard/KeySetting.vue @@ -15,6 +15,8 @@ import { import { computed, onMounted, ref } from "vue"; import { useGlobalStore } from "../../store/global"; import { Store } from "@tauri-apps/plugin-store"; +import { loadDefaultKeyconfig } from "../../invoke"; +import { KeyMappingConfig } from "../../keyMappingConfig"; const store = useGlobalStore(); const localStore = new Store("store.bin"); @@ -141,6 +143,26 @@ function importKeyMappingConfig() { localStore.set("curKeyMappingIndex", store.curKeyMappingIndex); message.success("按键方案已导入"); } + +async function importDefaultKeyMappingConfig() { + const data = await loadDefaultKeyconfig(); + let defaultConfigs: KeyMappingConfig[]; + let count = 0; + try { + defaultConfigs = JSON.parse(data); + for (const config of defaultConfigs) { + store.keyMappingConfigList.push(config); + count++; + } + } catch (e) { + console.error(e); + message.error("默认按键方案导入失败"); + return; + } + + localStore.set("keyMappingConfigList", store.keyMappingConfigList); + message.success(`已导入${count}个默认方案`); +}