rework interactions

This commit is contained in:
galister
2024-02-04 14:23:28 +01:00
parent e846014a88
commit 82f53e6668
15 changed files with 201 additions and 102 deletions

View File

@@ -239,6 +239,7 @@ pub enum PointerMode {
Left,
Right,
Middle,
Special,
}
pub fn interact<O>(
@@ -371,7 +372,7 @@ impl Pointer {
let mut hits: SmallVec<[RayHit; 8]> = smallvec!();
for overlay in overlays.iter() {
if !overlay.state.want_visible {
if !overlay.state.want_visible || !overlay.state.interactable {
continue;
}
@@ -435,30 +436,32 @@ impl Pointer {
O: Default,
{
if self.now.grab {
if self.now.click && !self.before.click {
log::warn!("todo: click-while-grabbed");
}
let grab_data = self.interaction.grabbed.as_mut().unwrap();
match self.interaction.mode {
PointerMode::Left => {
grab_data.offset.z -= self.now.scroll * 0.05;
}
_ => {
overlay.state.transform.matrix3 = overlay
.state
.transform
.matrix3
.mul_scalar(1.0 + 0.01 * self.now.scroll);
if self.now.click {
self.interaction.mode = PointerMode::Special;
let cur_scale = overlay.state.transform.x_axis.length();
if cur_scale < 0.1 && self.now.scroll > 0.0 {
return;
} else if cur_scale > 20. && self.now.scroll < 0.0 {
return;
}
overlay.state.transform.matrix3 = overlay
.state
.transform
.matrix3
.mul_scalar(1.0 - 0.025 * self.now.scroll);
} else {
grab_data.offset.z -= self.now.scroll * 0.05;
}
overlay.state.transform.translation = self.pose.transform_point3a(grab_data.offset);
overlay.state.realign(hmd);
overlay.state.dirty = true;
} else {
overlay.state.spawn_point = hmd
.inverse()
.transform_point3a(overlay.state.transform.translation);
overlay.state.saved_point = Some(
hmd.inverse()
.transform_point3a(overlay.state.transform.translation),
);
self.interaction.grabbed = None;
log::info!("Hand {}: dropped {}", self.idx, overlay.state.name);
}