fix(objects/input): push all buttons through

This commit is contained in:
Nova
2024-08-12 19:27:51 -04:00
parent fe83a69bb9
commit 42738b739f
2 changed files with 22 additions and 30 deletions

View File

@@ -22,7 +22,7 @@ use xkbcommon::xkb::{Context, Keymap, FORMAT_TEXT_V1};
use super::{get_sorted_handlers, CaptureManager, DistanceCalculator}; use super::{get_sorted_handlers, CaptureManager, DistanceCalculator};
#[derive(Deserialize, Serialize)] #[derive(Debug, Deserialize, Serialize)]
struct MouseEvent { struct MouseEvent {
select: f32, select: f32,
middle: f32, middle: f32,
@@ -117,36 +117,20 @@ impl MousePointer {
); );
{ {
// Set pointer input datamap // Set pointer input datamap
self.mouse_datamap.select = if Input::key(Key::MouseLeft).is_active() { self.mouse_datamap = MouseEvent {
1.0f32 select: Input::key(Key::MouseLeft).is_active() as u32 as f32,
} else { middle: Input::key(Key::MouseCenter).is_active() as u32 as f32,
0.0f32 context: Input::key(Key::MouseRight).is_active() as u32 as f32,
grab: Input::key(Key::MouseBack).is_active() as u32 as f32,
scroll_continuous: [0.0, mouse.scroll_change / 120.0].into(),
scroll_discrete: [0.0, mouse.scroll_change / 120.0].into(),
raw_input_events: vec![],
}; };
self.mouse_datamap.middle = if Input::key(Key::MouseCenter).is_active() {
1.0f32
} else {
0.0f32
};
self.mouse_datamap.context = if Input::key(Key::MouseRight).is_active() {
1.0f32
} else {
0.0f32
};
self.mouse_datamap.grab = if Input::key(Key::MouseBack).is_active()
|| Input::key(Key::MouseForward).is_active()
{
1.0f32
} else {
0.0f32
};
self.mouse_datamap.scroll_continuous = [0.0, mouse.scroll_change / 120.0].into();
self.mouse_datamap.scroll_discrete = [0.0, mouse.scroll_change / 120.0].into();
*self.pointer.datamap.lock() = Datamap::from_typed(&self.mouse_datamap).unwrap(); *self.pointer.datamap.lock() = Datamap::from_typed(&self.mouse_datamap).unwrap();
} }
self.target_pointer_input(); self.target_pointer_input();
self.send_keyboard_input(); self.send_keyboard_input();
} }
fn target_pointer_input(&mut self) { fn target_pointer_input(&mut self) {
let distance_calculator: DistanceCalculator = |space, data, field| { let distance_calculator: DistanceCalculator = |space, data, field| {
let result = field.ray_march(Ray { let result = field.ray_march(Ray {
@@ -154,7 +138,8 @@ impl MousePointer {
direction: vec3(0.0, 0.0, -1.0), direction: vec3(0.0, 0.0, -1.0),
space: space.clone(), space: space.clone(),
}); });
let valid = result.deepest_point_distance > 0.0 && result.min_distance < 0.05; let valid =
result.deepest_point_distance > 0.0 && result.min_distance.is_sign_negative();
valid.then(|| result.deepest_point_distance) valid.then(|| result.deepest_point_distance)
}; };

View File

@@ -23,9 +23,11 @@ use stereokit_rust::{
}; };
use zbus::Connection; use zbus::Connection;
#[derive(Default, Deserialize, Serialize)] #[derive(Default, Debug, Deserialize, Serialize)]
struct ControllerDatamap { struct ControllerDatamap {
select: f32, select: f32,
middle: f32,
context: f32,
grab: f32, grab: f32,
scroll: Vec2, scroll: Vec2,
} }
@@ -97,9 +99,14 @@ impl SkController {
); );
self.input.spatial.set_local_transform(world_transform); self.input.spatial.set_local_transform(world_transform);
} }
self.datamap.select = controller.trigger;
self.datamap.grab = controller.grip; self.datamap = ControllerDatamap {
self.datamap.scroll = controller.stick.into(); select: controller.trigger,
middle: controller.stick_click.is_active() as u32 as f32,
context: controller.is_x2_pressed() as u32 as f32,
grab: controller.grip,
scroll: controller.stick.into(),
};
*self.input.datamap.lock() = Datamap::from_typed(&self.datamap).unwrap(); *self.input.datamap.lock() = Datamap::from_typed(&self.datamap).unwrap();
let distance_calculator = |space: &Arc<Spatial>, _data: &InputDataType, field: &Field| { let distance_calculator = |space: &Arc<Spatial>, _data: &InputDataType, field: &Field| {