flight is HMD based

This commit is contained in:
Jay Christy
2024-05-23 13:14:48 -04:00
parent 468610c26e
commit 0ca8907057

View File

@@ -7,8 +7,9 @@ use bevy_openxr::{
action_binding::OxrSuggestActionBinding, action_binding::OxrSuggestActionBinding,
action_set_attaching::OxrAttachActionSet, action_set_attaching::OxrAttachActionSet,
add_xr_plugins, add_xr_plugins,
helper_traits::ToQuat,
init::OxrTrackingRoot, init::OxrTrackingRoot,
resources::{OxrInstance, OxrSession}, resources::{OxrInstance, OxrSession, OxrViews},
}; };
use openxr::{ActiveActionSet, Path, Vector2f}; use openxr::{ActiveActionSet, Path, Vector2f};
@@ -422,6 +423,8 @@ fn handle_flight_input(
action_query: Query<&MyActionState, With<FlightActionMarker>>, action_query: Query<&MyActionState, With<FlightActionMarker>>,
mut oxr_root: Query<&mut Transform, With<OxrTrackingRoot>>, mut oxr_root: Query<&mut Transform, With<OxrTrackingRoot>>,
time: Res<Time>, time: Res<Time>,
//use the views for hmd orientation
views: ResMut<OxrViews>,
) { ) {
//now for the actual checking //now for the actual checking
for state in action_query.iter() { for state in action_query.iter() {
@@ -434,7 +437,7 @@ fn handle_flight_input(
let input_vector = vec3( let input_vector = vec3(
vector_state.current_state[0], vector_state.current_state[0],
0.0, 0.0,
vector_state.current_state[1], -vector_state.current_state[1],
); );
//hard code speed for now //hard code speed for now
let speed = 5.0; let speed = 5.0;
@@ -442,7 +445,18 @@ fn handle_flight_input(
let root = oxr_root.get_single_mut(); let root = oxr_root.get_single_mut();
match root { match root {
Ok(mut root_position) => { Ok(mut root_position) => {
root_position.translation += input_vector * speed * time.delta_seconds(); //lets assume HMD based direction for now
let view = views.first();
match view {
Some(v) => {
let reference_quat = v.pose.orientation.to_quat();
let locomotion_vector = reference_quat.mul_vec3(input_vector);
root_position.translation +=
locomotion_vector * speed * time.delta_seconds();
}
None => return,
}
} }
Err(_) => { Err(_) => {
info!("handle_flight_input: error getting root position for flight actions") info!("handle_flight_input: error getting root position for flight actions")