/// <summary> /// Gets the current state of a game pad controller, using a specified dead zone /// on analog stick positions. /// </summary> /// <param name="index">Index for the controller you want to query.</param> /// <param name="deadZoneMode">Enumerated value that specifies what dead zone type to use.</param> /// <returns>The state of the controller.</returns> public static GamePadState GetState(int index, GamePadDeadZone deadZoneMode) { if (index < 0 || index >= PlatformGetMaxNumberOfGamePads()) throw new InvalidOperationException(); return PlatformGetState(index, deadZoneMode); }
private Vector2 ApplyDeadZone(GamePadDeadZone deadZoneMode, float deadZone, Vector2 thumbstickPosition) { // XNA applies dead zones before rounding/clamping values. The public ctor does not allow this because the dead zone must be known before // Apply dead zone switch (deadZoneMode) { case GamePadDeadZone.None: break; case GamePadDeadZone.IndependentAxes: thumbstickPosition = ExcludeIndependentAxesDeadZone(thumbstickPosition, deadZone); break; case GamePadDeadZone.Circular: thumbstickPosition = ExcludeCircularDeadZone(thumbstickPosition, deadZone); break; } // Apply clamp if (deadZoneMode == GamePadDeadZone.Circular) { if (thumbstickPosition.LengthSquared() > 1f) { thumbstickPosition.Normalize(); } } else { thumbstickPosition = new Vector2(MathHelper.Clamp(thumbstickPosition.X, -1f, 1f), MathHelper.Clamp(thumbstickPosition.Y, -1f, 1f)); } return(thumbstickPosition); }
internal GamePadTriggers( float leftTrigger, float rightTrigger, GamePadDeadZone deadZoneMode ) { /* XNA applies dead zones before rounding/clamping values. * The public constructor does not allow this because the * dead zone must be known first. */ if (deadZoneMode == GamePadDeadZone.None) { _left = Calc.Clamp(leftTrigger, 0.0f, 1.0f); _right = Calc.Clamp(rightTrigger, 0.0f, 1.0f); } else { _left = Calc.Clamp( GamePad.ExcludeAxisDeadZone( leftTrigger, GamePad.TRIGGER_THRESHOLD ), 0.0f, 1.0f ); _right = Calc.Clamp( GamePad.ExcludeAxisDeadZone( rightTrigger, GamePad.TRIGGER_THRESHOLD ), 0.0f, 1.0f ); } }
public static GamePadThumbSticks.StickValue ApplyRightStickDeadZone( short valueX, short valueY, GamePadDeadZone deadZoneMode) { return(Utils.ApplyStickDeadZone(valueX, valueY, deadZoneMode, 8689)); }
private static GamePadState PlatformGetState(int index, GamePadDeadZone deadZoneMode) { return(new GamePadState() { IsConnected = false }); }
public static GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone deadZoneMode) { return(FNAPlatform.GetGamePadState( (int)playerIndex, deadZoneMode )); }
public static GamePadState GetState( PlayerIndex playerIndex, GamePadDeadZone deadZone ) { IntPtr gamePadStatePointer = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(GamePadState.RawState))); uint result = Imports.XInputGamePadGetState((uint)playerIndex, gamePadStatePointer); GamePadState.RawState state = (GamePadState.RawState)Marshal.PtrToStructure(gamePadStatePointer, typeof(GamePadState.RawState)); return new GamePadState(result == Utils.Success, state, deadZone); }
public AdvanceGamePad(PlayerIndex playerIndex, GamePadDeadZone deadZone) { playerIndex_ = playerIndex; deadZone_ = deadZone; old_ = GamePad.GetState(playerIndex, deadZone); new_ = old_; }
private static Vector2 ConvertThumbStick(short x, short y, short deadZone, GamePadDeadZone deadZoneMode) { if (deadZoneMode == GamePadDeadZone.IndependentAxes) { // using int to prevent overrun int fx = x; int fy = y; int fdz = deadZone; if (fx * fx < fdz * fdz) { x = 0; } if (fy * fy < fdz * fdz) { y = 0; } } else if (deadZoneMode == GamePadDeadZone.Circular) { // using int to prevent overrun int fx = x; int fy = y; int fdz = deadZone; if ((fx * fx) + (fy * fy) < fdz * fdz) { x = 0; y = 0; } } return(new Vector2(x < 0 ? -((float)x / (float)short.MinValue) : (float)x / (float)short.MaxValue, y < 0 ? -((float)y / (float)short.MinValue) : (float)y / (float)short.MaxValue)); }
public static GamePadState GetState(GamePadIndex gamepad_index, GamePadDeadZone deadZoneMode) { return(Platform.GetGamePadState( (int)gamepad_index, deadZoneMode )); }
static GamePadState ReadState(int index, GamePadDeadZone deadZone) { const float DeadZoneSize = 0.27f; var device = devices[index]; var c = Settings[index]; if (device == IntPtr.Zero || c == null) { return(GamePadState.Default); } var leftStick = c.LeftStick.ReadAxisPair(device); var rightStick = c.RightStick.ReadAxisPair(device); GamePadThumbSticks sticks = new GamePadThumbSticks(new Vector2(leftStick.X, leftStick.Y), new Vector2(rightStick.X, rightStick.Y), deadZone); GamePadTriggers triggers = new GamePadTriggers(c.LeftTrigger.ReadFloat(device), c.RightTrigger.ReadFloat(device)); Buttons buttonState = ReadButtons(device, c, DeadZoneSize); buttonState |= StickToButtons(sticks.Left, Buttons.LeftThumbstickLeft, Buttons.LeftThumbstickRight, Buttons.LeftThumbstickUp, Buttons.LeftThumbstickDown, DeadZoneSize); buttonState |= StickToButtons(sticks.Right, Buttons.RightThumbstickLeft, Buttons.RightThumbstickRight, Buttons.RightThumbstickUp, Buttons.RightThumbstickDown, DeadZoneSize); buttonState |= TriggerToButton(triggers.Left, Buttons.LeftTrigger, DeadZoneSize); buttonState |= TriggerToButton(triggers.Right, Buttons.RightTrigger, DeadZoneSize); GamePadButtons buttons = new GamePadButtons(buttonState); GamePadDPad dpad = new GamePadDPad(buttons.buttons); GamePadState g = new GamePadState(sticks, triggers, buttons, dpad); return(g); }
private static GamePadState PlatformGetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode) { if (!Gamepads.ContainsKey(index)) { return(GamePadState.Default); } var gamepadInfo = Gamepads[index]; var gdevice = gamepadInfo.Device; // Y gamepad axis is rotate between SDL and XNA var thumbSticks = new GamePadThumbSticks( new Vector2( GetFromSdlAxis(Sdl.GameController.GetAxis(gdevice, Sdl.GameController.Axis.LeftX)), GetFromSdlAxis(Sdl.GameController.GetAxis(gdevice, Sdl.GameController.Axis.LeftY)) * -1f ), new Vector2( GetFromSdlAxis(Sdl.GameController.GetAxis(gdevice, Sdl.GameController.Axis.RightX)), GetFromSdlAxis(Sdl.GameController.GetAxis(gdevice, Sdl.GameController.Axis.RightY)) * -1f ), leftDeadZoneMode, rightDeadZoneMode ); var triggers = new GamePadTriggers( GetFromSdlAxis(Sdl.GameController.GetAxis(gdevice, Sdl.GameController.Axis.TriggerLeft)), GetFromSdlAxis(Sdl.GameController.GetAxis(gdevice, Sdl.GameController.Axis.TriggerRight)) ); var buttons = new GamePadButtons( ((Sdl.GameController.GetButton(gdevice, Sdl.GameController.Button.A) == 1) ? Buttons.A : 0) | ((Sdl.GameController.GetButton(gdevice, Sdl.GameController.Button.B) == 1) ? Buttons.B : 0) | ((Sdl.GameController.GetButton(gdevice, Sdl.GameController.Button.Back) == 1) ? Buttons.Back : 0) | ((Sdl.GameController.GetButton(gdevice, Sdl.GameController.Button.Guide) == 1) ? Buttons.BigButton : 0) | ((Sdl.GameController.GetButton(gdevice, Sdl.GameController.Button.LeftShoulder) == 1) ? Buttons.LeftShoulder : 0) | ((Sdl.GameController.GetButton(gdevice, Sdl.GameController.Button.RightShoulder) == 1) ? Buttons.RightShoulder : 0) | ((Sdl.GameController.GetButton(gdevice, Sdl.GameController.Button.LeftStick) == 1) ? Buttons.LeftStick : 0) | ((Sdl.GameController.GetButton(gdevice, Sdl.GameController.Button.RightStick) == 1) ? Buttons.RightStick : 0) | ((Sdl.GameController.GetButton(gdevice, Sdl.GameController.Button.Start) == 1) ? Buttons.Start : 0) | ((Sdl.GameController.GetButton(gdevice, Sdl.GameController.Button.X) == 1) ? Buttons.X : 0) | ((Sdl.GameController.GetButton(gdevice, Sdl.GameController.Button.Y) == 1) ? Buttons.Y : 0) | ((triggers.Left > 0f) ? Buttons.LeftTrigger : 0) | ((triggers.Right > 0f) ? Buttons.RightTrigger : 0) ); var dPad = new GamePadDPad( (Sdl.GameController.GetButton(gdevice, Sdl.GameController.Button.DpadUp) == 1) ? ButtonState.Pressed : ButtonState.Released, (Sdl.GameController.GetButton(gdevice, Sdl.GameController.Button.DpadDown) == 1) ? ButtonState.Pressed : ButtonState.Released, (Sdl.GameController.GetButton(gdevice, Sdl.GameController.Button.DpadLeft) == 1) ? ButtonState.Pressed : ButtonState.Released, (Sdl.GameController.GetButton(gdevice, Sdl.GameController.Button.DpadRight) == 1) ? ButtonState.Pressed : ButtonState.Released ); var ret = new GamePadState(thumbSticks, triggers, buttons, dPad); ret.PacketNumber = gamepadInfo.PacketNumber; return(ret); }
private static GamePadState PlatformGetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode) { var state = GamePadState.Default; var jcap = Joystick.GetCapabilities(index); if (jcap.IsConnected) { state.IsConnected = true; var jstate = Joystick.GetState(index); if (!GamePadCache.ContainsKey(jcap.Identifier)) { GamePadCache.Add(jcap.Identifier, Configurations.ContainsKey(jcap.Identifier) ? new GamepadTranslator(Configurations[jcap.Identifier]) : new GamepadTranslator("")); } var gpc = GamePadCache[jcap.Identifier]; Buttons buttons = (gpc.ButtonPressed("a", jstate) ? Buttons.A : 0) | (gpc.ButtonPressed("b", jstate) ? Buttons.B : 0) | (gpc.ButtonPressed("back", jstate) ? Buttons.Back : 0) | (gpc.ButtonPressed("guide", jstate) ? Buttons.BigButton : 0) | (gpc.ButtonPressed("leftshoulder", jstate) ? Buttons.LeftShoulder : 0) | (gpc.ButtonPressed("leftstick", jstate) ? Buttons.LeftStick : 0) | (gpc.ButtonPressed("rightshoulder", jstate) ? Buttons.RightShoulder : 0) | (gpc.ButtonPressed("rightstick", jstate) ? Buttons.RightStick : 0) | (gpc.ButtonPressed("start", jstate) ? Buttons.Start : 0) | (gpc.ButtonPressed("x", jstate) ? Buttons.X : 0) | (gpc.ButtonPressed("y", jstate) ? Buttons.Y : 0) | 0; var sticks = new GamePadThumbSticks( new Vector2(gpc.AxisPressed("leftx", jstate), gpc.AxisPressed("lefty", jstate)), new Vector2(gpc.AxisPressed("rightx", jstate), gpc.AxisPressed("righty", jstate)), leftDeadZoneMode, rightDeadZoneMode ); var dpad = new GamePadDPad( gpc.DpadPressed("dpup", jstate) ? ButtonState.Pressed : ButtonState.Released, gpc.DpadPressed("dpdown", jstate) ? ButtonState.Pressed : ButtonState.Released, gpc.DpadPressed("dpleft", jstate) ? ButtonState.Pressed : ButtonState.Released, gpc.DpadPressed("dpright", jstate) ? ButtonState.Pressed : ButtonState.Released ); var triggers = new GamePadTriggers( gpc.TriggerPressed("lefttrigger", jstate), gpc.TriggerPressed("righttrigger", jstate) ); state = new GamePadState(sticks, triggers, new GamePadButtons(buttons), dpad); } return(state); }
public static GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone deadZone) { GamePadState.RawState state; uint result = Imports.XInputGamePadGetState((uint)playerIndex, out state); return(new GamePadState(result == Utils.Success, state, deadZone)); }
/// <summary> /// Initializes a new instance of the <see cref="InputSettings"/> class. /// </summary> public InputSettings() { DoubleClickTime = new TimeSpan(0, 0, 0, 0, 500); // 500 ms if (GlobalSettings.PlatformID == PlatformID.WindowsPhone7 || GlobalSettings.PlatformID == PlatformID.WindowsPhone8 || GlobalSettings.PlatformID == PlatformID.WindowsStore || GlobalSettings.PlatformID == PlatformID.Android || GlobalSettings.PlatformID == PlatformID.iOS) { // No mouse on phone. Mouse is always used for touch input. // Use 100 pixels for big fingers. DoubleClickSize = new Vector2F(100); } else { DoubleClickSize = new Vector2F(4); } MouseCenter = new Vector2F(300, 300); RepetitionDelay = new TimeSpan(0, 0, 0, 0, 500); // 500 ms RepetitionInterval = new TimeSpan(0, 0, 0, 0, 100); // 100 ms ThumbstickThreshold = 0.5f; TriggerThreshold = 0.2f; #if !SILVERLIGHT GamePadDeadZone = GamePadDeadZone.IndependentAxes; #endif }
private static GamePadThumbSticks.StickValue ApplyStickDeadZone(short valueX, short valueY, GamePadDeadZone deadZoneMode, int deadZoneSize) { if (deadZoneMode == GamePadDeadZone.Circular) { // Cast to long to avoid int overflow if valueX and valueY are both 32768, which would result in a negative number and Sqrt returns NaN float distanceFromCenter = (float)Math.Sqrt((long)valueX * (long)valueX + (long)valueY * (long)valueY); float coefficient = ApplyDeadZone(distanceFromCenter, short.MaxValue, deadZoneSize); coefficient = coefficient > 0.0f ? coefficient / distanceFromCenter : 0.0f; return new GamePadThumbSticks.StickValue( Clamp(valueX * coefficient), Clamp(valueY * coefficient) ); } else if (deadZoneMode == GamePadDeadZone.IndependentAxes) { return new GamePadThumbSticks.StickValue( ApplyDeadZone(valueX, short.MaxValue, deadZoneSize), ApplyDeadZone(valueY, short.MaxValue, deadZoneSize) ); } else { return new GamePadThumbSticks.StickValue( ApplyDeadZone(valueX, short.MaxValue, 0.0f), ApplyDeadZone(valueY, short.MaxValue, 0.0f) ); } }
internal GamePadTriggers( float leftTrigger, float rightTrigger, GamePadDeadZone deadZoneMode ) { /* XNA applies dead zones before rounding/clamping values. * The public constructor does not allow this because the * dead zone must be known first. */ if (deadZoneMode == GamePadDeadZone.None) { left = MathHelper.Clamp(leftTrigger, 0.0f, 1.0f); right = MathHelper.Clamp(rightTrigger, 0.0f, 1.0f); } else { left = MathHelper.Clamp( GamePad.ExcludeAxisDeadZone( leftTrigger, GamePad.TriggerThreshold ), 0.0f, 1.0f ); right = MathHelper.Clamp( GamePad.ExcludeAxisDeadZone( rightTrigger, GamePad.TriggerThreshold ), 0.0f, 1.0f ); } }
public static GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone deadZoneMode) { return FNAPlatform.GetGamePadState( (int) playerIndex, deadZoneMode ); }
public static GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone deadZone) { var gamePad = GamePads[(int)playerIndex]; GamePadState state = GamePadState.InitializedState; if (gamePad != null && gamePad._isConnected) { // Check if the device was disconnected var dvc = InputDevice.GetDevice(gamePad._deviceId); if (dvc == null) { Debug.WriteLine("Detected controller disconnect [" + (int)playerIndex + "] "); gamePad._isConnected = false; return(state); } GamePadThumbSticks thumbSticks = new GamePadThumbSticks(gamePad._leftStick, gamePad._rightStick); thumbSticks.ApplyDeadZone(deadZone, 0.3f); state = new GamePadState( thumbSticks, new GamePadTriggers(gamePad._leftTrigger, gamePad._rightTrigger), new GamePadButtons(gamePad._buttons), new GamePadDPad(gamePad._buttons)); } return(state); }
/// <summary> /// Gets the current state of a game pad controller, using a specified dead zone /// on analog stick positions. /// </summary> /// <param name="index">Index for the controller you want to query.</param> /// <param name="deadZoneMode">Enumerated value that specifies what dead zone type to use.</param> /// <returns>The state of the controller.</returns> public static GamePadState GetState(int index, GamePadDeadZone deadZoneMode) { if (index < 0 || index >= PlatformGetMaxNumberOfGamePads()) return GamePadState.Default; return PlatformGetState(index, deadZoneMode); }
static GamePadState ReadState(PlayerIndex index, GamePadDeadZone deadZone) { const float DeadZoneSize = 0.27f; IntPtr device = GetDevice(index); PadConfig c = GetConfig(index); if (device == IntPtr.Zero || c == null) { return(GamePadState.InitializedState); } var leftStick = c.LeftStick.ReadAxisPair(device); var rightStick = c.RightStick.ReadAxisPair(device); GamePadThumbSticks sticks = new GamePadThumbSticks(new Vector2(leftStick.X, leftStick.Y), new Vector2(rightStick.X, rightStick.Y)); sticks.ApplyDeadZone(deadZone, DeadZoneSize); GamePadTriggers triggers = new GamePadTriggers(c.LeftTrigger.ReadFloat(device), c.RightTrigger.ReadFloat(device)); Buttons buttonState = ReadButtons(device, c, DeadZoneSize); buttonState |= StickToButtons(sticks.Left, Buttons.LeftThumbstickLeft, Buttons.LeftThumbstickRight, Buttons.LeftThumbstickUp, Buttons.LeftThumbstickDown, DeadZoneSize); buttonState |= StickToButtons(sticks.Right, Buttons.RightThumbstickLeft, Buttons.RightThumbstickRight, Buttons.RightThumbstickUp, Buttons.RightThumbstickDown, DeadZoneSize); buttonState |= TriggerToButton(triggers.Left, Buttons.LeftTrigger, DeadZoneSize); buttonState |= TriggerToButton(triggers.Right, Buttons.RightTrigger, DeadZoneSize); GamePadButtons buttons = new GamePadButtons(buttonState); GamePadDPad dpad = new GamePadDPad(buttons.buttons); GamePadState g = new GamePadState(sticks, triggers, buttons, dpad); return(g); }
public void Update(GameTime gameTime, GamePadDeadZone deadZoneMode) { lastGamePadState = currentGamePadState; currentGamePadState = GamePad.GetState(playerNumber, deadZoneMode); UpdateVibrating(gameTime); CheckGamePadTouched(); }
private static GamePadThumbSticks.StickValue ApplyStickDeadZone(short valueX, short valueY, GamePadDeadZone deadZoneMode, int deadZoneSize) { if (deadZoneMode == GamePadDeadZone.Circular) { // Cast to long to avoid int overflow if valueX and valueY are both 32768, which would result in a negative number and Sqrt returns NaN float distanceFromCenter = (float)Math.Sqrt((long)valueX * (long)valueX + (long)valueY * (long)valueY); float coefficient = ApplyDeadZone(distanceFromCenter, short.MaxValue, deadZoneSize); coefficient = coefficient > 0.0f ? coefficient / distanceFromCenter : 0.0f; return(new GamePadThumbSticks.StickValue( Clamp(valueX * coefficient), Clamp(valueY * coefficient) )); } else if (deadZoneMode == GamePadDeadZone.IndependentAxes) { return(new GamePadThumbSticks.StickValue( ApplyDeadZone(valueX, short.MaxValue, deadZoneSize), ApplyDeadZone(valueY, short.MaxValue, deadZoneSize) )); } else { return(new GamePadThumbSticks.StickValue( ApplyDeadZone(valueX, short.MaxValue, 0.0f), ApplyDeadZone(valueY, short.MaxValue, 0.0f) )); } }
private void ApplyDeadZone(GamePadDeadZone dz) { #if DIRECTX && !WINDOWS_PHONE && !WINDOWS_PHONE81 && !WINDOWS_UAP // XInput Xbox 360 Controller dead zones // Dead zones are slighty different between left and right sticks, this may come from Microsoft usability tests const float leftThumbDeadZone = SharpDX.XInput.Gamepad.LeftThumbDeadZone / (float)short.MaxValue; const float rightThumbDeadZone = SharpDX.XInput.Gamepad.RightThumbDeadZone / (float)short.MaxValue; #elif OUYA // OUYA dead zones should // They are a bit larger to accomodate OUYA Gamepad (but will also affect Xbox 360 controllers plugged to an OUYA) const float leftThumbDeadZone = 0.3f; const float rightThumbDeadZone = 0.3f; #else // Default & SDL Xbox 360 Controller dead zones // Based on the XInput constants const float leftThumbDeadZone = 0.24f; const float rightThumbDeadZone = 0.265f; #endif switch (dz) { case GamePadDeadZone.None: break; case GamePadDeadZone.IndependentAxes: left = ExcludeIndependentAxesDeadZone(left, leftThumbDeadZone); right = ExcludeIndependentAxesDeadZone(right, rightThumbDeadZone); break; case GamePadDeadZone.Circular: left = ExcludeCircularDeadZone(left, leftThumbDeadZone); right = ExcludeCircularDeadZone(right, rightThumbDeadZone); break; } }
private static GamePadState PlatformGetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode) { if (!_gamepads.ContainsKey(index)) { return(index == 0 ? GetDefaultState() : GamePadState.Default); } var state = _gamepads[index].GetCurrentReading(); var sticks = new GamePadThumbSticks( new Vector2((float)state.LeftThumbstickX, (float)state.LeftThumbstickY), new Vector2((float)state.RightThumbstickX, (float)state.RightThumbstickY), leftDeadZoneMode, rightDeadZoneMode ); var triggers = new GamePadTriggers( (float)state.LeftTrigger, (float)state.RightTrigger ); Buttons buttonStates = (state.Buttons.HasFlag(WGI.GamepadButtons.A) ? Buttons.A : 0) | (state.Buttons.HasFlag(WGI.GamepadButtons.B) ? Buttons.B : 0) | ((state.Buttons.HasFlag(WGI.GamepadButtons.View) || Back) ? Buttons.Back : 0) | 0 | //BigButton is unavailable by Windows.Gaming.Input.Gamepad (state.Buttons.HasFlag(WGI.GamepadButtons.LeftShoulder) ? Buttons.LeftShoulder : 0) | (state.Buttons.HasFlag(WGI.GamepadButtons.LeftThumbstick) ? Buttons.LeftStick : 0) | (state.Buttons.HasFlag(WGI.GamepadButtons.RightShoulder) ? Buttons.RightShoulder : 0) | (state.Buttons.HasFlag(WGI.GamepadButtons.RightThumbstick) ? Buttons.RightStick : 0) | (state.Buttons.HasFlag(WGI.GamepadButtons.Menu) ? Buttons.Start : 0) | (state.Buttons.HasFlag(WGI.GamepadButtons.X) ? Buttons.X : 0) | (state.Buttons.HasFlag(WGI.GamepadButtons.Y) ? Buttons.Y : 0) | 0; // Check triggers if (triggers.Left > TriggerThreshold) { buttonStates |= Buttons.LeftTrigger; } if (triggers.Right > TriggerThreshold) { buttonStates |= Buttons.RightTrigger; } var buttons = new GamePadButtons(buttonStates); var dpad = new GamePadDPad( state.Buttons.HasFlag(WGI.GamepadButtons.DPadUp) ? ButtonState.Pressed : ButtonState.Released, state.Buttons.HasFlag(WGI.GamepadButtons.DPadDown) ? ButtonState.Pressed : ButtonState.Released, state.Buttons.HasFlag(WGI.GamepadButtons.DPadLeft) ? ButtonState.Pressed : ButtonState.Released, state.Buttons.HasFlag(WGI.GamepadButtons.DPadRight) ? ButtonState.Pressed : ButtonState.Released ); var result = new GamePadState(sticks, triggers, buttons, dpad); result.PacketNumber = (int)state.Timestamp; return(result); }
public void Initialize(Byte theMaxPlayers, GamePadDeadZone theGamePadDeadZone) { maxPlayers = theMaxPlayers; gamePadDeadZone = theGamePadDeadZone; CurrGamePadState = new GamePadState[maxPlayers]; PrevGamePadState = new GamePadState[maxPlayers]; }
public static float ApplyTriggerDeadZone (byte value, GamePadDeadZone deadZoneMode) { if (deadZoneMode == GamePadDeadZone.None) { return ApplyDeadZone (value, byte.MaxValue, 0.0f); } else { return ApplyDeadZone (value, byte.MaxValue, TriggerDeadZone); } }
internal GamePadState(bool isConnected, RawState rawState, GamePadDeadZone deadZone) { IsConnected = isConnected; RawSate = rawState; if (!isConnected) { rawState.DwPacketNumber = 0; rawState.Gamepad.DwButtons = 0; rawState.Gamepad.BLeftTrigger = 0; rawState.Gamepad.BRightTrigger = 0; rawState.Gamepad.SThumbLx = 0; rawState.Gamepad.SThumbLy = 0; rawState.Gamepad.SThumbRx = 0; rawState.Gamepad.SThumbRy = 0; } PacketNumber = rawState.DwPacketNumber; Buttons = new GamePadButtons( (rawState.Gamepad.DwButtons & (uint)ButtonsConstants.Start) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.DwButtons & (uint)ButtonsConstants.Back) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.DwButtons & (uint)ButtonsConstants.LeftThumb) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.DwButtons & (uint)ButtonsConstants.RightThumb) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.DwButtons & (uint)ButtonsConstants.LeftShoulder) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.DwButtons & (uint)ButtonsConstants.RightShoulder) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.DwButtons & (uint)ButtonsConstants.Guide) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.DwButtons & (uint)ButtonsConstants.A) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.DwButtons & (uint)ButtonsConstants.B) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.DwButtons & (uint)ButtonsConstants.X) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.DwButtons & (uint)ButtonsConstants.Y) != 0 ? ButtonState.Pressed : ButtonState.Released ); DPad = new GamePadDPad( (rawState.Gamepad.DwButtons & (uint)ButtonsConstants.DPadUp) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.DwButtons & (uint)ButtonsConstants.DPadDown) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.DwButtons & (uint)ButtonsConstants.DPadLeft) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.DwButtons & (uint)ButtonsConstants.DPadRight) != 0 ? ButtonState.Pressed : ButtonState.Released ); switch (deadZone) { case GamePadDeadZone.IndependentAxes: rawState.Gamepad.SThumbLx = ThumbStickDeadZoneIndependantAxes(rawState.Gamepad.SThumbLx, (short)Imports.Constants.LeftStickDeadZone); rawState.Gamepad.SThumbLy = ThumbStickDeadZoneIndependantAxes(rawState.Gamepad.SThumbLy, (short)Imports.Constants.LeftStickDeadZone); rawState.Gamepad.SThumbRx = ThumbStickDeadZoneIndependantAxes(rawState.Gamepad.SThumbRx, (short)Imports.Constants.RightStickDeadZone); rawState.Gamepad.SThumbRy = ThumbStickDeadZoneIndependantAxes(rawState.Gamepad.SThumbRy, (short)Imports.Constants.RightStickDeadZone); break; } ThumbSticks = new GamePadThumbSticks( new GamePadThumbSticks.StickValue( rawState.Gamepad.SThumbLx < 0 ? rawState.Gamepad.SThumbLx / 32768.0f : rawState.Gamepad.SThumbLx / 32767.0f, rawState.Gamepad.SThumbLy < 0 ? rawState.Gamepad.SThumbLy / 32768.0f : rawState.Gamepad.SThumbLy / 32767.0f), new GamePadThumbSticks.StickValue( rawState.Gamepad.SThumbRx < 0 ? rawState.Gamepad.SThumbRx / 32768.0f : rawState.Gamepad.SThumbRx / 32767.0f, rawState.Gamepad.SThumbRy < 0 ? rawState.Gamepad.SThumbRy / 32768.0f : rawState.Gamepad.SThumbRy / 32767.0f) ); Triggers = new GamePadTriggers(rawState.Gamepad.BLeftTrigger / 255.0f, rawState.Gamepad.BRightTrigger / 255.0f); }
internal GamePadState(bool isConnected, RawState rawState, GamePadDeadZone deadZone) { this.isConnected = isConnected; currentRawState = rawState; if (!isConnected) { rawState.dwPacketNumber = 0; rawState.Gamepad.dwButtons = 0; rawState.Gamepad.bLeftTrigger = 0; rawState.Gamepad.bRightTrigger = 0; rawState.Gamepad.sThumbLX = 0; rawState.Gamepad.sThumbLY = 0; rawState.Gamepad.sThumbRX = 0; rawState.Gamepad.sThumbRY = 0; } packetNumber = rawState.dwPacketNumber; buttons = new GamePadButtons( (rawState.Gamepad.dwButtons & (uint)ButtonsConstants.Start) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.dwButtons & (uint)ButtonsConstants.Back) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.dwButtons & (uint)ButtonsConstants.LeftThumb) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.dwButtons & (uint)ButtonsConstants.RightThumb) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.dwButtons & (uint)ButtonsConstants.LeftShoulder) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.dwButtons & (uint)ButtonsConstants.RightShoulder) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.dwButtons & (uint)ButtonsConstants.Guide) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.dwButtons & (uint)ButtonsConstants.A) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.dwButtons & (uint)ButtonsConstants.B) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.dwButtons & (uint)ButtonsConstants.X) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.dwButtons & (uint)ButtonsConstants.Y) != 0 ? ButtonState.Pressed : ButtonState.Released ); dPad = new GamePadDPad( (rawState.Gamepad.dwButtons & (uint)ButtonsConstants.DPadUp) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.dwButtons & (uint)ButtonsConstants.DPadDown) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.dwButtons & (uint)ButtonsConstants.DPadLeft) != 0 ? ButtonState.Pressed : ButtonState.Released, (rawState.Gamepad.dwButtons & (uint)ButtonsConstants.DPadRight) != 0 ? ButtonState.Pressed : ButtonState.Released ); switch (deadZone) { case GamePadDeadZone.IndependentAxes: rawState.Gamepad.sThumbLX = ThumbStickDeadZoneIndependantAxes(rawState.Gamepad.sThumbLX, (short)Imports.Constants.LeftStickDeadZone); rawState.Gamepad.sThumbLY = ThumbStickDeadZoneIndependantAxes(rawState.Gamepad.sThumbLY, (short)Imports.Constants.LeftStickDeadZone); rawState.Gamepad.sThumbRX = ThumbStickDeadZoneIndependantAxes(rawState.Gamepad.sThumbRX, (short)Imports.Constants.RightStickDeadZone); rawState.Gamepad.sThumbRY = ThumbStickDeadZoneIndependantAxes(rawState.Gamepad.sThumbRY, (short)Imports.Constants.RightStickDeadZone); break; } thumbSticks = new GamePadThumbSticks( new GamePadThumbSticks.StickValue( rawState.Gamepad.sThumbLX < 0 ? rawState.Gamepad.sThumbLX / 32768.0f : rawState.Gamepad.sThumbLX / 32767.0f, rawState.Gamepad.sThumbLY < 0 ? rawState.Gamepad.sThumbLY / 32768.0f : rawState.Gamepad.sThumbLY / 32767.0f), new GamePadThumbSticks.StickValue( rawState.Gamepad.sThumbRX < 0 ? rawState.Gamepad.sThumbRX / 32768.0f : rawState.Gamepad.sThumbRX / 32767.0f, rawState.Gamepad.sThumbRY < 0 ? rawState.Gamepad.sThumbRY / 32768.0f : rawState.Gamepad.sThumbRY / 32767.0f) ); triggers = new GamePadTriggers(rawState.Gamepad.bLeftTrigger / 255.0f, rawState.Gamepad.bRightTrigger / 255.0f); }
/// <summary> /// Gets the current state of a game pad controller, using a specified dead zone /// on analog stick positions. /// </summary> /// <param name="index">Index for the controller you want to query.</param> /// <param name="deadZoneMode">Enumerated value that specifies what dead zone type to use.</param> /// <returns>The state of the controller.</returns> public static GamePadState GetState(int index, GamePadDeadZone deadZoneMode) { if (index < 0 || index >= PlatformGetMaxNumberOfGamePads()) { throw new InvalidOperationException(); } return(PlatformGetState(index, deadZoneMode)); }
public static void UpdateInputAll(GamePadDeadZone deadZone) { ms = Mouse.GetState(); ks = Keyboard.GetState(); gp1 = GamePad.GetState(PlayerIndex.One, deadZone); gp2 = GamePad.GetState(PlayerIndex.Two, deadZone); gp3 = GamePad.GetState(PlayerIndex.Three, deadZone); gp4 = GamePad.GetState(PlayerIndex.Four, deadZone); }
private static GamePadState PlatformGetState(int index, GamePadDeadZone deadZoneMode) { // If the device was disconneced then wait for // the timeout to elapsed before we test it again. if (!_connected[index] && _timeout[index] > DateTime.UtcNow.Ticks) { return(new GamePadState()); } // Try to get the controller state. SharpDX.XInput.State xistate; var controller = _controllers[index]; _connected[index] = controller.GetState(out xistate); var gamepad = xistate.Gamepad; // If the device is disconnected retry it after the // timeout period has elapsed to avoid the overhead. if (!_connected[index]) { _timeout[index] = DateTime.UtcNow.Ticks + TimeoutTicks; return(new GamePadState()); } var thumbSticks = new GamePadThumbSticks( leftPosition: ConvertThumbStick(gamepad.LeftThumbX, gamepad.LeftThumbY, SharpDX.XInput.Gamepad.LeftThumbDeadZone, deadZoneMode), rightPosition: ConvertThumbStick(gamepad.RightThumbX, gamepad.RightThumbY, SharpDX.XInput.Gamepad.RightThumbDeadZone, deadZoneMode)); var triggers = new GamePadTriggers( leftTrigger: gamepad.LeftTrigger / (float)byte.MaxValue, rightTrigger: gamepad.RightTrigger / (float)byte.MaxValue); var dpadState = new GamePadDPad( upValue: ConvertToButtonState(gamepad.Buttons, SharpDX.XInput.GamepadButtonFlags.DPadUp), downValue: ConvertToButtonState(gamepad.Buttons, SharpDX.XInput.GamepadButtonFlags.DPadDown), leftValue: ConvertToButtonState(gamepad.Buttons, SharpDX.XInput.GamepadButtonFlags.DPadLeft), rightValue: ConvertToButtonState(gamepad.Buttons, SharpDX.XInput.GamepadButtonFlags.DPadRight)); var buttons = ConvertToButtons( buttonFlags: gamepad.Buttons, leftThumbX: gamepad.LeftThumbX, leftThumbY: gamepad.LeftThumbY, rightThumbX: gamepad.RightThumbX, rightThumbY: gamepad.RightThumbY, leftTrigger: gamepad.LeftTrigger, rightTrigger: gamepad.RightTrigger); var state = new GamePadState( thumbSticks: thumbSticks, triggers: triggers, buttons: buttons, dPad: dpadState); return(state); }
private static GamePadState PlatformGetState(int index, GamePadDeadZone deadZoneMode) { var state = GamePadState.Default; var jcap = Joystick.GetCapabilities(index); if (jcap.IsConnected) { state.IsConnected = true; var jstate = Joystick.GetState(index); if (!GamePadCache.ContainsKey(jcap.Id)) GamePadCache.Add(jcap.Id, Configurations.ContainsKey(jcap.Id) ? new GamepadTranslator(Configurations[jcap.Id]) : new GamepadTranslator("")); var gpc = GamePadCache[jcap.Id]; Buttons buttons = (gpc.ButtonPressed("a", jstate) ? Buttons.A : 0) | (gpc.ButtonPressed("b", jstate) ? Buttons.B : 0) | (gpc.ButtonPressed("back", jstate) ? Buttons.Back : 0) | (gpc.ButtonPressed("guide", jstate) ? Buttons.BigButton : 0) | (gpc.ButtonPressed("leftshoulder", jstate) ? Buttons.LeftShoulder : 0) | (gpc.ButtonPressed("leftstick", jstate) ? Buttons.LeftStick : 0) | (gpc.ButtonPressed("rightshoulder", jstate) ? Buttons.RightShoulder : 0) | (gpc.ButtonPressed("rightstick", jstate) ? Buttons.RightStick : 0) | (gpc.ButtonPressed("start", jstate) ? Buttons.Start : 0) | (gpc.ButtonPressed("x", jstate) ? Buttons.X : 0) | (gpc.ButtonPressed("y", jstate) ? Buttons.Y : 0) | 0; var sticks = new GamePadThumbSticks( new Vector2(gpc.AxisPressed("leftx", jstate), gpc.AxisPressed("lefty", jstate)), new Vector2(gpc.AxisPressed("rightx", jstate), gpc.AxisPressed("righty", jstate)), deadZoneMode ); var dpad = new GamePadDPad( gpc.DpadPressed("dpup", jstate) ? ButtonState.Pressed : ButtonState.Released, gpc.DpadPressed("dpdown", jstate) ? ButtonState.Pressed : ButtonState.Released, gpc.DpadPressed("dpleft", jstate) ? ButtonState.Pressed : ButtonState.Released, gpc.DpadPressed("dpright", jstate) ? ButtonState.Pressed : ButtonState.Released ); var triggers = new GamePadTriggers( gpc.TriggerPressed("lefttrigger", jstate), gpc.TriggerPressed("righttrigger", jstate) ); state = new GamePadState(sticks, triggers, new GamePadButtons(buttons), dpad); } return state; }
internal GamePadThumbSticks(Vector2 leftPosition, Vector2 rightPosition, GamePadDeadZone deadZoneMode) : this() { // XNA applies dead zones before rounding/clamping values. The public ctor does not allow this because the dead zone must be known before left = leftPosition; right = rightPosition; ApplyDeadZone(deadZoneMode); Left = left; Right = right; }
/// <summary> /// Gets the current state of a game pad controller, using a specified dead zone /// on analog stick positions. /// </summary> /// <param name="playerIndex">Player index for the controller you want to query.</param> /// <param name="deadZoneMode">Enumerated value that specifies what dead zone type to use.</param> /// <returns>The state of the controller.</returns> public static GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone deadZoneMode) { // Make sure the player index is in range. var index = (int)playerIndex; if (index < (int)PlayerIndex.One || index > (int)PlayerIndex.Four) throw new InvalidOperationException(); return PlatformGetState(index, deadZoneMode); }
public GamePadThumbSticks ThumbSticks(PlayerIndex index, GamePadDeadZone deadZone = GamePadDeadZone.IndependentAxes) { if(deadZone == GamePadDeadZone.IndependentAxes) { return currentState[index].ThumbSticks; } else { return GamePad.GetState(index, deadZone).ThumbSticks; } }
// // Summary: // Gets the current state of a game pad controller, using a specified dead zone // on analog stick positions. Reference page contains links to related code // samples. // // Parameters: // playerIndex: // Player index for the controller you want to query. // // deadZoneMode: // Enumerated value that specifies what dead zone type to use. public static GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone deadZoneMode) { PrepSettings(); if (sdl) { Sdl.SDL_JoystickUpdate(); } return(ReadState(playerIndex, deadZoneMode)); }
/// <summary> /// Gets the current state of a game pad controller, using a specified dead zone /// on analog stick positions. /// </summary> /// <param name="index">Index for the controller you want to query.</param> /// <param name="deadZoneMode">Enumerated value that specifies what dead zone type to use.</param> /// <returns>The state of the controller.</returns> public static GamePadState GetState(int index, GamePadDeadZone deadZoneMode) { if (index < 0 || index >= PlatformGetMaxNumberOfGamePads()) { return(GamePadState.Default); } return(PlatformGetState(index, deadZoneMode)); }
private static GamePadState PlatformGetState(int index, GamePadDeadZone deadZoneMode) { PrepSettings(); if (sdl) { Sdl.SDL_JoystickUpdate(); } return(ReadState(index, deadZoneMode)); }
/// <summary> /// Constructs an InputAction which tracks GamePad triggers. /// </summary> /// <param name="playerIndex">The index of the player using this input.</param> /// <param name="buttonAction">What state the button should be in to activate.</param> /// <param name="trigger">Which trigger to track.</param> /// <param name="deadZoneType">The type of dead zone.</param> /// <param name="deadZoneMin">The minimum Degree which will not be sensed.</param> /// <param name="deadZoneMax">The maximum Degree which will not be sensed.</param> public GamePadTriggerInputAction( PlayerIndex playerIndex, ButtonAction buttonAction, GamePadTrigger trigger, GamePadDeadZone deadZoneType, float deadZoneMin, float deadZoneMax) : base(playerIndex, buttonAction) { mGamePadTrigger = trigger; mGamePadDeadZone = deadZoneType; mDeadZoneMax = deadZoneMax; mDeadZoneMin = deadZoneMin; }
private static GamePadState PlatformGetState(int index, GamePadDeadZone deadZoneMode) { GamePadState state; if (index == 0 && Back) { // Consume state Back = false; state = new GamePadState(new GamePadThumbSticks(), new GamePadTriggers(), new GamePadButtons(Buttons.Back), new GamePadDPad()); } else state = new GamePadState(); return state; }
private static GamePadState PlatformGetState(int index, GamePadDeadZone deadZoneMode) { PrepSettings(); var stateTK = OpenTK.Input.GamePad.GetState (index); if (!stateTK.IsConnected) return GamePadState.Default; var sticks = new GamePadThumbSticks ( new Vector2(stateTK.ThumbSticks.Left.X, stateTK.ThumbSticks.Left.Y), new Vector2(stateTK.ThumbSticks.Right.X, stateTK.ThumbSticks.Right.Y), deadZoneMode ); var triggers = new GamePadTriggers ( stateTK.Triggers.Left, stateTK.Triggers.Right ); Buttons buttonStates = (stateTK.Buttons.A == OpenTK.Input.ButtonState.Pressed ? Buttons.A : 0) | (stateTK.Buttons.B == OpenTK.Input.ButtonState.Pressed ? Buttons.B : 0) | (stateTK.Buttons.Back == OpenTK.Input.ButtonState.Pressed ? Buttons.Back : 0) | (stateTK.Buttons.BigButton == OpenTK.Input.ButtonState.Pressed ? Buttons.BigButton : 0) | (stateTK.Buttons.LeftShoulder == OpenTK.Input.ButtonState.Pressed ? Buttons.LeftShoulder : 0) | (stateTK.Buttons.LeftStick == OpenTK.Input.ButtonState.Pressed ? Buttons.LeftStick : 0) | (stateTK.Buttons.RightShoulder == OpenTK.Input.ButtonState.Pressed ? Buttons.RightShoulder : 0) | (stateTK.Buttons.RightStick == OpenTK.Input.ButtonState.Pressed ? Buttons.RightStick : 0) | (stateTK.Buttons.Start == OpenTK.Input.ButtonState.Pressed ? Buttons.Start : 0) | (stateTK.Buttons.X == OpenTK.Input.ButtonState.Pressed ? Buttons.X : 0) | (stateTK.Buttons.Y == OpenTK.Input.ButtonState.Pressed ? Buttons.Y : 0) | 0; var buttons = new GamePadButtons(buttonStates); var dpad = new GamePadDPad( stateTK.DPad.IsUp ? ButtonState.Pressed : ButtonState.Released, stateTK.DPad.IsDown ? ButtonState.Pressed : ButtonState.Released, stateTK.DPad.IsLeft ? ButtonState.Pressed : ButtonState.Released, stateTK.DPad.IsRight ? ButtonState.Pressed : ButtonState.Released ); var result = new GamePadState(sticks, triggers, buttons, dpad); result.PacketNumber = stateTK.PacketNumber; return result; }
/// <summary> /// Constructs an InputAction which tracks GamePad thumb sticks. /// </summary> /// <param name="playerIndex">The index of the player using this input.</param> /// <param name="buttonAction">What state the button should be in to activate.</param> /// <param name="thumbStick">Which thumb stick to track.</param> /// <param name="thumbStickAxis">The axis of movement to be tracked.</param> /// <param name="deadZoneType">The type of dead zone.</param> /// <param name="deadZoneMin">The minimum Degree which will not be sensed.</param> /// <param name="deadZoneMax">The maximum Degree which will not be sensed.</param> public GamePadThumbStickInputAction( PlayerIndex playerIndex, ButtonAction buttonAction, GamePadThumbStick thumbStick, GamePadThumbStickAxis thumbStickAxis, GamePadDeadZone deadZoneType, float deadZoneMin, float deadZoneMax) : base(playerIndex, buttonAction) { mGamePadThumbStick = thumbStick; mGamePadThumbStickAxis = thumbStickAxis; mGamePadDeadZone = deadZoneType; mDeadZoneMax = deadZoneMax; mDeadZoneMin = deadZoneMin; }
public NativeInput() { currentGamePadStates = new GamePadState[MAX_PLAYERS]; deadZone = GamePadDeadZone.Circular; for (int playerIndex = 0; playerIndex < MAX_PLAYERS; ++playerIndex) { PlayerIndex player = (PlayerIndex)playerIndex; currentGamePadStates[playerIndex] = GamePad.GetState(player, deadZone); } currentKeyboardState = Keyboard.GetState(); gamePadListeners = new List<GamePadListener>(); keyboardListeners = new List<KeyboardListener>(); touchListeners = new List<TouchListener>(); }
internal GamePadThumbSticks( Vector2 leftPosition, Vector2 rightPosition, GamePadDeadZone deadZoneMode ) : this() { /* XNA applies dead zones before rounding/clamping values. * The public constructor does not allow this because the * dead zone must be known first. */ left = leftPosition; right = rightPosition; ApplyDeadZone(deadZoneMode); Left = left; Right = right; }
private static GamePadState PlatformGetState(int index, GamePadDeadZone deadZoneMode) { if (index >= WGI.Gamepad.Gamepads.Count) return GamePadState.Default; var state = WGI.Gamepad.Gamepads[index].GetCurrentReading(); var sticks = new GamePadThumbSticks( new Vector2((float)state.LeftThumbstickX, (float)state.LeftThumbstickY), new Vector2((float)state.RightThumbstickX, (float)state.RightThumbstickY), deadZoneMode ); var triggers = new GamePadTriggers( (float)state.LeftTrigger, (float)state.RightTrigger ); Buttons buttonStates = (state.Buttons.HasFlag(WGI.GamepadButtons.A) ? Buttons.A : 0) | (state.Buttons.HasFlag(WGI.GamepadButtons.B) ? Buttons.B : 0) | ((state.Buttons.HasFlag(WGI.GamepadButtons.View) || Back) ? Buttons.Back : 0) | 0 | //BigButton is unavailable by Windows.Gaming.Input.Gamepad (state.Buttons.HasFlag(WGI.GamepadButtons.LeftShoulder) ? Buttons.LeftShoulder : 0) | (state.Buttons.HasFlag(WGI.GamepadButtons.LeftThumbstick) ? Buttons.LeftStick : 0) | (state.Buttons.HasFlag(WGI.GamepadButtons.RightShoulder) ? Buttons.RightShoulder : 0) | (state.Buttons.HasFlag(WGI.GamepadButtons.RightThumbstick) ? Buttons.RightStick : 0) | (state.Buttons.HasFlag(WGI.GamepadButtons.Menu) ? Buttons.Start : 0) | (state.Buttons.HasFlag(WGI.GamepadButtons.X) ? Buttons.X : 0) | (state.Buttons.HasFlag(WGI.GamepadButtons.Y) ? Buttons.Y : 0) | 0; var buttons = new GamePadButtons(buttonStates); var dpad = new GamePadDPad( state.Buttons.HasFlag(WGI.GamepadButtons.DPadUp) ? ButtonState.Pressed : ButtonState.Released, state.Buttons.HasFlag(WGI.GamepadButtons.DPadDown) ? ButtonState.Pressed : ButtonState.Released, state.Buttons.HasFlag(WGI.GamepadButtons.DPadLeft) ? ButtonState.Pressed : ButtonState.Released, state.Buttons.HasFlag(WGI.GamepadButtons.DPadRight) ? ButtonState.Pressed : ButtonState.Released ); var result = new GamePadState(sticks, triggers, buttons, dpad); result.PacketNumber = (int)state.Timestamp; return result; }
internal GamePadThumbSticks( Vector2 leftPosition, Vector2 rightPosition, GamePadDeadZone deadZoneMode ) { /* XNA applies dead zones before rounding/clamping values. * The public constructor does not allow this because the * dead zone must be known first. */ left = leftPosition; right = rightPosition; ApplyDeadZone(deadZoneMode); if (deadZoneMode == GamePadDeadZone.Circular) { ApplyCircularClamp(); } else { ApplySquareClamp(); } }
private void ApplyDeadZone(GamePadDeadZone dz) { // Based on the XInput constants const float leftThumbDeadZone = 0.24f; const float rightThumbDeadZone = 0.265f; switch (dz) { case GamePadDeadZone.None: break; case GamePadDeadZone.IndependentAxes: left.X = ExcludeAxisDeadZone(left.X, leftThumbDeadZone); left.Y = ExcludeAxisDeadZone(left.Y, leftThumbDeadZone); right.X = ExcludeAxisDeadZone(right.X, rightThumbDeadZone); right.Y = ExcludeAxisDeadZone(right.Y, rightThumbDeadZone); break; case GamePadDeadZone.Circular: left = ExcludeCircularDeadZone(left, leftThumbDeadZone); right = ExcludeCircularDeadZone(right, rightThumbDeadZone); break; } }
private static GamePadState PlatformGetState(int index, GamePadDeadZone deadZoneMode) { // PSM only has a single player game pad. if (index != 0) return new GamePadState(); //See PSS GamePadSample for details var buttons = 0; var leftStick = Vector2.Zero; var rightStick = Vector2.Zero; try { var gamePadData = PssGamePad.GetData(0); //map the buttons foreach (var kvp in _buttonsMap) { if ((gamePadData.Buttons & kvp.Key) != 0) buttons |= (int)kvp.Value; } //Analog sticks leftStick = new Vector2(gamePadData.AnalogLeftX, -gamePadData.AnalogLeftY); rightStick = new Vector2(gamePadData.AnalogRightX, -gamePadData.AnalogRightY); } catch (Sce.PlayStation.Core.InputSystemException exc) { if (exc.Message.ToLowerInvariant().Trim() == "native function returned error.") throw new InvalidOperationException("GamePad must be listed in your features list in app.xml in order to use the GamePad API on PlayStation Mobile.", exc); else throw; } var state = new GamePadState(new GamePadThumbSticks(leftStick, rightStick), new GamePadTriggers(), new GamePadButtons((Buttons)buttons), new GamePadDPad((Buttons)buttons)); return state; }
private static GamePadState PlatformGetState(int index, GamePadDeadZone deadZoneMode) { return new GamePadState() { IsConnected = false }; }
public static GamePadThumbSticks.StickValue ApplyRightStickDeadZone (short valueX, short valueY, GamePadDeadZone deadZoneMode) { return ApplyStickDeadZone (valueX, valueY, deadZoneMode, RightStickDeadZone); }
// // Summary: // Gets the current state of a game pad controller, using a specified dead zone // on analog stick positions. Reference page contains links to related code // samples. // // Parameters: // playerIndex: // Player index for the controller you want to query. // // deadZoneMode: // Enumerated value that specifies what dead zone type to use. public static GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone deadZoneMode) { PrepSettings(); if (sdl) Sdl.SDL_JoystickUpdate(); return ReadState(playerIndex, deadZoneMode); }
static GamePadState ReadState(PlayerIndex index, GamePadDeadZone deadZone) { const float DeadZoneSize = 0.27f; IntPtr device = GetDevice(index); PadConfig c = GetConfig(index); if (device == IntPtr.Zero || c == null) return GamePadState.InitializedState; var leftStick = c.LeftStick.ReadAxisPair(device); var rightStick = c.RightStick.ReadAxisPair(device); GamePadThumbSticks sticks = new GamePadThumbSticks(new Vector2(leftStick.X, leftStick.Y), new Vector2(rightStick.X, rightStick.Y)); sticks.ApplyDeadZone(deadZone, DeadZoneSize); GamePadTriggers triggers = new GamePadTriggers(c.LeftTrigger.ReadFloat(device), c.RightTrigger.ReadFloat(device)); Buttons buttonState = ReadButtons(device, c, DeadZoneSize); buttonState |= StickToButtons(sticks.Left, Buttons.LeftThumbstickLeft, Buttons.LeftThumbstickRight, Buttons.LeftThumbstickUp, Buttons.LeftThumbstickDown, DeadZoneSize); buttonState |= StickToButtons(sticks.Right, Buttons.RightThumbstickLeft, Buttons.RightThumbstickRight, Buttons.RightThumbstickUp, Buttons.RightThumbstickDown, DeadZoneSize); buttonState |= TriggerToButton(triggers.Left, Buttons.LeftTrigger, DeadZoneSize); buttonState |= TriggerToButton(triggers.Right, Buttons.RightTrigger, DeadZoneSize); GamePadButtons buttons = new GamePadButtons(buttonState); GamePadDPad dpad = new GamePadDPad(buttons.buttons); GamePadState g = new GamePadState(sticks, triggers, buttons, dpad); return g; }
public Vector2 ApplyDeadZone(Vector2 direction, GamePadDeadZone deadZone, float power) { switch (deadZone) { case GamePadDeadZone.Circular: return RescaleMagnitude(direction, power); case GamePadDeadZone.IndependentAxes: float x = RescaleAxis(direction.X, power); float y = RescaleAxis(direction.Y, power); return new Vector2(x, y); default: return direction; } }
public static GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone deadZoneMode) { IntPtr device = INTERNAL_devices[(int) playerIndex]; if (device == IntPtr.Zero) { return InitializedState; } // Do not attempt to understand this number at all costs! const float DeadZoneSize = 0.27f; // The "master" button state is built from this. Buttons gc_buttonState = (Buttons) 0; // Sticks GamePadThumbSticks gc_sticks = new GamePadThumbSticks( new Vector2( (float) SDL.SDL_GameControllerGetAxis( device, SDL.SDL_GameControllerAxis.SDL_CONTROLLER_AXIS_LEFTX ) / 32768.0f, (float) SDL.SDL_GameControllerGetAxis( device, SDL.SDL_GameControllerAxis.SDL_CONTROLLER_AXIS_LEFTY ) / -32768.0f * invertAxis ), new Vector2( (float) SDL.SDL_GameControllerGetAxis( device, SDL.SDL_GameControllerAxis.SDL_CONTROLLER_AXIS_RIGHTX ) / 32768.0f, (float) SDL.SDL_GameControllerGetAxis( device, SDL.SDL_GameControllerAxis.SDL_CONTROLLER_AXIS_RIGHTY ) / -32768.0f * invertAxis ), deadZoneMode ); gc_buttonState |= READ_StickToButtons( gc_sticks.Left, Buttons.LeftThumbstickLeft, Buttons.LeftThumbstickRight, Buttons.LeftThumbstickUp, Buttons.LeftThumbstickDown, DeadZoneSize ); gc_buttonState |= READ_StickToButtons( gc_sticks.Right, Buttons.RightThumbstickLeft, Buttons.RightThumbstickRight, Buttons.RightThumbstickUp, Buttons.RightThumbstickDown, DeadZoneSize ); // Triggers GamePadTriggers gc_triggers = new GamePadTriggers( (float) SDL.SDL_GameControllerGetAxis( device, SDL.SDL_GameControllerAxis.SDL_CONTROLLER_AXIS_TRIGGERLEFT ) / 32768.0f, (float) SDL.SDL_GameControllerGetAxis( device, SDL.SDL_GameControllerAxis.SDL_CONTROLLER_AXIS_TRIGGERRIGHT ) / 32768.0f ); gc_buttonState |= READ_TriggerToButton( gc_triggers.Left, Buttons.LeftTrigger, DeadZoneSize ); gc_buttonState |= READ_TriggerToButton( gc_triggers.Right, Buttons.RightTrigger, DeadZoneSize ); // Buttons if (SDL.SDL_GameControllerGetButton(device, SDL.SDL_GameControllerButton.SDL_CONTROLLER_BUTTON_A) != 0) { gc_buttonState |= Buttons.A; } if (SDL.SDL_GameControllerGetButton(device, SDL.SDL_GameControllerButton.SDL_CONTROLLER_BUTTON_B) != 0) { gc_buttonState |= Buttons.B; } if (SDL.SDL_GameControllerGetButton(device, SDL.SDL_GameControllerButton.SDL_CONTROLLER_BUTTON_X) != 0) { gc_buttonState |= Buttons.X; } if (SDL.SDL_GameControllerGetButton(device, SDL.SDL_GameControllerButton.SDL_CONTROLLER_BUTTON_Y) != 0) { gc_buttonState |= Buttons.Y; } if (SDL.SDL_GameControllerGetButton(device, SDL.SDL_GameControllerButton.SDL_CONTROLLER_BUTTON_BACK) != 0) { gc_buttonState |= Buttons.Back; } if (SDL.SDL_GameControllerGetButton(device, SDL.SDL_GameControllerButton.SDL_CONTROLLER_BUTTON_GUIDE) != 0) { gc_buttonState |= Buttons.BigButton; } if (SDL.SDL_GameControllerGetButton(device, SDL.SDL_GameControllerButton.SDL_CONTROLLER_BUTTON_START) != 0) { gc_buttonState |= Buttons.Start; } if (SDL.SDL_GameControllerGetButton(device, SDL.SDL_GameControllerButton.SDL_CONTROLLER_BUTTON_LEFTSTICK) != 0) { gc_buttonState |= Buttons.LeftStick; } if (SDL.SDL_GameControllerGetButton(device, SDL.SDL_GameControllerButton.SDL_CONTROLLER_BUTTON_RIGHTSTICK) != 0) { gc_buttonState |= Buttons.RightStick; } if (SDL.SDL_GameControllerGetButton(device, SDL.SDL_GameControllerButton.SDL_CONTROLLER_BUTTON_LEFTSHOULDER) != 0) { gc_buttonState |= Buttons.LeftShoulder; } if (SDL.SDL_GameControllerGetButton(device, SDL.SDL_GameControllerButton.SDL_CONTROLLER_BUTTON_RIGHTSHOULDER) != 0) { gc_buttonState |= Buttons.RightShoulder; } // DPad GamePadDPad gc_dpad; if (SDL.SDL_GameControllerGetButton(device, SDL.SDL_GameControllerButton.SDL_CONTROLLER_BUTTON_DPAD_UP) != 0) { gc_buttonState |= Buttons.DPadUp; } if (SDL.SDL_GameControllerGetButton(device, SDL.SDL_GameControllerButton.SDL_CONTROLLER_BUTTON_DPAD_DOWN) != 0) { gc_buttonState |= Buttons.DPadDown; } if (SDL.SDL_GameControllerGetButton(device, SDL.SDL_GameControllerButton.SDL_CONTROLLER_BUTTON_DPAD_LEFT) != 0) { gc_buttonState |= Buttons.DPadLeft; } if (SDL.SDL_GameControllerGetButton(device, SDL.SDL_GameControllerButton.SDL_CONTROLLER_BUTTON_DPAD_RIGHT) != 0) { gc_buttonState |= Buttons.DPadRight; } gc_dpad = new GamePadDPad(gc_buttonState); // Compile the master buttonstate GamePadButtons gc_buttons = new GamePadButtons(gc_buttonState); // Build the GamePadState, increment PacketNumber if state changed. GamePadState gc_builtState = new GamePadState( gc_sticks, gc_triggers, gc_buttons, gc_dpad ); gc_builtState.IsConnected = true; gc_builtState.PacketNumber = INTERNAL_states[(int) playerIndex].PacketNumber; if (gc_builtState != INTERNAL_states[(int) playerIndex]) { gc_builtState.PacketNumber += 1; INTERNAL_states[(int) playerIndex] = gc_builtState; } return gc_builtState; }
public static GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone deadZone) { IntPtr gamePadStatePointer = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(GamePadState.RawState))); uint result = Imports.XInputGetState((uint)playerIndex, gamePadStatePointer); GamePadState.RawState state = (GamePadState.RawState)Marshal.PtrToStructure(gamePadStatePointer, typeof(GamePadState.RawState)); return new GamePadState(result == (uint)Imports.Constants.Success, state, deadZone); }
public static GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone deadZone) { var gamePad = GamePads[(int) playerIndex]; GamePadState state = GamePadState.InitializedState; if (gamePad != null && gamePad._isConnected) { // Check if the device was disconnected var dvc = InputDevice.GetDevice(gamePad._deviceId); if (dvc == null) { Debug.WriteLine("Detected controller disconnect [" + (int)playerIndex + "] "); gamePad._isConnected = false; return state; } GamePadThumbSticks thumbSticks = new GamePadThumbSticks(gamePad._leftStick, gamePad._rightStick); thumbSticks.ApplyDeadZone(deadZone, 0.3f); state = new GamePadState( thumbSticks, new GamePadTriggers(gamePad._leftTrigger, gamePad._rightTrigger), new GamePadButtons(gamePad._buttons), new GamePadDPad(gamePad._buttons)); } return state; }
private static GamePadState PlatformGetState(int index, GamePadDeadZone deadZoneMode) { var gamePad = GamePads[index]; GamePadState state = GamePadState.Default; if (gamePad != null && gamePad._isConnected) { // Check if the device was disconnected var dvc = InputDevice.GetDevice(gamePad._deviceId); if (dvc == null) { Debug.WriteLine("Detected controller disconnect [" + index + "] "); gamePad._isConnected = false; return state; } GamePadThumbSticks thumbSticks = new GamePadThumbSticks(gamePad._leftStick, gamePad._rightStick, deadZoneMode); if (gamePad._startButtonPressed) { gamePad._buttons |= Buttons.Start; gamePad._startButtonPressed = false; } else { gamePad._buttons &= ~Buttons.Start; } state = new GamePadState( thumbSticks, new GamePadTriggers(gamePad._leftTrigger, gamePad._rightTrigger), new GamePadButtons(gamePad._buttons), new GamePadDPad(gamePad._buttons)); } return state; }