コード例 #1
0
ファイル: GamePad.cs プロジェクト: SickheadGames/MonoGame
 /// <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);
 }
コード例 #2
0
        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);
        }
コード例 #3
0
 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
             );
     }
 }
コード例 #4
0
 public static GamePadThumbSticks.StickValue ApplyRightStickDeadZone(
     short valueX,
     short valueY,
     GamePadDeadZone deadZoneMode)
 {
     return(Utils.ApplyStickDeadZone(valueX, valueY, deadZoneMode, 8689));
 }
コード例 #5
0
 private static GamePadState PlatformGetState(int index, GamePadDeadZone deadZoneMode)
 {
     return(new GamePadState()
     {
         IsConnected = false
     });
 }
コード例 #6
0
ファイル: GamePad.cs プロジェクト: syun002/FNA
 public static GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone deadZoneMode)
 {
     return(FNAPlatform.GetGamePadState(
                (int)playerIndex,
                deadZoneMode
                ));
 }
コード例 #7
0
ファイル: GamePad.cs プロジェクト: Ramboss/leagueofthelegends
		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);
		}
コード例 #8
0
 public AdvanceGamePad(PlayerIndex playerIndex, GamePadDeadZone deadZone)
 {
     playerIndex_ = playerIndex;
     deadZone_    = deadZone;
     old_         = GamePad.GetState(playerIndex, deadZone);
     new_         = old_;
 }
コード例 #9
0
        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));
        }
コード例 #10
0
 public static GamePadState GetState(GamePadIndex gamepad_index, GamePadDeadZone deadZoneMode)
 {
     return(Platform.GetGamePadState(
                (int)gamepad_index,
                deadZoneMode
                ));
 }
コード例 #11
0
        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);
        }
コード例 #12
0
ファイル: GamePad.SDL.cs プロジェクト: zad15c/MonoGame
        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);
        }
コード例 #13
0
        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);
        }
コード例 #14
0
ファイル: GamePad.cs プロジェクト: VividCoder/SpaceRPG
        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));
        }
コード例 #15
0
        /// <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
        }
コード例 #16
0
ファイル: Utils.cs プロジェクト: danielZhangZhen/XInputDotNet
 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)
         );
     }
 }
コード例 #17
0
ファイル: GamePadTriggers.cs プロジェクト: corick/FNA
        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
                );
            }
        }
コード例 #18
0
ファイル: GamePad.cs プロジェクト: BlueLineGames/FNA
		public static GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone deadZoneMode)
		{
			return FNAPlatform.GetGamePadState(
				(int) playerIndex,
				deadZoneMode
			);
		}
コード例 #19
0
        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);
        }
コード例 #20
0
ファイル: GamePad.cs プロジェクト: Cardanis/MonoGame
 /// <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);
 }
コード例 #21
0
        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);
        }
コード例 #22
0
 public void Update(GameTime gameTime, GamePadDeadZone deadZoneMode)
 {
     lastGamePadState    = currentGamePadState;
     currentGamePadState = GamePad.GetState(playerNumber, deadZoneMode);
     UpdateVibrating(gameTime);
     CheckGamePadTouched();
 }
コード例 #23
0
ファイル: GamePadTriggers.cs プロジェクト: madewokherd/FNA
 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
             );
     }
 }
コード例 #24
0
ファイル: Utils.cs プロジェクト: pzhang87/FantasyCrescendo
 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)
                    ));
     }
 }
コード例 #25
0
        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;
            }
        }
コード例 #26
0
ファイル: GamePad.UWP.cs プロジェクト: zad15c/MonoGame
        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);
        }
コード例 #27
0
        public void Initialize(Byte theMaxPlayers, GamePadDeadZone theGamePadDeadZone)
        {
            maxPlayers      = theMaxPlayers;
            gamePadDeadZone = theGamePadDeadZone;

            CurrGamePadState = new GamePadState[maxPlayers];
            PrevGamePadState = new GamePadState[maxPlayers];
        }
