feat: XR binding for playspace reset

This commit is contained in:
hypevhs
2024-08-10 18:25:00 -05:00
committed by galister
parent dc985f6da6
commit 9d18628354
4 changed files with 37 additions and 0 deletions

View File

@@ -73,6 +73,9 @@ impl InputState {
if hand.now.space_rotate != hand.before.space_rotate { if hand.now.space_rotate != hand.before.space_rotate {
log::debug!("Hand {}: space_rotate {}", hand.idx, hand.now.space_rotate); log::debug!("Hand {}: space_rotate {}", hand.idx, hand.now.space_rotate);
} }
if hand.now.space_reset != hand.before.space_reset {
log::debug!("Hand {}: space_reset {}", hand.idx, hand.now.space_reset);
}
if hand.now.click_modifier_right != hand.before.click_modifier_right { if hand.now.click_modifier_right != hand.before.click_modifier_right {
log::debug!( log::debug!(
"Hand {}: click_modifier_right {}", "Hand {}: click_modifier_right {}",
@@ -192,6 +195,7 @@ pub struct PointerState {
pub show_hide: bool, pub show_hide: bool,
pub space_drag: bool, pub space_drag: bool,
pub space_rotate: bool, pub space_rotate: bool,
pub space_reset: bool,
pub click_modifier_right: bool, pub click_modifier_right: bool,
pub click_modifier_middle: bool, pub click_modifier_middle: bool,
pub move_mouse: bool, pub move_mouse: bool,

View File

@@ -156,6 +156,7 @@ pub(super) struct OpenXrHandSource {
action_show_hide: CustomClickAction, action_show_hide: CustomClickAction,
action_space_drag: CustomClickAction, action_space_drag: CustomClickAction,
action_space_rotate: CustomClickAction, action_space_rotate: CustomClickAction,
action_space_reset: CustomClickAction,
action_modifier_right: CustomClickAction, action_modifier_right: CustomClickAction,
action_modifier_middle: CustomClickAction, action_modifier_middle: CustomClickAction,
action_move_mouse: CustomClickAction, action_move_mouse: CustomClickAction,
@@ -377,6 +378,11 @@ impl OpenXrHand {
.action_space_rotate .action_space_rotate
.state(pointer.before.space_rotate, xr, session)?; .state(pointer.before.space_rotate, xr, session)?;
pointer.now.space_reset =
self.source
.action_space_reset
.state(pointer.before.space_reset, xr, session)?;
Ok(()) Ok(())
} }
} }
@@ -410,6 +416,7 @@ impl OpenXrHandSource {
action_show_hide: CustomClickAction::new(action_set, "show_hide", side)?, action_show_hide: CustomClickAction::new(action_set, "show_hide", side)?,
action_space_drag: CustomClickAction::new(action_set, "space_drag", side)?, action_space_drag: CustomClickAction::new(action_set, "space_drag", side)?,
action_space_rotate: CustomClickAction::new(action_set, "space_rotate", side)?, action_space_rotate: CustomClickAction::new(action_set, "space_rotate", side)?,
action_space_reset: CustomClickAction::new(action_set, "space_reset", side)?,
action_modifier_right: CustomClickAction::new( action_modifier_right: CustomClickAction::new(
action_set, action_set,
"click_modifier_right", "click_modifier_right",
@@ -579,6 +586,14 @@ fn suggest_bindings(instance: &xr::Instance, hands: &[&OpenXrHandSource; 2]) ->
instance instance
); );
add_custom!(
profile.space_reset,
&hands[0].action_space_reset,
&hands[1].action_space_reset,
bindings,
instance
);
add_custom!( add_custom!(
profile.click_modifier_right, profile.click_modifier_right,
&hands[0].action_modifier_right, &hands[0].action_modifier_right,
@@ -634,6 +649,7 @@ struct OpenXrActionConfProfile {
show_hide: Option<OpenXrActionConfAction>, show_hide: Option<OpenXrActionConfAction>,
space_drag: Option<OpenXrActionConfAction>, space_drag: Option<OpenXrActionConfAction>,
space_rotate: Option<OpenXrActionConfAction>, space_rotate: Option<OpenXrActionConfAction>,
space_reset: Option<OpenXrActionConfAction>,
click_modifier_right: Option<OpenXrActionConfAction>, click_modifier_right: Option<OpenXrActionConfAction>,
click_modifier_middle: Option<OpenXrActionConfAction>, click_modifier_middle: Option<OpenXrActionConfAction>,
move_mouse: Option<OpenXrActionConfAction>, move_mouse: Option<OpenXrActionConfAction>,

View File

@@ -15,6 +15,9 @@
// -- space_rotate -- // -- space_rotate --
// rotate your stage (playspace rotate, WIP) // rotate your stage (playspace rotate, WIP)
// //
// -- space_reset --
// reset your stage (reset the offset from playspace drag)
//
// -- click_modifier_right -- // -- click_modifier_right --
// while this is held, your pointer will turn ORANGE and your mouse clicks will be RIGHT clicks // while this is held, your pointer will turn ORANGE and your mouse clicks will be RIGHT clicks
// //
@@ -132,6 +135,10 @@
left: "/user/hand/left/input/trackpad/force", left: "/user/hand/left/input/trackpad/force",
// right trackpad is alt_click // right trackpad is alt_click
}, },
space_reset: {
double_click: true,
left: "/user/hand/left/input/trackpad/force",
},
click_modifier_right: { click_modifier_right: {
left: "/user/hand/left/input/b/touch", left: "/user/hand/left/input/b/touch",
right: "/user/hand/right/input/b/touch" right: "/user/hand/right/input/b/touch"

View File

@@ -55,6 +55,16 @@ impl PlayspaceMover {
state: &AppState, state: &AppState,
monado: &mut Monado, monado: &mut Monado,
) { ) {
for (_i, pointer) in state.input_state.pointers.iter().enumerate() {
if pointer.now.space_reset {
if !pointer.before.space_reset {
log::info!("Space reset");
self.reset_offset(monado);
}
return;
}
}
if let Some(mut data) = self.rotate.take() { if let Some(mut data) = self.rotate.take() {
let pointer = &state.input_state.pointers[data.hand]; let pointer = &state.input_state.pointers[data.hand];
if !pointer.now.space_rotate { if !pointer.now.space_rotate {