From b933a6dd353d499cf46dcb93cb56e6e1320adb60 Mon Sep 17 00:00:00 2001 From: Asuro Date: Sat, 7 Aug 2021 16:10:06 +0200 Subject: [PATCH] multi touch fixes --- levels/test.lvl | 21 ++++++++++++++++++++- src/input.rs | 28 ++++++++++++++++------------ 2 files changed, 36 insertions(+), 13 deletions(-) diff --git a/levels/test.lvl b/levels/test.lvl index 3485bbc..275c1c4 100644 --- a/levels/test.lvl +++ b/levels/test.lvl @@ -8,6 +8,25 @@ } ], "objects": [ + { + "mesh_index": 0, + "position": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ] + }, { "mesh_index": 1, "position": [ @@ -32,7 +51,7 @@ "mesh_index": null, "position": [ 0, - 0, + 1.0, 5.0 ], "rotation": [ diff --git a/src/input.rs b/src/input.rs index b44d056..ee7b724 100644 --- a/src/input.rs +++ b/src/input.rs @@ -354,6 +354,18 @@ impl InputState { } } + fn get_touch_drag_distance(&self) -> Vector2 { + if let Some(old_pos) = self.pressed_touch_positions.values().next() { + if let Some(newest_input) = self.touch_inputs.iter().filter(|ti| ti.phase == TouchPhase::Started || ti.phase == TouchPhase::Moved).last() { + newest_input.touch_location - old_pos + } else { + vec2(0.0, 0.0) + } + } else { + vec2(0.0, 0.0) + } + } + pub fn get_axis(self: &Self, axis_code: &str) -> f32 { if let Some(axis) = self.virtual_axes.get(axis_code) { axis.axis_inputs.iter().map(|item| { @@ -382,23 +394,15 @@ impl InputState { &AxisInput::Touch(touch_axis) => { match touch_axis { TouchAxis::Horizontal => { - if let Some(old_pos) = self.pressed_touch_positions.values().next() { - if let Some(newest_input) = self.touch_inputs.last() { - (newest_input.touch_location.x - old_pos.x) as f32 - } else { - 0.0 - } + if self.pressed_touch_positions.len() == 1 { + self.get_touch_drag_distance().x as f32 } else { 0.0 } }, TouchAxis::Vertical => { - if let Some(old_pos) = self.pressed_touch_positions.values().next() { - if let Some(newest_input) = self.touch_inputs.last() { - (newest_input.touch_location.y - old_pos.y) as f32 - } else { - 0.0 - } + if self.pressed_touch_positions.len() == 1 { + self.get_touch_drag_distance().y as f32 } else { 0.0 }