When the UI consumes an input, don't send it to the game

This commit is contained in:
2025-02-15 18:33:18 -05:00
parent ebe444870f
commit ba15dc77ae
3 changed files with 53 additions and 41 deletions
+17 -12
View File
@@ -198,58 +198,63 @@ impl AppWindow for InputWindow {
});
}
fn handle_key_event(&mut self, event: &winit::event::KeyEvent) {
fn handle_key_event(&mut self, event: &winit::event::KeyEvent) -> bool {
if !event.state.is_pressed() {
return;
return false;
}
let sim_id = match self.active_tab {
InputTab::Player1 => SimId::Player1,
InputTab::Player2 => SimId::Player2,
_ => {
return;
return false;
}
};
let Some(vb) = self.now_binding.take() else {
return;
return false;
};
let mut mappings = self.mappings.for_sim(sim_id).write().unwrap();
mappings.add_keyboard_mapping(vb, event.physical_key);
drop(mappings);
self.mappings.save();
true
}
fn handle_gamepad_event(&mut self, event: &gilrs::Event) {
fn handle_gamepad_event(&mut self, event: &gilrs::Event) -> bool {
let InputTab::RebindGamepad(gamepad_id) = self.active_tab else {
return;
return false;
};
if gamepad_id != event.id {
return;
return false;
}
let Some(mappings) = self.mappings.for_gamepad(gamepad_id) else {
return;
return false;
};
let Some(vb) = self.now_binding else {
return;
return false;
};
match event.event {
EventType::ButtonPressed(_, code) => {
let mut mapping = mappings.write().unwrap();
mapping.add_button_mapping(vb, code);
self.now_binding.take();
true
}
EventType::AxisChanged(_, value, code) => {
if value < -0.75 {
let mut mapping = mappings.write().unwrap();
mapping.add_axis_neg_mapping(vb, code);
self.now_binding.take();
}
if value > 0.75 {
true
} else if value > 0.75 {
let mut mapping = mappings.write().unwrap();
mapping.add_axis_pos_mapping(vb, code);
self.now_binding.take();
true
} else {
false
}
}
_ => {}
_ => false,
}
}
}