From 9dfc942dfced8d5f506d2930bbca14ed51122470 Mon Sep 17 00:00:00 2001 From: Simon Gellis Date: Fri, 20 Feb 2026 00:02:04 -0500 Subject: [PATCH] CLI flag to give P2 the controller --- src/app.rs | 2 +- src/config.rs | 3 +++ src/input.rs | 11 +++++++++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/app.rs b/src/app.rs index 2e0212a..f100e9c 100644 --- a/src/app.rs +++ b/src/app.rs @@ -74,7 +74,7 @@ impl Application { ) -> Self { let wgpu = WgpuState::new(); let icon = load_icon().ok().map(Arc::new); - let mappings = MappingProvider::new(persistence.clone()); + let mappings = MappingProvider::new(persistence.clone(), args.player2_controller); let shortcuts = ShortcutProvider::new(persistence.clone()); let controllers = ControllerManager::new(client.clone(), &mappings); let memory = Arc::new(MemoryClient::new(client.clone())); diff --git a/src/config.rs b/src/config.rs index c762f64..90384b3 100644 --- a/src/config.rs +++ b/src/config.rs @@ -43,6 +43,9 @@ pub struct CliArgs { /// Automatically open Player 2 for multiplayer #[arg(long)] pub player2: bool, + /// Map the first connected controller to Player 2 + #[arg(long)] + pub player2_controller: bool, } pub const COLOR_PRESETS: [[Color32; 2]; 3] = [ diff --git a/src/input.rs b/src/input.rs index 25b2cb5..47d2b3c 100644 --- a/src/input.rs +++ b/src/input.rs @@ -272,13 +272,14 @@ impl Mappings for InputMapping { #[derive(Clone)] pub struct MappingProvider { persistence: Persistence, + first_gamepad_is_p2: bool, device_mappings: Arc>>>>, sim_mappings: HashMap>>, gamepad_info: Arc>>, } impl MappingProvider { - pub fn new(persistence: Persistence) -> Self { + pub fn new(persistence: Persistence, first_gamepad_is_p2: bool) -> Self { let mut sim_mappings = HashMap::new(); let mut device_mappings = HashMap::new(); @@ -307,6 +308,7 @@ impl MappingProvider { device_mappings: Arc::new(RwLock::new(device_mappings)), gamepad_info: Arc::new(RwLock::new(HashMap::new())), sim_mappings, + first_gamepad_is_p2, } } @@ -338,7 +340,12 @@ impl MappingProvider { .clone(); drop(lock); let mut lock = self.gamepad_info.write().unwrap(); - let bound_to = SimId::values() + let players = if self.first_gamepad_is_p2 { + vec![SimId::Player2, SimId::Player1] + } else { + vec![SimId::Player1, SimId::Player2] + }; + let bound_to = players .into_iter() .find(|sim_id| lock.values().all(|info| info.bound_to != Some(*sim_id))); if let Entry::Vacant(entry) = lock.entry(gamepad.id()) {