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; } }
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(); } } } }
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); } }