diff --git a/src/ui/input.rs b/src/ui/input.rs index cdeda53..76a9e4e 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -58,7 +58,7 @@ fn bound_axis(x: &mut f64, y: &mut f64) { fn set_axis_from_joystick( profile: &ui::config::InputProfile, joystick: *mut sdl3_sys::joystick::SDL_Joystick, - deadzone: u16, + deadzone: i16, ) -> (f64, f64) { let mut x = 0.0; let mut y = 0.0; @@ -66,11 +66,11 @@ fn set_axis_from_joystick( let axis_position = unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_LEFT].id) }; - if axis_position.unsigned_abs() > deadzone + if axis_position.saturating_abs() > deadzone && axis_position as isize * profile.joystick_axis[AXIS_LEFT].axis as isize > 0 { - x = (axis_position.unsigned_abs() - deadzone) as f64 * MAX_AXIS_VALUE - / (i16::MAX as u16 - deadzone) as f64; + x = (axis_position.saturating_abs() - deadzone) as f64 * MAX_AXIS_VALUE + / (i16::MAX - deadzone) as f64; x *= profile.joystick_axis[AXIS_LEFT].axis as f64; } } @@ -78,11 +78,11 @@ fn set_axis_from_joystick( let axis_position = unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_RIGHT].id) }; - if axis_position.unsigned_abs() > deadzone + if axis_position.saturating_abs() > deadzone && axis_position as isize * profile.joystick_axis[AXIS_RIGHT].axis as isize > 0 { - x = (axis_position.unsigned_abs() - deadzone) as f64 * MAX_AXIS_VALUE - / (i16::MAX as u16 - deadzone) as f64; + x = (axis_position.saturating_abs() - deadzone) as f64 * MAX_AXIS_VALUE + / (i16::MAX - deadzone) as f64; x *= profile.joystick_axis[AXIS_RIGHT].axis as f64; } } @@ -90,11 +90,11 @@ fn set_axis_from_joystick( let axis_position = unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_DOWN].id) }; - if axis_position.unsigned_abs() > deadzone + if axis_position.saturating_abs() > deadzone && axis_position as isize * profile.joystick_axis[AXIS_DOWN].axis as isize > 0 { - y = (axis_position.unsigned_abs() - deadzone) as f64 * MAX_AXIS_VALUE - / (i16::MAX as u16 - deadzone) as f64; + y = (axis_position.saturating_abs() - deadzone) as f64 * MAX_AXIS_VALUE + / (i16::MAX - deadzone) as f64; y *= (profile.joystick_axis[AXIS_DOWN].axis as f64).neg(); } } @@ -102,11 +102,11 @@ fn set_axis_from_joystick( let axis_position = unsafe { sdl3_sys::joystick::SDL_GetJoystickAxis(joystick, profile.joystick_axis[AXIS_UP].id) }; - if axis_position.unsigned_abs() > deadzone + if axis_position.saturating_abs() > deadzone && axis_position as isize * profile.joystick_axis[AXIS_UP].axis as isize > 0 { - y = (axis_position.unsigned_abs() - deadzone) as f64 * MAX_AXIS_VALUE - / (i16::MAX as u16 - deadzone) as f64; + y = (axis_position.saturating_abs() - deadzone) as f64 * MAX_AXIS_VALUE + / (i16::MAX - deadzone) as f64; y *= (profile.joystick_axis[AXIS_UP].axis as f64).neg(); } } @@ -149,7 +149,7 @@ fn get_button_from_i32(button: i32) -> sdl3_sys::gamepad::SDL_GamepadButton { fn set_axis_from_controller( profile: &ui::config::InputProfile, controller: *mut sdl3_sys::gamepad::SDL_Gamepad, - deadzone: u16, + deadzone: i16, ) -> (f64, f64) { let mut x = 0.0; let mut y = 0.0; @@ -160,11 +160,11 @@ fn set_axis_from_controller( get_axis_from_i32(profile.controller_axis[AXIS_LEFT].id), ) }; - if axis_position.unsigned_abs() > deadzone + if axis_position.saturating_abs() > deadzone && axis_position as isize * profile.controller_axis[AXIS_LEFT].axis as isize > 0 { - x = (axis_position.unsigned_abs() - deadzone) as f64 * MAX_AXIS_VALUE - / (i16::MAX as u16 - deadzone) as f64; + x = (axis_position.saturating_abs() - deadzone) as f64 * MAX_AXIS_VALUE + / (i16::MAX - deadzone) as f64; x *= profile.controller_axis[AXIS_LEFT].axis as f64; } } @@ -175,11 +175,11 @@ fn set_axis_from_controller( get_axis_from_i32(profile.controller_axis[AXIS_RIGHT].id), ) }; - if axis_position.unsigned_abs() > deadzone + if axis_position.saturating_abs() > deadzone && axis_position as isize * profile.controller_axis[AXIS_RIGHT].axis as isize > 0 { - x = (axis_position.unsigned_abs() - deadzone) as f64 * MAX_AXIS_VALUE - / (i16::MAX as u16 - deadzone) as f64; + x = (axis_position.saturating_abs() - deadzone) as f64 * MAX_AXIS_VALUE + / (i16::MAX - deadzone) as f64; x *= profile.controller_axis[AXIS_RIGHT].axis as f64; } } @@ -190,11 +190,11 @@ fn set_axis_from_controller( get_axis_from_i32(profile.controller_axis[AXIS_DOWN].id), ) }; - if axis_position.unsigned_abs() > deadzone + if axis_position.saturating_abs() > deadzone && axis_position as isize * profile.controller_axis[AXIS_DOWN].axis as isize > 0 { - y = (axis_position.unsigned_abs() - deadzone) as f64 * MAX_AXIS_VALUE - / (i16::MAX as u16 - deadzone) as f64; + y = (axis_position.saturating_abs() - deadzone) as f64 * MAX_AXIS_VALUE + / (i16::MAX - deadzone) as f64; y *= (profile.controller_axis[AXIS_DOWN].axis as f64).neg(); } } @@ -205,11 +205,11 @@ fn set_axis_from_controller( get_axis_from_i32(profile.controller_axis[AXIS_UP].id), ) }; - if axis_position.unsigned_abs() > deadzone + if axis_position.saturating_abs() > deadzone && axis_position as isize * profile.controller_axis[AXIS_UP].axis as isize > 0 { - y = (axis_position.unsigned_abs() - deadzone) as f64 * MAX_AXIS_VALUE - / (i16::MAX as u16 - deadzone) as f64; + y = (axis_position.saturating_abs() - deadzone) as f64 * MAX_AXIS_VALUE + / (i16::MAX - deadzone) as f64; y *= (profile.controller_axis[AXIS_UP].axis as f64).neg(); } } @@ -444,7 +444,7 @@ pub fn get(ui: &ui::Ui, channel: usize) -> InputData { (x, y) = set_axis_from_keys(profile, ui.input.keyboard_state); } - let deadzone = (i16::MAX as i32 * profile.deadzone / 100) as u16; + let deadzone = (i16::MAX as i32 * profile.deadzone / 100) as i16; if !controller.is_null() { (x, y) = set_axis_from_controller(profile, controller, deadzone) } else if !joystick.is_null() {