Exemple #1
0
 public static Axis ApplyDeadzone(Axis axis, Deadzone deadzone)
 {
     return(new Axis(axis.Index, deadzone.Apply(axis.Position)));
 }
Exemple #2
0
        public void Update()
        {
            if (!GlfwProvider.GLFW.Value.GetGamepadState(Index, out var state))
            {
                // Detect when this gamepad disconnects
                if (_connected)
                {
                    OnConnectionChanged?.Invoke(this, false);
                    _connected = false;
                }

                return;
            }

            // Detect when this gamepad connects
            if (!_connected)
            {
                OnConnectionChanged?.Invoke(this, true);
                _connected = true;
            }

            // Buttons
            for (var i = 0; i < GamepadButtonCount; i++)
            {
                if ((_buttons[i].Pressed ? 1 : 0) != state.Buttons[i])
                {
                    (_buttons[i].Pressed ? ButtonUp : ButtonDown)?.Invoke
                        (this, _buttons[i] = new Button((ButtonName)i, i, state.Buttons[i] == 1));
                }

                _buttons[i] = new Button((ButtonName)i, i, state.Buttons[i] == 1);
            }

            // Left Thumbstick
            var thumbstick0 = new Thumbstick(0, Deadzone.Apply(state.Axes[0]), Deadzone.Apply(state.Axes[1]));

            if (_thumbsticks[0].X != thumbstick0.X || _thumbsticks[0].Y != thumbstick0.Y)
            {
                ThumbstickMoved?.Invoke
                (
                    this,
                    thumbstick0
                );
            }

            _thumbsticks[0] = thumbstick0;

            // Right Thumbstick
            var thumbstick1 = new Thumbstick(1, Deadzone.Apply(state.Axes[2]), Deadzone.Apply(state.Axes[3]));

            if (_thumbsticks[1].X != thumbstick1.X || _thumbsticks[1].Y != thumbstick1.Y)
            {
                ThumbstickMoved?.Invoke
                (
                    this,
                    thumbstick1
                );
            }

            _thumbsticks[1] = thumbstick1;

            // Left Trigger
            var trigger0 = new Trigger(0, Deadzone.Apply(state.Axes[4]));

            if (_triggers[0].Position != trigger0.Position)
            {
                TriggerMoved?.Invoke(this, trigger0);
            }

            _triggers[0] = trigger0;

            // Right Trigger
            var trigger1 = new Trigger(1, Deadzone.Apply(state.Axes[5]));

            if (_triggers[1].Position != trigger1.Position)
            {
                TriggerMoved?.Invoke(this, trigger1);
            }

            _triggers[1] = trigger1;
        }
Exemple #3
0
 public static Thumbstick ApplyDeadzone(Thumbstick thumbstick, Deadzone deadzone)
 {
     return(new Thumbstick(thumbstick.Index, deadzone.Apply(thumbstick.X), deadzone.Apply(thumbstick.Y)));
 }
Exemple #4
0
        public void DoEvent(Event @event)
        {
            switch ((EventType)@event.Type)
            {
            case EventType.Controlleraxismotion:
            {
                switch ((GameControllerAxis)@event.Caxis.Axis)
                {
                case GameControllerAxis.ControllerAxisLeftx:
                {
                    var thumbstick0 = new Thumbstick(0,
                                                     Deadzone.Apply((float)@event.Caxis.Value / short.MaxValue),
                                                     Deadzone.Apply(_thumbsticks[0].Y));

                    if (thumbstick0.X != _thumbsticks[0].X)
                    {
                        _thumbsticksChanged[0] = true;
                    }
                    _thumbsticks[0] = thumbstick0;
                    break;
                }

                case GameControllerAxis.ControllerAxisLefty:
                {
                    var thumbstick0 = new Thumbstick(0,
                                                     Deadzone.Apply(_thumbsticks[0].X),
                                                     Deadzone.Apply((float)@event.Caxis.Value / short.MaxValue));

                    if (thumbstick0.Y != _thumbsticks[0].Y)
                    {
                        _thumbsticksChanged[0] = true;
                    }
                    _thumbsticks[0] = thumbstick0;
                    break;
                }

                case GameControllerAxis.ControllerAxisRightx:
                {
                    var thumbstick1 = new Thumbstick(1,
                                                     Deadzone.Apply((float)@event.Caxis.Value / short.MaxValue),
                                                     Deadzone.Apply(_thumbsticks[1].Y));

                    if (thumbstick1.X != _thumbsticks[1].X)
                    {
                        _thumbsticksChanged[1] = true;
                    }
                    _thumbsticks[1] = thumbstick1;
                    break;
                }

                case GameControllerAxis.ControllerAxisRighty:
                {
                    var thumbstick1 = new Thumbstick(1,
                                                     Deadzone.Apply(_thumbsticks[1].X),
                                                     Deadzone.Apply((float)@event.Caxis.Value / short.MaxValue));

                    if (thumbstick1.Y != _thumbsticks[1].Y)
                    {
                        _thumbsticksChanged[1] = true;
                    }
                    _thumbsticks[1] = thumbstick1;
                    break;
                }

                case GameControllerAxis.ControllerAxisTriggerleft:
                {
                    TriggerMoved?.Invoke
                        (this, _triggers[0] = new Trigger(0, (float)@event.Caxis.Value / short.MaxValue));
                    break;
                }

                case GameControllerAxis.ControllerAxisTriggerright:
                {
                    TriggerMoved?.Invoke
                        (this, _triggers[1] = new Trigger(1, (float)@event.Caxis.Value / short.MaxValue));
                    break;
                }
                }

                break;
            }

            case EventType.Controllerbuttondown:
            {
                var ogBtn = _buttons[@event.Cbutton.Button];
                ButtonDown?.Invoke
                    (this, _buttons[@event.Cbutton.Button] = new Button(ogBtn.Name, ogBtn.Index, true));
                break;
            }

            case EventType.Controllerbuttonup:
            {
                var ogBtn = _buttons[@event.Cbutton.Button];
                ButtonUp?.Invoke
                    (this, _buttons[@event.Cbutton.Button] = new Button(ogBtn.Name, ogBtn.Index, false));
                break;
            }

            case EventType.Controllerdeviceadded:
            {
                _ctx.ChangeConnection(this, true);
                break;
            }

            case EventType.Controllerdeviceremoved:
            {
                _ctx.ChangeConnection(this, false);
                break;
            }
            }

            for (var i = 0; i < _thumbsticksChanged.Length; i++)
            {
                if (_thumbsticksChanged[i])
                {
                    ThumbstickMoved?.Invoke(this, _thumbsticks[i]);
                    _thumbsticksChanged[i] = false;
                }
            }
        }