grab with realign

This commit is contained in:
galister
2023-12-09 22:26:55 +01:00
parent 1842259e66
commit 6cfbc6ffcd
10 changed files with 289 additions and 211 deletions

View File

@@ -14,14 +14,17 @@ use vulkano::{
Handle, VulkanObject,
};
use crate::{backend::openvr::lines::LinePool, state::AppState};
use crate::{
backend::{
input::interact,
openvr::{input::OpenVrInputSource, lines::LinePool},
},
state::AppState,
};
use self::{input::action_manifest_path, overlay::OpenVrOverlayData};
use super::{
common::{OverlayContainer, TaskType},
input::InputState,
};
use super::common::{OverlayContainer, TaskType};
pub mod input;
pub mod lines;
@@ -55,14 +58,14 @@ pub fn openvr_run() {
let mut state = AppState::new(instance_extensions, device_extensions_fn);
let mut overlays = OverlayContainer::<OpenVrOverlayData>::new(&mut state);
state.input.set_desktop_extent(overlays.extent);
state.hid_provider.set_desktop_extent(overlays.extent);
if let Err(e) = input_mngr.set_action_manifest(action_manifest_path()) {
log::error!("Failed to set action manifest: {}", e.description());
return;
};
let Ok(mut input) = InputState::new(&mut input_mngr) else {
let Ok(mut input_source) = OpenVrInputSource::new(&mut input_mngr) else {
log::error!("Failed to initialize input");
return;
};
@@ -82,8 +85,10 @@ pub fn openvr_run() {
let mut due_tasks = VecDeque::with_capacity(4);
let mut lines = LinePool::new(state.graphics.clone());
input.pointers[0].data.line_id = lines.allocate(&mut overlay_mngr, &mut state);
input.pointers[1].data.line_id = lines.allocate(&mut overlay_mngr, &mut state);
let pointer_lines = [
lines.allocate(&mut overlay_mngr, &mut state),
lines.allocate(&mut overlay_mngr, &mut state),
];
loop {
while let Some(event) = system_mngr.poll_next_event() {
@@ -102,7 +107,7 @@ pub fn openvr_run() {
}
if next_device_update <= Instant::now() {
input.update_devices(&mut system_mngr);
input_source.update_devices(&mut system_mngr, &mut state);
next_device_update = Instant::now() + Duration::from_secs(30);
}
@@ -118,19 +123,19 @@ pub fn openvr_run() {
}
}
input.pre_update();
input.update(&mut input_mngr, &mut system_mngr);
input.post_update();
state.input_state.pre_update();
input_source.update(&mut input_mngr, &mut system_mngr, &mut state);
state.input_state.post_update();
input.pointers.iter_mut().for_each(|p| {
let dist = p.interact(&mut overlays, &mut state);
if dist > 0.001 {
lines.draw_from(p.data.line_id, p.pose, dist, Vec4::ONE);
} else {
lines.draw_from(p.data.line_id, p.pose, 20.0, Vec4::ONE);
// lines.hide(p.data.line_id);
}
});
let pointer_lengths = interact(&mut overlays, &mut state);
for (idx, len) in pointer_lengths.iter().enumerate() {
lines.draw_from(
pointer_lines[idx],
state.input_state.pointers[idx].pose,
*len,
Vec4::ONE,
);
}
lines.update(&mut overlay_mngr, &mut state);
@@ -157,7 +162,7 @@ pub fn openvr_run() {
// playspace moved end frame
state.input.on_new_frame();
state.hid_provider.on_new_frame();
let mut seconds_since_vsync = 0f32;
std::thread::sleep(Duration::from_secs_f32(