private static void InputReportReceived(HidDevice sender, HidInputReportReceivedEventArgs args) { var dPad = (int)args.Report.GetNumericControl(0x01, 0x39).Value; var lstickX = args.Report.GetNumericControl(0x01, 0x30).Value - 32768; var lstickY = args.Report.GetNumericControl(0x01, 0x31).Value - 32768; var rstickX = args.Report.GetNumericControl(0x01, 0x33).Value - 32768; var rstickY = args.Report.GetNumericControl(0x01, 0x34).Value - 32768; var lt = (int)Math.Max(0, args.Report.GetNumericControl(0x01, 0x32).Value - 32768); var rt = (int)Math.Max(0, -1 * (args.Report.GetNumericControl(0x01, 0x32).Value - 32768)); foreach (var btn in args.Report.ActivatedBooleanControls) //StartAsync = 7, Back = 6 { var id = (int)(btn.Id - 5); if (id < 4) { FunctionButtonChanged?.Invoke(id); } else if (id >= 4 && id < 6) { BumperButtonChanged?.Invoke(id); } else { FunctionButtonChanged?.Invoke(id); } } if (_leftTrigger != lt) { LeftTriggerChanged?.Invoke(lt); _leftTrigger = lt; } if (_rightTrigger != rt) { RightTriggerChanged?.Invoke(rt); _rightTrigger = rt; } var lStickMagnitude = GetMagnitude(lstickX, lstickY); var rStickMagnitude = GetMagnitude(rstickX, rstickY); var vector = new ControllerVector { Direction = CoordinatesToDirection(lstickX, lstickY), Magnitude = lStickMagnitude }; if (!_leftStickDirectionVector.Equals(vector) && LeftDirectionChanged != null) { _leftStickDirectionVector = vector; LeftDirectionChanged(_leftStickDirectionVector); } vector = new ControllerVector { Direction = CoordinatesToDirection(rstickX, rstickY), Magnitude = rStickMagnitude }; if (!_rightStickDirectionVector.Equals(vector) && RightDirectionChanged != null) { _rightStickDirectionVector = vector; RightDirectionChanged(_rightStickDirectionVector); } vector = new ControllerVector { Direction = (ControllerDirection)dPad, Magnitude = 10000 }; if (_dpadDirectionVector.Equals(vector) || DpadDirectionChanged == null) { return; } _dpadDirectionVector = vector; DpadDirectionChanged(vector); }
protected virtual void OnRightTriggerChanged(TriggerChangedEventArgs e) { RightTriggerChanged?.Invoke(this, e); }