rendered paste body [Flags]
public enum GamePadControls : uint
{
None = 0,
X = 0x00000001,
Y = 0x00000002,
A = 0x00000004,
B = 0x00000008,
RightStick = 0x00000010,
LeftStick = 0x00000020,
Start = 0x00000040,
Back = 0x00000080,
Up = 0x00000100,
Down = 0x00000200,
Left = 0x00000400,
Right = 0x00000800,
RightShoulder = 0x00001000,
LeftShoulder = 0x00002000,
AnalogLeftShoulder = 0x00004000,
AnalogRightShoulder = 0x00008000,
AnalogLeftStickLeft = 0x00010000,
AnalogLeftStickRight = 0x00020000,
AnalogLeftStickUp = 0x00040000,
AnalogLeftStickDown = 0x00080000,
AnalogRightStickLeft = 0x00100000,
AnalogRightStickRight = 0x00200000,
AnalogRightStickUp = 0x00400000,
AnalogRightStickDown = 0x00800000,
AllAnalogs = 0x00FFC000,
}
/* */
public static GamePadControls GetActiveControls(GamePadState gpdState)
{
GamePadButtons btns = gpdState.Buttons;
Vector2 thumbleft = gpdState.ThumbSticks.Left;
Vector2 thumbright = gpdState.ThumbSticks.Right;
GamePadTriggers trigs = gpdState.Triggers;
GamePadDPad dpad = gpdState.DPad;
GamePadControls retval = GamePadControls.None;
// Set button flags.
// ButtonState is an enum with two values: Released = 0, Pressed = 1
// Hence, taking that as a uint and shifting left to the proper
// flag bit and ORing the flag variable with the result will either
// set the correct flag if the button is pressed,
// or do nothing if the button isn't pressed.
retval |= (GamePadControls)((uint)btns.X);
retval |= (GamePadControls)((uint)btns.Y << 1);
retval |= (GamePadControls)((uint)btns.A << 2);
retval |= (GamePadControls)((uint)btns.B << 3);
retval |= (GamePadControls)((uint)btns.RightStick << 4);
retval |= (GamePadControls)((uint)btns.LeftStick << 5);
retval |= (GamePadControls)((uint)btns.Start << 6);
retval |= (GamePadControls)((uint)btns.Back << 7);
retval |= (GamePadControls)((uint)dpad.Up << 8);
retval |= (GamePadControls)((uint)dpad.Down << 9);
retval |= (GamePadControls)((uint)dpad.Left << 10);
retval |= (GamePadControls)((uint)dpad.Right << 11);
retval |= (GamePadControls)((uint)btns.RightShoulder << 12);
retval |= (GamePadControls)((uint)btns.LeftShoulder << 13);
// For analog controls, a comparison is required,
// after which the result (true = 1, false = 0) can be shifted
// in the manner described above to set (or not set) the correct flag.
retval |= (GamePadControls)((uint)(trigs.Left > DeadZone) << 14);
retval |= (GamePadControls)((uint)(trigs.Right > DeadZone) << 15);
retval |= (GamePadControls)((uint)(thumbleft.X < -DeadZone) << 16);
retval |= (GamePadControls)((uint)(thumbleft.X > DeadZone) << 17);
retval |= (GamePadControls)((uint)(thumbleft.Y < -DeadZone) << 18);
retval |= (GamePadControls)((uint)(thumbleft.Y > DeadZone) << 19);
retval |= (GamePadControls)((uint)(thumbright.X < -DeadZone) << 20);
retval |= (GamePadControls)((uint)(thumbright.X > DeadZone) << 21);
retval |= (GamePadControls)((uint)(thumbright.Y < -DeadZone) << 22);
retval |= (GamePadControls)((uint)(thumbright.Y > DeadZone) << 23);
return retval;
}