コード例 #1
0
        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();
                }
            }
        }
コード例 #2
0
        private static void HandleJoyConPair(JoyConState joyConState, JoyConPair joyCon, ref VirtualJoystickData data)
        {
            if (joyConState is JoyConLeftState)
            {
                var state = (JoyConLeftState)joyConState;

                data.ButtonUp    = state.ButtonUp;
                data.ButtonDown  = state.ButtonDown;
                data.ButtonLeft  = state.ButtonLeft;
                data.ButtonRight = state.ButtonRight;

                data.BackButtonLeft     = state.BackButton;
                data.RearBackButtonLeft = state.RearBackButton;
                data.SelectButton       = state.MinusButton;
                data.StickLeftButton    = state.StickButton;

                data.LeftAxisX = JoyConConstants.LeftJoyConXMultiplier * state.StickHorizontal +
                                 JoyConConstants.LeftJoyConOffsetX;
                data.LeftAxisY = JoyConConstants.LeftJoyConYMultiplier * -state.StickVertical +
                                 JoyConConstants.LeftJoyConOffsetY;

                //Merge With Other JoyCon
                if (joyCon?.RightJoyCon.CurrentState != null)
                {
                    HandleJoyConPair(joyCon.RightJoyCon.CurrentState, null, ref data);
                }
            }
            else if (joyConState is JoyConRightState)
            {
                var state = (JoyConRightState)joyConState;

                data.ButtonY = state.ButtonX;
                data.ButtonX = state.ButtonY;
                data.ButtonB = state.ButtonA;
                data.ButtonA = state.ButtonB;

                data.BackButtonRight     = state.BackButton;
                data.RearBackButtonRight = state.RearBackButton;
                data.StartButton         = state.PlusButton;
                data.StickRightButton    = state.StickButton;

                data.RightAxisX = JoyConConstants.RightJoyConXMultiplier * state.StickHorizontal +
                                  JoyConConstants.RightJoyConOffsetX;
                data.RightAxisY = JoyConConstants.RightJoyConYMultiplier * state.StickVertical +
                                  JoyConConstants.RightJoyConOffsetY;

                //Merge With Other JoyCon
                if (joyCon?.LeftJoyCon.CurrentState != null)
                {
                    HandleJoyConPair(joyCon.LeftJoyCon.CurrentState, null, ref data);
                }
            }
            else
            {
                throw new NotImplementedException();
            }
        }