use reaction::mapping::action::InputAction;
use reaction::mapping::binding::{BindingConfig, InputBinding};
use reaction::mapping::resolver::InputMap;
use reaction::prelude::*;
use reaction::raw_input::common::*;
use reaction::raw_input::windows::WindowsRawInput;
use std::collections::HashMap;
#[test]
fn test_integration_input_flow() {
let raw_provider = WindowsRawInput::new();
let _manager = InputSystemManager::new(Box::new(raw_provider)).unwrap();
let mut map = InputMap::new();
map.bind(
InputAction::MoveX,
BindingConfig::new(InputBinding::Key(KeyCode::KeyD)),
)
.unwrap();
let mut keys = HashMap::new();
keys.insert(KeyCode::KeyD, true);
let raw_data = RawInputData {
keys,
mouse_buttons: HashMap::new(),
mouse_delta: (10, 0),
};
struct TestProvider {
data: Option<RawInputData>,
}
impl RawInputProvider for TestProvider {
fn initialize(&mut self) -> Result<()> {
Ok(())
}
fn poll(&mut self) -> Result<Option<RawInputData>> {
Ok(self.data.take())
}
fn shutdown(&mut self) -> Result<()> {
Ok(())
}
}
let mut manager = InputSystemManager::new(Box::new(TestProvider {
data: Some(raw_data),
}))
.unwrap();
manager.poll_and_update(1).unwrap();
assert!(manager.state().is_key_down(KeyCode::KeyD));
assert_eq!(manager.state().get_mouse_delta(), (10.0, 0.0));
let val = map.resolve(InputAction::MoveX, manager.state(), None);
assert_eq!(val, 1.0);
manager.end_frame(16.67);
assert_eq!(manager.state().get_mouse_delta(), (0.0, 0.0));
}