Esempio n. 1
0
        /// <summary>
        /// Gets if button is pressed. Null if not the same as requested.
        /// </summary>
        /// <param name="button"></param>
        /// <param name="state"></param>
        /// <returns></returns>
        private static bool?GetButtonPress(JoystickButton button, JoystickUpdate state)
        {
            if (button == null)
            {
                return(false);
            }
            if ((JoystickOffset)button.Button != state.Offset)
            {
                return(null);
            }

            // POV
            if (button.Button >= 32 && button.Button <= 44)
            {
                if (state.Value == button.PovDirection)
                {
                    return(true);
                }
                return(false);
            }

            // Normal button
            if (button.Button >= 48 && button.Button <= 175)
            {
                return(state.Value != 0);
            }
            return(null);
        }
Esempio n. 2
0
        /// <summary>
        /// Get directional press from button, POV and analog.
        /// </summary>
        /// <param name="playerButtons"></param>
        /// <param name="button"></param>
        /// <param name="state"></param>
        /// <param name="direction"></param>
        private static void GetDirectionPress(PlayerButtons playerButtons, JoystickButton button, JoystickUpdate state, Direction direction)
        {
            if (button == null)
            {
                return;
            }
            if ((JoystickOffset)button.Button != state.Offset)
            {
                return;
            }
            // POV
            if (button.Button >= 32 && button.Button <= 44)
            {
                switch (state.Value)
                {
                case -1:
                    InputCode.SetPlayerDirection(playerButtons, Direction.HorizontalCenter);
                    InputCode.SetPlayerDirection(playerButtons, Direction.VerticalCenter);
                    break;

                case 0:
                    InputCode.SetPlayerDirection(playerButtons, Direction.Up);
                    break;

                case 4500:
                    InputCode.SetPlayerDirection(playerButtons, Direction.Up);
                    InputCode.SetPlayerDirection(playerButtons, Direction.Right);
                    break;

                case 9000:
                    InputCode.SetPlayerDirection(playerButtons, Direction.Right);
                    break;

                case 13500:
                    InputCode.SetPlayerDirection(playerButtons, Direction.Down);
                    InputCode.SetPlayerDirection(playerButtons, Direction.Right);
                    break;

                case 18000:
                    InputCode.SetPlayerDirection(playerButtons, Direction.Down);
                    break;

                case 22500:
                    InputCode.SetPlayerDirection(playerButtons, Direction.Left);
                    InputCode.SetPlayerDirection(playerButtons, Direction.Down);
                    break;

                case 27000:
                    InputCode.SetPlayerDirection(playerButtons, Direction.Left);
                    break;

                case 31500:
                    InputCode.SetPlayerDirection(playerButtons, Direction.Left);
                    InputCode.SetPlayerDirection(playerButtons, Direction.Up);
                    break;
                }
            }

            // Analog Axis, we expect that the both direction are on same axis!!!!
            if (state.Offset == JoystickOffset.X || state.Offset == JoystickOffset.Y ||
                state.Offset == JoystickOffset.Z || state.Offset == JoystickOffset.RotationX ||
                state.Offset == JoystickOffset.RotationY || state.Offset == JoystickOffset.RotationZ ||
                state.Offset == JoystickOffset.Sliders0 || state.Offset == JoystickOffset.Sliders1 ||
                state.Offset == JoystickOffset.AccelerationX || state.Offset == JoystickOffset.AccelerationY ||
                state.Offset == JoystickOffset.AccelerationZ)
            {
                if (button.IsAxisMinus)
                {
                    if (state.Value >= 32064 + 15000)
                    {
                    }
                    else if (state.Value <= 32064 - 15000)
                    {
                        InputCode.SetPlayerDirection(playerButtons, direction);
                    }
                    else
                    {
                        if (direction == Direction.Left || direction == Direction.Right)
                        {
                            InputCode.SetPlayerDirection(playerButtons, Direction.HorizontalCenter);
                        }
                        if (direction == Direction.Up || direction == Direction.Down)
                        {
                            InputCode.SetPlayerDirection(playerButtons, Direction.VerticalCenter);
                        }
                    }
                }
                else
                {
                    if (state.Value >= 32064 + 15000)
                    {
                        InputCode.SetPlayerDirection(playerButtons, direction);
                    }
                    else if (state.Value <= 32064 - 15000)
                    {
                    }
                    else
                    {
                        if (direction == Direction.Left || direction == Direction.Right)
                        {
                            InputCode.SetPlayerDirection(playerButtons, Direction.HorizontalCenter);
                        }
                        if (direction == Direction.Up || direction == Direction.Down)
                        {
                            InputCode.SetPlayerDirection(playerButtons, Direction.VerticalCenter);
                        }
                    }
                }
            }

            // Normal button
            if (button.Button >= 48 && button.Button <= 175)
            {
                if (state.Value != 0)
                {
                    InputCode.SetPlayerDirection(playerButtons, direction);
                }
                else
                {
                    if (direction == Direction.Left && !playerButtons.RightPressed())
                    {
                        InputCode.SetPlayerDirection(playerButtons, Direction.HorizontalCenter);
                    }
                    if (direction == Direction.Right && !playerButtons.LeftPressed())
                    {
                        InputCode.SetPlayerDirection(playerButtons, Direction.HorizontalCenter);
                    }
                    if (direction == Direction.Up && !playerButtons.DownPressed())
                    {
                        InputCode.SetPlayerDirection(playerButtons, Direction.VerticalCenter);
                    }
                    if (direction == Direction.Down && !playerButtons.UpPressed())
                    {
                        InputCode.SetPlayerDirection(playerButtons, Direction.VerticalCenter);
                    }
                }
            }
        }