use reaction::mapping::action::InputAction;
use reaction::mapping::binding::{BindingConfig, InputBinding};
use reaction::mapping::resolver::InputMap;
use reaction::prelude::*;
fn main() {
let mut map = InputMap::new();
map.bind(
InputAction::MoveX,
BindingConfig::new(InputBinding::Key(KeyCode::KeyA))
.with_scale(-1.0)
.unwrap(),
)
.unwrap();
map.bind(
InputAction::MoveX,
BindingConfig::new(InputBinding::Key(KeyCode::KeyD))
.with_scale(1.0)
.unwrap(),
)
.unwrap();
let mut input = AdvancedInputState::new();
println!("Simulation: Opposing Inputs Cancellation");
println!("---------------------------------------");
println!("Frame 1: Pressing 'D' (Right)");
input.keyboard.press(KeyCode::KeyD, 0.0, 1);
let val1 = map.resolve(InputAction::MoveX, &input, None);
println!(" -> MoveX Value: {} (Moving Right)", val1);
println!("\nFrame 2: Also Pressing 'A' (Left)");
input.keyboard.press(KeyCode::KeyA, 0.0, 2);
let val2 = map.resolve(InputAction::MoveX, &input, None);
println!(" -> MoveX Value: {} (CANCELLED)", val2);
if val2.abs() < 0.001 {
println!(" ✅ Success: Opposed inputs resulted in zero output!");
}
println!("\nFrame 3: Releasing 'D' (Keep 'A' pressed)");
input.keyboard.release(KeyCode::KeyD, 3);
let val3 = map.resolve(InputAction::MoveX, &input, None);
println!(" -> MoveX Value: {} (Moving Left)", val3);
}