Helper library for using XInput controllers in a .NET application in a way similar to a keyboard and a mouse.
The Controller
object contains events that trigger when the user performs an input on the controller.
The library also implements deadzones for the thumb sticks. Based on code from https://github.com/Minimuino/thumbstick-deadzones.
- .NET Framework 4.8
- SharpDX 4.2.0 - NuGet
using XController;
...
// Initializes a new Controller object, with UserIndex = One
Controller controller = new Controller(UserIndex.One);
// Prints out the pressed buttons
Console.WriteLine(controller.Buttons.ToString());
// Prints out the current thumb stick values
// in format X: 0.000, Y: 0.000
Console.WriteLine(controller.LeftThumb.ToString());
Console.WriteLine(controller.RightThumb.ToString());
-
Connected
: bool- Gets the controller connection status
-
UserIndex
: UserIndex- Gets or sets the controller user index
-
PollingInterval
: int- Gets or sets the controller polling interval
- Value cannot be less than 1
-
EnablePolling
: bool- Gets or sets if polling is enabled
-
Buttons
: Buttons- Gets the button press state
-
Triggers
: Triggers- Gets the value of the triggers
- Range: 0 to 1
-
LeftThumb
: Vector- Gets the value of the left thumbstick
- Range: -1 to 1
-
LeftDeadzone
: double- Gets or sets the dead zone ratio of the left thumbstick
- Range: 0 to 1
-
RightThumb
: Vector- Gets the value of the left thumbstick
- Range: -1 to 1
-
RightDeadzone
: double- Gets or sets the dead zone ratio of the left thumbstick
- Range: 0 to 1
-
ConnectionStatusChanged
: EventArgs.Empty- Event that triggers when connection status changes
-
ButtonsPressed
: ButtonsPressedEventArgs- Event that triggers when a button is pressed
-
ButtonsReleased
: ButtonsReleasedEventArgs- Event that triggers when a button is released
-
TriggersMoved
: EventArgs.Empty- Event that triggers when the trigger levers are moved
-
LeftThumbMoved
: EventArgs.Empty- Event that triggers when the left thumb stick is moved
-
RightThumbMoved
: EventArgs.Empty- Event that triggers when the right thumb stick is moved
The following information applies for both ButtonsPressedEventArgs
and ButtonsReleasedEventArgs
.
-
PreviousState
- The state before the change that triggered the event
-
NewState
- The state that triggered the event
-
Buttons
- Buttons that changed between the previous and new state (that were pressed or released)
- Use this to handle cases where a button is pressed/released while another button is also pressed
The UserIndex
enum defines the user index to be chosen for the controller through the XInput API.
Available values:
Any
= 0xFF (byte.MaxValue)One
= 0Two
= 1Three
= 3Four
= 4
XController.Controller.UserIndex
is equivalent to SharpDX.XInput.UserIndex
and a variable of one type can be directly type casted into the other type.
From XController.cs:
public Controller(UserIndex userIndex = UserIndex.Any)
{
...
_controller = new SharpDX.XInput.Controller((SharpDX.XInput.UserIndex)userIndex);
...
}
Included is also the XControllerTest WPF app that showcases the use of the library.