Esempio n. 1
0
        private void timer_Tick(object sender, EventArgs e)
        {
            var timer = sender as DispatcherTimer;

            try
            {
                foreach (var device in _devices)
                {
                    var j        = device.CurrentJoystickState;
                    var prevAxis = _axis;
                    _axis = new int[] { j.X, j.Y };

                    // Состояние кнопок на предыдущей итерации

                    var prevButtons = _buttons[device.DeviceInformation.ProductGuid];

                    // Текущее состояние кнопок для устройства
                    var buttons = j.GetButtons();

                    for (var i = 0; i < buttons.Length; i++)
                    {
                        if ((buttons[i] != 0 && prevButtons == null) || (buttons[i] != 0 && prevButtons[i] != buttons[i]))
                        {
                            JoystickButtonDown?.Invoke(this, "J" + i);
                        }
                    }
                    if (_axis[0] != prevAxis[0] && _axis[0] != STRANGENUMBER)
                    {
                        JoystickButtonDown?.Invoke(this, "JX" + (_axis[0] > STRANGENUMBER ? "R" : "L"));
                    }
                    if (_axis[1] != prevAxis[1] && _axis[1] != STRANGENUMBER)
                    {
                        JoystickButtonDown?.Invoke(this, "JY" + (_axis[1] > STRANGENUMBER ? "R" : "L"));
                    }

                    _buttons[device.DeviceInformation.ProductGuid] = buttons;
                }
            }
            catch (Exception ex)
            {
                timer.Stop();
                UpdateDevices();
            }
        }
Esempio n. 2
0
 protected virtual void OnJoystickButtonDown(JoystickButton button) => JoystickButtonDown?.Invoke(button);