Support choosing which player uses a controller
This commit is contained in:
+37
-3
@@ -42,7 +42,7 @@ impl InputWindow {
|
||||
}
|
||||
}
|
||||
|
||||
fn render_key_bindings(&mut self, ui: &mut Ui, sim_id: SimId) {
|
||||
fn show_key_bindings(&mut self, ui: &mut Ui, sim_id: SimId) {
|
||||
let mappings = self.mappings.for_sim(sim_id);
|
||||
let binding_names = {
|
||||
let mapping = mappings.read().unwrap();
|
||||
@@ -86,6 +86,37 @@ impl InputWindow {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
fn show_gamepads(&mut self, ui: &mut Ui) {
|
||||
let mut gamepads = self.mappings.gamepad_info();
|
||||
gamepads.sort_by_key(|g| usize::from(g.id));
|
||||
|
||||
if gamepads.is_empty() {
|
||||
ui.label("No gamepads connected.");
|
||||
return;
|
||||
}
|
||||
|
||||
for (index, gamepad) in gamepads.into_iter().enumerate() {
|
||||
ui.horizontal(|ui| {
|
||||
ui.label(format!("Gamepad {index}: {}", gamepad.name));
|
||||
let mut bound_to = gamepad.bound_to;
|
||||
let mut rebind = false;
|
||||
rebind |= ui
|
||||
.selectable_value(&mut bound_to, Some(SimId::Player1), "Player 1")
|
||||
.changed();
|
||||
rebind |= ui
|
||||
.selectable_value(&mut bound_to, Some(SimId::Player2), "Player 2")
|
||||
.changed();
|
||||
rebind |= ui.selectable_value(&mut bound_to, None, "Nobody").changed();
|
||||
if rebind {
|
||||
match bound_to {
|
||||
Some(sim_id) => self.mappings.assign_gamepad(gamepad.id, sim_id),
|
||||
None => self.mappings.unassign_gamepad(gamepad.id),
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl AppWindow for InputWindow {
|
||||
@@ -104,12 +135,14 @@ impl AppWindow for InputWindow {
|
||||
ui.horizontal(|ui| {
|
||||
ui.selectable_value(&mut self.active_tab, InputTab::Player1, "Player 1");
|
||||
ui.selectable_value(&mut self.active_tab, InputTab::Player2, "Player 2");
|
||||
ui.selectable_value(&mut self.active_tab, InputTab::Gamepads, "Gamepads");
|
||||
});
|
||||
});
|
||||
CentralPanel::default().show(ctx, |ui| {
|
||||
match self.active_tab {
|
||||
InputTab::Player1 => self.render_key_bindings(ui, SimId::Player1),
|
||||
InputTab::Player2 => self.render_key_bindings(ui, SimId::Player2),
|
||||
InputTab::Player1 => self.show_key_bindings(ui, SimId::Player1),
|
||||
InputTab::Player2 => self.show_key_bindings(ui, SimId::Player2),
|
||||
InputTab::Gamepads => self.show_gamepads(ui),
|
||||
};
|
||||
});
|
||||
}
|
||||
@@ -130,4 +163,5 @@ impl AppWindow for InputWindow {
|
||||
enum InputTab {
|
||||
Player1,
|
||||
Player2,
|
||||
Gamepads,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user