コード例 #28
0
ファイル: Utils.cs プロジェクト: jamestiller/ritual
		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);
			}
		}
コード例 #29
0
        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);
        }
コード例 #30
0
        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);
        }
コード例 #31
0
        /// <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));
        }
コード例 #32
0
ファイル: InputEngine.cs プロジェクト: doomium/Proiecto
 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);
 }
コード例 #33
0
        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);
        }
コード例 #34
0
ファイル: GamePad.Web.cs プロジェクト: Zodge/MonoGame
        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;
        }
コード例 #35
0
 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;
 }
コード例 #36
0
ファイル: GamePad.cs プロジェクト: KennethYap/MonoGame
        /// <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);
        }
コード例 #37
0
ファイル: Input.cs プロジェクト: schonstal/BLOODBALL
 public GamePadThumbSticks ThumbSticks(PlayerIndex index,
 GamePadDeadZone deadZone = GamePadDeadZone.IndependentAxes)
 {
     if(deadZone == GamePadDeadZone.IndependentAxes) {
     return currentState[index].ThumbSticks;
       } else {
     return GamePad.GetState(index, deadZone).ThumbSticks;
       }
 }
コード例 #38
0
 //
 // 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));
 }
コード例 #39
0
ファイル: GamePad.cs プロジェクト: Uyhuydgfae/Skitspel
        /// <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));
        }
コード例 #40
0
ファイル: GamePad.SDL.cs プロジェクト: SongArc/MonoGame
 private static GamePadState PlatformGetState(int index, GamePadDeadZone deadZoneMode)
 {
     PrepSettings();
     if (sdl)
     {
         Sdl.SDL_JoystickUpdate();
     }
     return(ReadState(index, deadZoneMode));
 }
コード例 #41
0
 /// <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;
 }
コード例 #42
0
        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;
        }
コード例 #43
0
ファイル: GamePad.OpenTK.cs プロジェクト: KennethYap/MonoGame
        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;
        }
コード例 #44
0
 /// <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;
 }
コード例 #45
0
        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>();
        }
コード例 #46
0
        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;
        }
コード例 #47
0
        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;
        }
コード例 #48
0
		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();
			}
		}
コード例 #49
0
		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;
			}
		}
コード例 #50
0
ファイル: GamePad.PSM.cs プロジェクト: Breadmouth/Gravitas
        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;
        }
コード例 #51
0
ファイル: GamePad.MacOS.cs プロジェクト: Zodge/MonoGame
 private static GamePadState PlatformGetState(int index, GamePadDeadZone deadZoneMode)
 {
     return new GamePadState() { IsConnected = false };
 }
コード例 #52
0
ファイル: Utils.cs プロジェクト: jamestiller/ritual
		public static GamePadThumbSticks.StickValue ApplyRightStickDeadZone (short valueX, short valueY, GamePadDeadZone deadZoneMode)
		{
			return ApplyStickDeadZone (valueX, valueY, deadZoneMode, RightStickDeadZone);
		}
コード例 #53
0
ファイル: GamePad.cs プロジェクト: fragcastle/MonoGame
        //
        // 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);
        }
コード例 #54
0
ファイル: GamePad.cs プロジェクト: fragcastle/MonoGame
        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;
        }
コード例 #55
0
ファイル: GamepadDevice.cs プロジェクト: Quantumplation/Myre
 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;
     }
 }
コード例 #56
0
ファイル: SDL2_GamePad.cs プロジェクト: 0x0ade/FNA-Legacy
        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;
        }
コード例 #57
0
 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);
 }
コード例 #58
0
        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);
        }
コード例 #59
0
ファイル: GamePad.cs プロジェクト: bwfox/MonoGame
        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;
        }
コード例 #60
0
ファイル: GamePad.Ouya.cs プロジェクト: KennethYap/MonoGame
        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;
        }