openvr: reset offsets reloads from disk
This commit is contained in:
@@ -214,7 +214,7 @@ pub fn openvr_run(running: Arc<AtomicBool>) -> Result<(), BackendError> {
|
|||||||
playspace.fix_floor(&mut chaperone_mgr, &state.input_state);
|
playspace.fix_floor(&mut chaperone_mgr, &state.input_state);
|
||||||
}
|
}
|
||||||
SystemTask::ResetPlayspace => {
|
SystemTask::ResetPlayspace => {
|
||||||
playspace.reset_offset(&mut chaperone_mgr);
|
playspace.reset_offset(&mut chaperone_mgr, &state.input_state);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use glam::{Affine3A, Vec3A};
|
use glam::{Affine3A, Vec3, Vec3A};
|
||||||
use ovr_overlay::{
|
use ovr_overlay::{
|
||||||
chaperone_setup::ChaperoneSetupManager,
|
chaperone_setup::ChaperoneSetupManager,
|
||||||
compositor::CompositorManager,
|
compositor::CompositorManager,
|
||||||
@@ -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 self.universe == ETrackingUniverseOrigin::TrackingUniverseStanding {
|
||||||
if let Some(cur) = get_working_copy(&self.universe, chaperone_mgr) {
|
chaperone_mgr.reload_from_disk(EChaperoneConfigFile::EChaperoneConfigFile_Live);
|
||||||
apply_chaperone_transform(cur, chaperone_mgr);
|
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() {
|
if self.last.is_some() {
|
||||||
log::info!("Space drag interrupted by manual reset");
|
log::info!("Space drag interrupted by manual reset");
|
||||||
|
|||||||
Reference in New Issue
Block a user