When the UI consumes an input, don't send it to the game
This commit is contained in:
+17
-12
@@ -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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user