From 9361991a5fba10629d16781479904d8ddf198f82 Mon Sep 17 00:00:00 2001 From: MalekiRe Date: Thu, 7 Sep 2023 21:40:15 -0700 Subject: [PATCH] changed inputs to work --- src/input.rs | 37 ++++++++++++++++++++++--------------- src/lib.rs | 8 ++++++++ 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/src/input.rs b/src/input.rs index eac2096..1a1564a 100644 --- a/src/input.rs +++ b/src/input.rs @@ -8,8 +8,7 @@ type XrPose = (Vec3, Quat); #[derive(Clone, Resource)] pub struct XrInput { pub action_set: xr::ActionSet, - pub right_action: xr::Action, - pub left_action: xr::Action, + pub hand_pose: xr::Action, pub right_space: Arc, pub left_space: Arc, pub stage: Arc, @@ -21,34 +20,42 @@ impl XrInput { session: xr::Session, ) -> xr::Result { let action_set = instance.create_action_set("input", "input pose information", 0)?; - let right_action = - action_set.create_action::("right_hand", "Right Hand Controller", &[])?; - let left_action = - action_set.create_action::("left_hand", "Left Hand Controller", &[])?; + let left_hand_subaction_path = instance.string_to_path("/user/hand/left").unwrap(); + let right_hand_subaction_path = instance.string_to_path("/user/hand/right").unwrap(); + let left_hand_grip_pose_path = instance + .string_to_path("/user/hand/left/input/grip/pose") + .unwrap(); + let right_hand_grip_pose_path = instance + .string_to_path("/user/hand/right/input/grip/pose") + .unwrap(); + let hand_pose = + action_set.create_action::("hand_pose", "Hand Pose", &[left_hand_subaction_path, right_hand_subaction_path])?; + /* let left_action = + action_set.create_action::("left_hand", "Left Hand Controller", &[])?;*/ instance.suggest_interaction_profile_bindings( instance.string_to_path("/interaction_profiles/khr/simple_controller")?, &[ xr::Binding::new( - &right_action, - instance.string_to_path("/user/hand/right/input/grip/pose")?, + &hand_pose, + right_hand_grip_pose_path, ), xr::Binding::new( - &left_action, - instance.string_to_path("/user/hand/left/input/grip/pose")?, + &hand_pose, + left_hand_grip_pose_path, ), ], )?; - session.attach_action_sets(&[&action_set])?; + let right_space = - right_action.create_space(session.clone(), xr::Path::NULL, xr::Posef::IDENTITY)?; + hand_pose.create_space(session.clone(), right_hand_subaction_path, xr::Posef::IDENTITY)?; let left_space = - left_action.create_space(session.clone(), xr::Path::NULL, xr::Posef::IDENTITY)?; + hand_pose.create_space(session.clone(), left_hand_subaction_path, xr::Posef::IDENTITY)?; let stage = session.create_reference_space(xr::ReferenceSpaceType::STAGE, xr::Posef::IDENTITY)?; + session.attach_action_sets(&[&action_set])?; Ok(Self { action_set, - right_action, - left_action, + hand_pose, right_space: Arc::new(right_space), left_space: Arc::new(left_space), stage: Arc::new(stage), diff --git a/src/lib.rs b/src/lib.rs index f8fc4d4..3c9d4b0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -153,6 +153,7 @@ pub fn pre_frame( frame_state: Res, frame_waiter: Res, swapchain: Res, + xr_input: Res, mut manual_texture_views: ResMut, ){ while let Some(event) = instance.poll_event(&mut Default::default()).unwrap() { @@ -199,6 +200,13 @@ pub fn pre_frame( swapchain.begin().unwrap(); swapchain.update_render_views(); let (left, right) = swapchain.get_render_views(); + let active_action_set = xr::ActiveActionSet::new(&xr_input.action_set); + match session.sync_actions(&[active_action_set]) { + Err(err) => { + eprintln!("{}", err); + } + _ => {} + } let format = swapchain.format(); let left = ManualTextureView { texture_view: left.into(),