Fix controller code

This commit is contained in:
Simon Gellis 2026-05-21 23:45:00 -04:00
parent 6e36254203
commit d21cb4e5d0
1 changed files with 23 additions and 2 deletions

View File

@ -61,7 +61,14 @@ impl Controller {
let neg = mapping.neg; let neg = mapping.neg;
let pos = mapping.pos; let pos = mapping.pos;
axis_presses(value, pair_value, neg, pos) let (mut pressed, mut released) = axis_presses(value, pair_value, neg, pos);
if let Some(other) = mapping.pair.and_then(|p| self.map_axis(&event.id, &p)) {
let (other_pressed, other_released) =
axis_presses(pair_value, value, other.neg, other.pos);
pressed = pressed.union(other_pressed);
released = released.union(other_released);
}
(pressed, released)
} }
_ => { _ => {
return None; return None;
@ -135,7 +142,7 @@ fn axis_presses(value: f32, pair_value: f32, neg: VBKey, pos: VBKey) -> (VBKey,
let mut released = VBKey::empty(); let mut released = VBKey::empty();
let magnitude = value.hypot(pair_value); let magnitude = value.hypot(pair_value);
let abs_angle = pair_value.atan2(value); let abs_angle = pair_value.atan2(value).abs();
if magnitude < 0.65 { if magnitude < 0.65 {
released = released.union(neg).union(pos); released = released.union(neg).union(pos);
@ -204,4 +211,18 @@ mod tests {
assert_eq!(pressed, POS); assert_eq!(pressed, POS);
assert_eq!(released, NEG); assert_eq!(released, NEG);
} }
#[test]
fn ignores_diagonal_noise() {
let (pressed, released) = axis_presses(-1.0, -0.1484245, NEG, POS);
assert_eq!(pressed, NEG);
assert_eq!(released, POS);
}
#[test]
fn ignores_small_values() {
let (pressed, released) = axis_presses(-0.1484245, -1.0, NEG, POS);
assert_eq!(pressed, NONE);
assert_eq!(released, BOTH);
}
} }