use reaction::mapping::action::InputAction;
use reaction::mapping::binding::{BindingConfig, InputBinding};
use reaction::mapping::resolver::InputMap;
use reaction::prelude::*;
#[test]
fn test_deadzone_rescaling() {
let mut map = InputMap::new();
let mut input = AdvancedInputState::new();
input.gamepads.get_mut(GamepadId::One).deadzone = 0.0;
let binding = BindingConfig::new(InputBinding::GamepadAxis(GamepadAxis::LeftStickX))
.with_deadzone(0.2)
.unwrap();
map.bind(InputAction::MoveX, binding).unwrap();
input
.gamepads
.get_mut(GamepadId::One)
.set_axis(GamepadAxis::LeftStickX, 0.1);
assert_eq!(
map.resolve(InputAction::MoveX, &input, Some(GamepadId::One)),
0.0
);
input
.gamepads
.get_mut(GamepadId::One)
.set_axis(GamepadAxis::LeftStickX, 0.2);
assert_eq!(
map.resolve(InputAction::MoveX, &input, Some(GamepadId::One)),
0.0
);
input
.gamepads
.get_mut(GamepadId::One)
.set_axis(GamepadAxis::LeftStickX, 0.3);
let val = map.resolve(InputAction::MoveX, &input, Some(GamepadId::One));
assert!((val - 0.125).abs() < 0.001);
input
.gamepads
.get_mut(GamepadId::One)
.set_axis(GamepadAxis::LeftStickX, 0.6);
let val = map.resolve(InputAction::MoveX, &input, Some(GamepadId::One));
assert!((val - 0.5).abs() < 0.001);
input
.gamepads
.get_mut(GamepadId::One)
.set_axis(GamepadAxis::LeftStickX, 1.0);
assert_eq!(
map.resolve(InputAction::MoveX, &input, Some(GamepadId::One)),
1.0
);
input
.gamepads
.get_mut(GamepadId::One)
.set_axis(GamepadAxis::LeftStickX, -0.6);
let val = map.resolve(InputAction::MoveX, &input, Some(GamepadId::One));
assert!((val - (-0.5)).abs() < 0.001);
}