private void OnJoyConSplitting(object sender, JoyConSplittingEventArgs args) { lock (SplittingMonitor) { if (args.SplittingType == SplittingType.ReadyToSplit) { if (_readyToSplitJoyCon == null) { Logger.Debug("JoyCon Ready to Split: " + args.SourceJoyCon); _readyToSplitJoyCon = args.SourceJoyCon; } else { if (_readyToSplitJoyCon.Equals(args.SourceJoyCon) || _readyToSplitJoyCon.Type == args.SourceJoyCon.Type) { return; } var joyConPair = _pairJoyConList.FirstOrDefault( joyCon => (joyCon.LeftJoyCon.Equals(_readyToSplitJoyCon) || joyCon.LeftJoyCon.Equals(args.SourceJoyCon)) && (joyCon.RightJoyCon.Equals(_readyToSplitJoyCon) || joyCon.LeftJoyCon.Equals(args.SourceJoyCon))); if (joyConPair == null) { return; } Logger.Debug("Start splitting of: " + args.SourceJoyCon + " and " + _readyToSplitJoyCon); lock (ListMonitor) { //Remove joycon pair _pairJoyConList.Remove(joyConPair); JoyConUpdated?.Invoke(this, new JoyConUpdateEventArgs(joyConPair, JoyConUpdateType.Disconnected)); //Add joycon singles joyConPair.LeftJoyCon.UnPair(); _singleJoyConList.Add(joyConPair.LeftJoyCon); JoyConUpdated?.Invoke(this, new JoyConUpdateEventArgs(joyConPair.LeftJoyCon, JoyConUpdateType.Connected)); _singleJoyConList.Add(joyConPair.RightJoyCon); JoyConUpdated?.Invoke(this, new JoyConUpdateEventArgs(joyConPair.RightJoyCon, JoyConUpdateType.Connected)); } _readyToSplitJoyCon = null; } } else if (args.SplittingType == SplittingType.CancelSplitting) { Logger.Debug("JoyCon Splitting canceled: " + args.SourceJoyCon); _readyToSplitJoyCon = null; } else { throw new NotImplementedException(); } } }
private void OnJoyConPairing(object sender, JoyConPairingEventArgs args) { lock (PairingMonitor) { if (args.PairingType == PairingType.ReadyToPair) { if (_readyToPairJoyCon == null) { Logger.Debug("JoyCon Ready to Pair: " + args.SourceJoyCon); _readyToPairJoyCon = args.SourceJoyCon; } else { if (_readyToPairJoyCon.Equals(args.SourceJoyCon) || _readyToPairJoyCon.Type == args.SourceJoyCon.Type) { return; //Detect same or same type (left / right) of joycon } Logger.Debug("Start pairing of: " + args.SourceJoyCon + " and " + _readyToPairJoyCon); //Run pairing var leftJoyCon = _readyToPairJoyCon.Type == JoyConType.Left ? _readyToPairJoyCon : args.SourceJoyCon; var rightJoyCon = _readyToPairJoyCon.Type == JoyConType.Right ? _readyToPairJoyCon : args.SourceJoyCon; lock (ListMonitor) { //Remove singles _singleJoyConList.Remove(leftJoyCon); JoyConUpdated?.Invoke(this, new JoyConUpdateEventArgs(leftJoyCon, JoyConUpdateType.Disconnected)); _singleJoyConList.Remove(rightJoyCon); JoyConUpdated?.Invoke(this, new JoyConUpdateEventArgs(rightJoyCon, JoyConUpdateType.Disconnected)); //Add pair as new var pairedJoyCon = new JoyConPair(leftJoyCon, rightJoyCon); leftJoyCon.PairWith(rightJoyCon); //TODO: In JoyConPair? _pairJoyConList.Add(pairedJoyCon); JoyConUpdated?.Invoke(this, new JoyConUpdateEventArgs(pairedJoyCon, JoyConUpdateType.Connected)); } _readyToPairJoyCon = null; } } else if (args.PairingType == PairingType.CancelPairing) { Logger.Debug("JoyCon Pairing canceled: " + args.SourceJoyCon); _readyToPairJoyCon = null; } else { throw new NotImplementedException(); } } }