From c7aa88647c8f5eb1f5c0d24ddb12a3396215dc15 Mon Sep 17 00:00:00 2001 From: galister <22305755+galister@users.noreply.github.com> Date: Mon, 17 Jun 2024 14:36:21 +0900 Subject: [PATCH] feat: space drag multiplier --- src/backend/openvr/playspace.rs | 3 ++- src/backend/openxr/playspace.rs | 3 ++- src/config.rs | 5 +++++ src/gui/modular/button.rs | 6 ++++++ src/gui/modular/label.rs | 6 ++++++ 5 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/backend/openvr/playspace.rs b/src/backend/openvr/playspace.rs index c1d15ca..b792042 100644 --- a/src/backend/openvr/playspace.rs +++ b/src/backend/openvr/playspace.rs @@ -114,7 +114,8 @@ impl PlayspaceMover { let new_hand = data .pose .transform_point3a(state.input_state.pointers[data.hand].raw_pose.translation); - let relative_pos = new_hand - data.hand_pose; + let relative_pos = + (new_hand - data.hand_pose) * state.session.config.space_drag_multiplier; if relative_pos.length_squared() > 1000.0 { log::warn!("Space drag too fast, ignoring"); diff --git a/src/backend/openxr/playspace.rs b/src/backend/openxr/playspace.rs index f801f55..fb39c52 100644 --- a/src/backend/openxr/playspace.rs +++ b/src/backend/openxr/playspace.rs @@ -95,7 +95,8 @@ impl PlayspaceMover { let new_hand = data .pose .transform_point3a(state.input_state.pointers[data.hand].pose.translation); - let relative_pos = new_hand - data.hand_pose; + let relative_pos = + (new_hand - data.hand_pose) * state.session.config.space_drag_multiplier; if relative_pos.length_squared() > 1000.0 { log::warn!("Space drag too fast, ignoring"); diff --git a/src/config.rs b/src/config.rs index d544a6f..96e4546 100644 --- a/src/config.rs +++ b/src/config.rs @@ -240,6 +240,9 @@ pub struct GeneralConfig { #[serde(default = "def_font")] pub primary_font: Arc, + + #[serde(default = "def_one")] + pub space_drag_multiplier: f32, } impl GeneralConfig { @@ -374,6 +377,7 @@ pub struct AutoSettings { pub notifications_sound_enabled: bool, pub realign_on_showhide: bool, pub allow_sliding: bool, + pub space_drag_multiplier: f32, } fn get_settings_path() -> PathBuf { @@ -392,6 +396,7 @@ pub fn save_settings(config: &GeneralConfig) -> anyhow::Result<()> { notifications_sound_enabled: config.notifications_sound_enabled, realign_on_showhide: config.realign_on_showhide, allow_sliding: config.allow_sliding, + space_drag_multiplier: config.space_drag_multiplier, }; let json = serde_json::to_string_pretty(&conf).unwrap(); // want panic diff --git a/src/gui/modular/button.rs b/src/gui/modular/button.rs index 190bb3a..d58d369 100644 --- a/src/gui/modular/button.rs +++ b/src/gui/modular/button.rs @@ -134,6 +134,9 @@ pub enum ButtonAction { channel: ColorChannel, delta: f32, }, + DragMultiplier { + delta: f32, + }, System { action: SystemAction, }, @@ -330,6 +333,9 @@ fn handle_action(action: &ButtonAction, press: &mut PressData, app: &mut AppStat .enqueue(TaskType::System(SystemTask::ColorGain(channel, delta))); } ButtonAction::System { action } => run_system(action, app), + ButtonAction::DragMultiplier { delta } => { + app.session.config.space_drag_multiplier += delta; + } } } diff --git a/src/gui/modular/label.rs b/src/gui/modular/label.rs index 30e31ce..56e54d7 100644 --- a/src/gui/modular/label.rs +++ b/src/gui/modular/label.rs @@ -38,6 +38,7 @@ pub enum LabelContent { low_color: Arc, charging_color: Arc, }, + DragMultiplier, Ipd, } @@ -66,6 +67,7 @@ pub enum LabelData { Ipd { last_ipd: f32, }, + DragMultiplier, } pub fn modular_label_init(label: &mut ModularControl, content: &LabelContent) { @@ -111,6 +113,7 @@ pub fn modular_label_init(label: &mut ModularControl, content: &LabelContent) { None } LabelContent::Ipd => Some(LabelData::Ipd { last_ipd: 0. }), + LabelContent::DragMultiplier => Some(LabelData::DragMultiplier), }; if let Some(state) = state { @@ -249,5 +252,8 @@ pub(super) fn label_update(control: &mut ModularControl, _: &mut (), app: &mut A control.set_text(&format!("{:.1}", app.input_state.ipd)); } } + LabelData::DragMultiplier => { + control.set_text(&format!("{:.1}", app.session.config.space_drag_multiplier)); + } } }