changed inputs to work

This commit is contained in:
MalekiRe
2023-09-07 21:40:15 -07:00
parent 96ab84e972
commit 9361991a5f
2 changed files with 30 additions and 15 deletions

View File

@@ -8,8 +8,7 @@ type XrPose = (Vec3, Quat);
#[derive(Clone, Resource)]
pub struct XrInput {
pub action_set: xr::ActionSet,
pub right_action: xr::Action<xr::Posef>,
pub left_action: xr::Action<xr::Posef>,
pub hand_pose: xr::Action<xr::Posef>,
pub right_space: Arc<xr::Space>,
pub left_space: Arc<xr::Space>,
pub stage: Arc<xr::Space>,
@@ -21,34 +20,42 @@ impl XrInput {
session: xr::Session<xr::AnyGraphics>,
) -> xr::Result<Self> {
let action_set = instance.create_action_set("input", "input pose information", 0)?;
let right_action =
action_set.create_action::<xr::Posef>("right_hand", "Right Hand Controller", &[])?;
let left_action =
action_set.create_action::<xr::Posef>("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::<xr::Posef>("hand_pose", "Hand Pose", &[left_hand_subaction_path, right_hand_subaction_path])?;
/* let left_action =
action_set.create_action::<xr::Posef>("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),

View File

@@ -153,6 +153,7 @@ pub fn pre_frame(
frame_state: Res<XrFrameState>,
frame_waiter: Res<XrFrameWaiter>,
swapchain: Res<XrSwapchain>,
xr_input: Res<XrInput>,
mut manual_texture_views: ResMut<ManualTextureViews>,
){
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(),