moved more stuff around

This commit is contained in:
Jay Christy
2023-09-24 15:30:58 -04:00
parent 85dc35ab53
commit 012a778c35
3 changed files with 64 additions and 68 deletions

View File

@@ -11,8 +11,8 @@ use bevy_openxr::xr_input::debug_gizmos::OpenXrDebugRenderer;
use bevy_openxr::xr_input::oculus_touch::OculusController;
use bevy_openxr::xr_input::prototype_locomotion::{proto_locomotion, PrototypeLocomotionConfig};
use bevy_openxr::xr_input::trackers::{
OpenXRController, OpenXRLeftController, OpenXRRightController, OpenXRTracker,
OpenXRTrackingRoot, adopt_open_xr_trackers,
adopt_open_xr_trackers, OpenXRController, OpenXRLeftController, OpenXRRightController,
OpenXRTracker, OpenXRTrackingRoot,
};
use bevy_openxr::xr_input::{Hand, QuatConv, Vec3Conv};
use bevy_openxr::DefaultXrPlugins;
@@ -29,8 +29,6 @@ fn main() {
.add_systems(Startup, setup)
.add_systems(Update, proto_locomotion)
.add_systems(Startup, spawn_controllers_example)
.add_systems(Update, update_open_xr_controllers)
.add_systems(Update, adopt_open_xr_trackers)
.insert_resource(PrototypeLocomotionConfig::default())
.run();
}
@@ -85,12 +83,6 @@ fn spawn_controllers_example(mut commands: Commands) {
OpenXRController,
OpenXRTracker,
SpatialBundle::default(),
// PbrBundle {
// mesh: meshes.add(Mesh::from(shape::Cube { size: 0.1 })),
// material: materials.add(Color::RED.into()),
// transform: Transform::from_xyz(0.0, 0.5, 1.0),
// ..default()
// },
));
//right hand
commands.spawn((
@@ -98,59 +90,5 @@ fn spawn_controllers_example(mut commands: Commands) {
OpenXRController,
OpenXRTracker,
SpatialBundle::default(),
// PbrBundle {
// mesh: meshes.add(Mesh::from(shape::Cube { size: 0.1 })),
// material: materials.add(Color::BLUE.into()),
// transform: Transform::from_xyz(0.0, 0.5, 1.0),
// ..default()
// },
));
}
fn update_open_xr_controllers(
oculus_controller: Res<OculusController>,
mut left_controller_query: Query<(
&mut Transform,
With<OpenXRLeftController>,
Without<OpenXRRightController>,
)>,
mut right_controller_query: Query<(
&mut Transform,
With<OpenXRRightController>,
Without<OpenXRLeftController>,
)>,
frame_state: Res<XrFrameState>,
instance: Res<XrInstance>,
xr_input: Res<XrInput>,
session: Res<XrSession>,
) {
//lock dat frame?
let frame_state = *frame_state.lock().unwrap();
//get controller
let controller = oculus_controller.get_ref(&instance, &session, &frame_state, &xr_input);
//get left controller
let left = controller.grip_space(Hand::Left);
let left_postion = left.0.pose.position.to_vec3();
left_controller_query
.get_single_mut()
.unwrap()
.0
.translation = left_postion;
left_controller_query.get_single_mut().unwrap().0.rotation = left.0.pose.orientation.to_quat();
//get right controller
let right = controller.grip_space(Hand::Right);
let right_postion = right.0.pose.position.to_vec3();
right_controller_query
.get_single_mut()
.unwrap()
.0
.translation = right_postion;
right_controller_query.get_single_mut().unwrap().0.rotation =
right.0.pose.orientation.to_quat();
}

View File

@@ -1,8 +1,8 @@
pub mod controllers;
pub mod debug_gizmos;
pub mod oculus_touch;
pub mod trackers;
pub mod prototype_locomotion;
pub mod trackers;
pub mod xr_camera;
use crate::resources::XrSession;
@@ -13,14 +13,17 @@ use crate::xr_input::xr_camera::{xr_camera_head_sync, Eye, XRProjection, XrCamer
use bevy::app::{App, PostUpdate, Startup};
use bevy::log::warn;
use bevy::prelude::{
default, Commands, Component, Plugin, PreUpdate, Quat, Res, SpatialBundle, Vec3,
default, Commands, Component, Plugin, PreUpdate, Quat, Res, SpatialBundle, Update, Vec3,
};
use bevy::prelude::{BuildChildren, IntoSystemConfigs};
use bevy::render::camera::CameraProjectionPlugin;
use bevy::render::view::{update_frusta, VisibilitySystems};
use bevy::transform::{TransformBundle, TransformSystem};
use self::trackers::{OpenXRLeftEye, OpenXRRightEye, OpenXRTrackingRoot};
use self::trackers::{
adopt_open_xr_trackers, update_open_xr_controllers, OpenXRLeftEye, OpenXRRightEye,
OpenXRTrackingRoot,
};
#[derive(Copy, Clone)]
pub struct OpenXrInput {
@@ -46,8 +49,12 @@ impl Plugin for OpenXrInput {
app.add_systems(Startup, setup_oculus_controller);
}
}
//adopt any new trackers
app.add_systems(PreUpdate, adopt_open_xr_trackers);
app.add_systems(PreUpdate, action_set_system);
app.add_systems(PreUpdate, xr_camera_head_sync.after(xr_begin_frame));
//update controller trackers
app.add_systems(Update, update_open_xr_controllers);
app.add_systems(
PostUpdate,
update_frusta::<XRProjection>

View File

@@ -1,4 +1,8 @@
use bevy::prelude::{info, Added, BuildChildren, Commands, Component, Entity, Query, With};
use bevy::prelude::{info, Added, BuildChildren, Commands, Component, Entity, Query, With, Res, Transform, Without};
use crate::{resources::{XrFrameState, XrInstance, XrSession}, input::XrInput};
use super::{oculus_touch::OculusController, Hand, Vec3Conv, QuatConv};
#[derive(Component)]
pub struct OpenXRTrackingRoot;
@@ -34,3 +38,50 @@ pub fn adopt_open_xr_trackers(
Err(_) => info!("root isnt spawned yet?"),
}
}
pub fn update_open_xr_controllers(
oculus_controller: Res<OculusController>,
mut left_controller_query: Query<(
&mut Transform,
With<OpenXRLeftController>,
Without<OpenXRRightController>,
)>,
mut right_controller_query: Query<(
&mut Transform,
With<OpenXRRightController>,
Without<OpenXRLeftController>,
)>,
frame_state: Res<XrFrameState>,
instance: Res<XrInstance>,
xr_input: Res<XrInput>,
session: Res<XrSession>,
) {
//lock dat frame?
let frame_state = *frame_state.lock().unwrap();
//get controller
let controller = oculus_controller.get_ref(&instance, &session, &frame_state, &xr_input);
//get left controller
let left = controller.grip_space(Hand::Left);
let left_postion = left.0.pose.position.to_vec3();
left_controller_query
.get_single_mut()
.unwrap()
.0
.translation = left_postion;
left_controller_query.get_single_mut().unwrap().0.rotation = left.0.pose.orientation.to_quat();
//get right controller
let right = controller.grip_space(Hand::Right);
let right_postion = right.0.pose.position.to_vec3();
right_controller_query
.get_single_mut()
.unwrap()
.0
.translation = right_postion;
right_controller_query.get_single_mut().unwrap().0.rotation =
right.0.pose.orientation.to_quat();
}