private void chooseType_SelectedValueChanged(object sender, EventArgs e)
 {
     if (list_customControllers.SelectedItem != null)
     {
         SController v = (list_customControllers.SelectedItem as SController);
         v.type = (byte)(chooseType.SelectedIndex + 1);
     }
 }
 public override bool Equals(object obj)
 {
     //Check for null and compare run-time types.
     if ((obj == null) || !this.GetType().Equals(obj.GetType()))
     {
         return(false);
     }
     else
     {
         SController s = (SController)obj;
         return((s.product_id == product_id) && (s.vendor_id == vendor_id));
     }
 }
        private void list_customControllers_SelectedValueChanged(object sender, EventArgs e)
        {
            if (list_customControllers.SelectedItem != null)
            {
                SController v = (list_customControllers.SelectedItem as SController);
                tip_device.Show(v.name, list_customControllers);

                chooseType.SelectedIndex = v.type - 1;

                group_props.Enabled = true;
            }
            else
            {
                chooseType.SelectedIndex = -1;
                group_props.Enabled      = false;
            }
        }
Esempio n. 4
0
        public void CheckForNewControllers()
        {
            // move all code for initializing devices here and well as the initial code from Start()
            bool   isLeft  = false;
            IntPtr ptr     = HIDapi.hid_enumerate(0x0, 0x0);
            IntPtr top_ptr = ptr;

            hid_device_info enumerate; // Add device to list
            bool            foundNew = false;

            while (ptr != IntPtr.Zero)
            {
                SController thirdParty = null;
                enumerate = (hid_device_info)Marshal.PtrToStructure(ptr, typeof(hid_device_info));

                if (enumerate.serial_number == null)
                {
                    ptr = enumerate.next; // can't believe it took me this long to figure out why USB connections used up so much CPU.
                                          // it was getting stuck in an inf loop here!
                    continue;
                }

                bool validController = (enumerate.product_id == product_l || enumerate.product_id == product_r ||
                                        enumerate.product_id == product_pro || enumerate.product_id == product_snes) && enumerate.vendor_id == vendor_id;
                // check list of custom controllers specified
                foreach (SController v in Program.thirdPartyCons)
                {
                    if (enumerate.vendor_id == v.vendor_id && enumerate.product_id == v.product_id && enumerate.serial_number == v.serial_number)
                    {
                        validController = true;
                        thirdParty      = v;
                        break;
                    }
                }

                ushort prod_id = thirdParty == null ? enumerate.product_id : TypeToProdId(thirdParty.type);
                if (prod_id == 0)
                {
                    ptr = enumerate.next; // controller was not assigned a type, but advance ptr anyway
                    continue;
                }

                if (validController && !ControllerAlreadyAdded(enumerate.path))
                {
                    switch (prod_id)
                    {
                    case product_l:
                        isLeft = true;
                        form.AppendTextBox("Left Joy-Con connected.\r\n"); break;

                    case product_r:
                        isLeft = false;
                        form.AppendTextBox("Right Joy-Con connected.\r\n"); break;

                    case product_pro:
                        isLeft = true;
                        form.AppendTextBox("Pro controller connected.\r\n"); break;

                    case product_snes:
                        isLeft = true;
                        form.AppendTextBox("SNES controller connected.\r\n"); break;

                    default:
                        form.AppendTextBox("Non Joy-Con Nintendo input device skipped.\r\n"); break;
                    }

                    // Add controller to block-list for HidGuardian
                    if (Program.useHIDG)
                    {
                        HttpWebRequest request  = (HttpWebRequest)WebRequest.Create(@"http://*****:*****@"hwids=HID\" + enumerate.path.Split('#')[1].ToUpper();
                        var            data     = Encoding.UTF8.GetBytes(postData);

                        request.Method        = "POST";
                        request.ContentType   = "application/x-www-form-urlencoded; charset=UTF-8";
                        request.ContentLength = data.Length;

                        using (var stream = request.GetRequestStream())
                            stream.Write(data, 0, data.Length);

                        try {
                            var response       = (HttpWebResponse)request.GetResponse();
                            var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
                        } catch {
                            form.AppendTextBox("Unable to add controller to block-list.\r\n");
                        }
                    }
                    // -------------------- //

                    IntPtr handle = HIDapi.hid_open_path(enumerate.path);
                    try {
                        HIDapi.hid_set_nonblocking(handle, 1);
                    } catch {
                        form.AppendTextBox("Unable to open path to device - are you using the correct (64 vs 32-bit) version for your PC?\r\n");
                        break;
                    }

                    bool isPro  = prod_id == product_pro;
                    bool isSnes = prod_id == product_snes;
                    j.Add(new Joycon(handle, EnableIMU, EnableLocalize & EnableIMU, 0.05f, isLeft, enumerate.path, enumerate.serial_number, j.Count, isPro, isSnes, thirdParty != null));

                    foundNew = true;
                    j.Last().form = form;

                    if (j.Count < 5)
                    {
                        int ii = -1;
                        foreach (Button v in form.con)
                        {
                            ii++;
                            if (!v.Enabled)
                            {
                                System.Drawing.Bitmap temp;
                                switch (prod_id)
                                {
                                case (product_l):
                                    temp = Properties.Resources.jc_left_s; break;

                                case (product_r):
                                    temp = Properties.Resources.jc_right_s; break;

                                case (product_pro):
                                    temp = Properties.Resources.pro; break;

                                case (product_snes):
                                    temp = Properties.Resources.snes; break;

                                default:
                                    temp = Properties.Resources.cross; break;
                                }

                                v.Invoke(new MethodInvoker(delegate {
                                    v.Tag             = j.Last(); // assign controller to button
                                    v.Enabled         = true;
                                    v.Click          += new EventHandler(form.conBtnClick);
                                    v.BackgroundImage = temp;
                                }));

                                form.loc[ii].Invoke(new MethodInvoker(delegate {
                                    form.loc[ii].Tag    = v;
                                    form.loc[ii].Click += new EventHandler(form.locBtnClickAsync);
                                }));

                                break;
                            }
                        }
                    }

                    byte[] mac = new byte[6];
                    try {
                        for (int n = 0; n < 6; n++)
                        {
                            mac[n] = byte.Parse(enumerate.serial_number.Substring(n * 2, 2), System.Globalization.NumberStyles.HexNumber);
                        }
                    } catch (Exception e) {
                        // could not parse mac address
                    }
                    j[j.Count - 1].PadMacAddress = new PhysicalAddress(mac);
                }

                ptr = enumerate.next;
            }

            if (foundNew)   // attempt to auto join-up joycons on connection
            {
                Joycon temp = null;
                foreach (Joycon v in j)
                {
                    // Do not attach two controllers if they are either:
                    // - Not a Joycon
                    // - Already attached to another Joycon (that isn't itself)
                    if (v.isPro || (v.other != null && v.other != v))
                    {
                        continue;
                    }

                    // Otherwise, iterate through and find the Joycon with the lowest
                    // id that has not been attached already (Does not include self)
                    if (temp == null)
                    {
                        temp = v;
                    }
                    else if (temp.isLeft != v.isLeft && v.other == null)
                    {
                        temp.other = v;
                        v.other    = temp;

                        if (temp.out_xbox != null)
                        {
                            try {
                                temp.out_xbox.Disconnect();
                            } catch (Exception e) {
                                // it wasn't connected in the first place, go figure
                            }
                        }
                        if (temp.out_ds4 != null)
                        {
                            try {
                                temp.out_ds4.Disconnect();
                            } catch (Exception e) {
                                // it wasn't connected in the first place, go figure
                            }
                        }
                        temp.out_xbox = null;
                        temp.out_ds4  = null;

                        foreach (Button b in form.con)
                        {
                            if (b.Tag == v || b.Tag == temp)
                            {
                                Joycon tt = (b.Tag == v) ? v : (b.Tag == temp) ? temp : v;
                                b.BackgroundImage = tt.isLeft ? Properties.Resources.jc_left : Properties.Resources.jc_right;
                            }
                        }

                        temp = null;    // repeat
                    }
                }
            }

            HIDapi.hid_free_enumeration(top_ptr);

            bool on = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["HomeLEDOn"].Value.ToLower() == "true";

            foreach (Joycon jc in j)   // Connect device straight away
            {
                if (jc.state == Joycon.state_.NOT_ATTACHED)
                {
                    if (jc.out_xbox != null)
                    {
                        jc.out_xbox.Connect();
                    }
                    if (jc.out_ds4 != null)
                    {
                        jc.out_ds4.Connect();
                    }

                    try {
                        jc.Attach();
                    } catch (Exception e) {
                        jc.state = Joycon.state_.DROPPED;
                        continue;
                    }

                    jc.SetHomeLight(on);

                    jc.Begin();
                    if (form.allowCalibration)
                    {
                        jc.getActiveData();
                    }
                }
            }
        }
Esempio n. 5
0
    public void FixedUpdateController()
    {
        #region Jump
        if (isFly != null)
        {
            if ((bool)isFly?.Invoke())
            {
                Debug.Log("jump");
                isFly    -= SInput.InputJump;
                isGround += SController.IsGround;
                SController.Jump(_extraJump, _jumpForce, _rb);

                SetLastState();
                StateMachine.SetState(State.JUMP, _animate);
            }
        }

        if (isGround != null)
        {
            if (!(bool)isGround?.Invoke(_groundChek, _checkRadius, _whatIsGround))
            {
                _isJump = true; //Ждем достаточной высоты для активации чека
            }
            else if (_isJump)
            {
                Debug.Log("ground");
                isGround -= SController.IsGround;
                isFly    += SInput.InputJump;

                StateMachine.SetState(_lastState, _animate);
                _isJump = false;
            }
        }

        if (isFly != null && isGround != null) //костыль на баг
        {
            isGround -= SController.IsGround;
            Debug.Log("error");
        }
        #endregion

        #region Move
        if (checInput != null) //Вводные перемещения
        {
            if (checInput?.Invoke() != 0 && isMove == null)
            {
                isMove += SController.Move;
                goFlip += SController.Flip;

                StateMachine.SetState(State.MOVE, _animate);
                SetLastState();
            }
            else if (checInput?.Invoke() == 0 && isMove != null)
            {
                isMove?.Invoke(0, _speed, _rb); //Костыль на отпись, сохраняется текущее значение, изменить контроллер
                isMove -= SController.Move;
                goFlip -= SController.Flip;

                StateMachine.SetState(State.IDLE, _animate);
                SetLastState();
            }
        }

        if (isMove != null)
        {
            if (!_isAttack)
            {
                isMove?.Invoke(SInput.InputControll(), _speed, _rb);
                if (goFlip != null)
                {
                    goFlip?.Invoke(_rb, _enemyGFX);
                }
            }
            else
            {
                isMove?.Invoke(0, _speed, _rb);
            }
        }
        #endregion

        #region Attack
        if (isAttack != null) //костыль на фикс проверки
        {
            if (isAttack?.Invoke() == 1)
            {
                SController.AttackCollision(_colliderAttack[0], true);

                if (!_isAttack)
                {
                    SetLastState();
                }
                StateMachine.SetState(State.ATTACK, _animate);

                isFly     -= SInput.InputJump;
                checInput -= SInput.InputControll;
                if (isMove != null)
                {
                    isMove?.Invoke(0, _speed, _rb);
                }


                _isAttack = true;
            }

            if (!_colliderAttack[0].active && _isAttack)
            {
                StateMachine.SetState(_lastState, _animate);
                SetLastState();
                _isAttack = false;

                isFly     += SInput.InputJump;
                checInput += SInput.InputControll;
            }
        }
        #endregion



        if (isFly == null && checInput == null && isAttack == null) //Костыль на нулевое состояние
        {
            StateMachine.SetState(State.IDLE, _animate);
        }
    }