Skip to content

Commit

Permalink
openvr: reset offsets reloads from disk
Browse files Browse the repository at this point in the history
  • Loading branch information
galister committed Mar 10, 2024
1 parent 5a077e3 commit b57b77b
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 7 deletions.
2 changes: 1 addition & 1 deletion src/backend/openvr/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ pub fn openvr_run(running: Arc<AtomicBool>) -> Result<(), BackendError> {
playspace.fix_floor(&mut chaperone_mgr, &state.input_state);
}
SystemTask::ResetPlayspace => {
playspace.reset_offset(&mut chaperone_mgr);
playspace.reset_offset(&mut chaperone_mgr, &state.input_state);
}
},
}
Expand Down
18 changes: 12 additions & 6 deletions src/backend/openvr/playspace.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use glam::{Affine3A, Vec3A};
use glam::{Affine3A, Vec3, Vec3A};
use ovr_overlay::{
chaperone_setup::ChaperoneSetupManager,
compositor::CompositorManager,
Expand Down Expand Up @@ -93,14 +93,20 @@ impl PlayspaceMover {
}
}

pub fn reset_offset(&mut self, chaperone_mgr: &mut ChaperoneSetupManager) {
pub fn reset_offset(&mut self, chaperone_mgr: &mut ChaperoneSetupManager, input: &InputState) {
if self.universe == ETrackingUniverseOrigin::TrackingUniverseStanding {
if let Some(cur) = get_working_copy(&self.universe, chaperone_mgr) {
apply_chaperone_transform(cur, chaperone_mgr);
chaperone_mgr.reload_from_disk(EChaperoneConfigFile::EChaperoneConfigFile_Live);
chaperone_mgr.commit_working_copy(EChaperoneConfigFile::EChaperoneConfigFile_Live);
} else {
let mut height = 1.7;
if let Some(mat) = get_working_copy(&self.universe, chaperone_mgr) {
height = input.hmd.translation.y - mat.translation.y;
}

let xform = Affine3A::from_translation(Vec3::Y * height);
set_working_copy(&self.universe, chaperone_mgr, &xform);
chaperone_mgr.commit_working_copy(EChaperoneConfigFile::EChaperoneConfigFile_Live);
}
set_working_copy(&self.universe, chaperone_mgr, &Affine3A::IDENTITY);
chaperone_mgr.commit_working_copy(EChaperoneConfigFile::EChaperoneConfigFile_Live);

if self.last.is_some() {
log::info!("Space drag interrupted by manual reset");
Expand Down

0 comments on commit b57b77b

Please sign in to comment.