public static Axis ApplyDeadzone(Axis axis, Deadzone deadzone) { return(new Axis(axis.Index, deadzone.Apply(axis.Position))); }
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; }
public static Thumbstick ApplyDeadzone(Thumbstick thumbstick, Deadzone deadzone) { return(new Thumbstick(thumbstick.Index, deadzone.Apply(thumbstick.X), deadzone.Apply(thumbstick.Y))); }
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; } } }