fix(objects/input): push all buttons through
This commit is contained in:
@@ -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)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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| {
|
||||||
|
|||||||
Reference in New Issue
Block a user