Skip to content

Commit 6a58673

Browse files
committed
clear space flags when handtracking data gathering fails
Signed-off-by: Schmarni <marnistromer@gmail.com>
1 parent cb3ba54 commit 6a58673

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

crates/bevy_openxr/src/openxr/features/handtracking.rs

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use bevy_mod_xr::{
66
hands::{HandBone, HandBoneRadius},
77
session::session_running,
88
};
9-
use openxr::SpaceLocationFlags;
9+
use openxr::{SpaceLocationFlags, SpaceVelocityFlags};
1010

1111
use crate::helper_traits::ToVec3;
1212
use crate::resources::OxrFrameState;
@@ -159,31 +159,52 @@ fn locate_hands(
159159
frame_state.predicted_display_time
160160
};
161161
let ref_space = ref_space.map(|v| &v.0).unwrap_or(&default_ref_space.0);
162+
let mut clear_flags = || {
163+
for e in hand_entities.0.iter() {
164+
let Ok((_, _, _, _, mut flags, vel_flags)) = bone_query.get_mut(*e) else {
165+
continue;
166+
};
167+
flags.0 = SpaceLocationFlags::EMPTY;
168+
if let Some(mut flags) = vel_flags {
169+
flags.0 = SpaceVelocityFlags::EMPTY;
170+
}
171+
}
172+
};
162173
let (joints, vels) = if wants_velocities {
163174
let (loc, vel) =
164175
match session.locate_hand_joints_with_velocities(tracker, ref_space, time) {
165176
Ok(Some(v)) => v,
166-
Ok(None) => continue,
177+
Ok(None) => {
178+
clear_flags();
179+
continue;
180+
}
167181
Err(openxr::sys::Result::ERROR_EXTENSION_NOT_PRESENT) => {
168182
error!("HandTracking Extension not loaded");
183+
clear_flags();
169184
continue;
170185
}
171186
Err(err) => {
172187
warn!("Error while locating hand joints: {}", err.to_string());
188+
clear_flags();
173189
continue;
174190
}
175191
};
176192
(loc, Some(vel))
177193
} else {
178194
let space = match session.locate_hand_joints(tracker, ref_space, time) {
179195
Ok(Some(v)) => v,
180-
Ok(None) => continue,
196+
Ok(None) => {
197+
clear_flags();
198+
continue;
199+
}
181200
Err(openxr::sys::Result::ERROR_EXTENSION_NOT_PRESENT) => {
182201
error!("HandTracking Extension not loaded");
202+
clear_flags();
183203
continue;
184204
}
185205
Err(err) => {
186206
warn!("Error while locating hand joints: {}", err.to_string());
207+
clear_flags();
187208
continue;
188209
}
189210
};

0 commit comments

Comments
 (0)