Exemplo n.º 1
0
        private static byte CalculateWheelPos(XInputButton button, State state, bool useSto0Z)
        {
            bool isSonic = InputCode.ButtonMode == GameProfiles.SegaSonicAllStarsRacing;

            if (button.IsLeftThumbX)
            {
                return(useSto0Z ? JvsHelper.CalculateSto0ZWheelPos(state.Gamepad.LeftThumbX, true) : JvsHelper.CalculateWheelPos(state.Gamepad.LeftThumbX, true, isSonic));
            }

            if (button.IsLeftThumbY)
            {
                return(useSto0Z ? JvsHelper.CalculateSto0ZWheelPos(state.Gamepad.LeftThumbY, true) : JvsHelper.CalculateWheelPos(state.Gamepad.LeftThumbY, true, isSonic));
            }

            if (button.IsRightThumbX)
            {
                return(useSto0Z ? JvsHelper.CalculateSto0ZWheelPos(state.Gamepad.RightThumbX, true) : JvsHelper.CalculateWheelPos(state.Gamepad.RightThumbX, true, isSonic));
            }

            if (button.IsRightThumbY)
            {
                return(useSto0Z ? JvsHelper.CalculateSto0ZWheelPos(state.Gamepad.RightThumbY, true) : JvsHelper.CalculateWheelPos(state.Gamepad.RightThumbY, true, isSonic));
            }
            return(0x7F);
        }
Exemplo n.º 2
0
        private static byte CalculateAxisOrTriggerGasBrake(XInputButton button, State state)
        {
            if (button.IsButton)
            {
                var btnPress = GetButtonPress(button, state);
                if (btnPress == true)
                {
                    return(0xFF);
                }
                return(0x00);
            }

            if (button.IsLeftThumbX)
            {
                return(JvsHelper.CalculateGasPos(state.Gamepad.LeftThumbX, true, false));
            }

            if (button.IsLeftThumbY)
            {
                return(JvsHelper.CalculateGasPos(state.Gamepad.LeftThumbY, true, false));
            }

            if (button.IsRightThumbX)
            {
                return(JvsHelper.CalculateGasPos(state.Gamepad.RightThumbX, true, false));
            }

            if (button.IsRightThumbY)
            {
                return(JvsHelper.CalculateGasPos(state.Gamepad.RightThumbY, true, false));
            }

            if (button.IsLeftTrigger)
            {
                return(state.Gamepad.LeftTrigger);
            }

            if (button.IsRightTrigger)
            {
                return(state.Gamepad.RightTrigger);
            }
            return(0);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Handles default JVS wheel, gas and brake functionality.
        /// </summary>
        /// <param name="state">JoystickUpdate</param>
        /// <param name="joystickMapping">JoystickMapping</param>
        /// <param name="useSto0Z">If we use sto0z optimizations.</param>
        private static void HandleDefaultWheelControls(JoystickUpdate state, JoystickMapping joystickMapping, bool useSto0Z = false)
        {
            if (joystickMapping.WheelAxis == null ||
                joystickMapping.GasAxis == null ||
                joystickMapping.BrakeAxis == null)
            {
                return;
            }
            // Wheel is always full axis
            if ((JoystickOffset)joystickMapping.WheelAxis.Button == state.Offset)
            {
                bool isSonic = InputCode.ButtonMode == GameProfiles.SegaSonicAllStarsRacing;
                InputCode.AnalogBytes[0] = useSto0Z
                    ? JvsHelper.CalculateSto0ZWheelPos(state.Value)
                    : JvsHelper.CalculateWheelPos(state.Value, false, isSonic);
            }

            // If Gas has full axis
            if ((JoystickOffset)joystickMapping.GasAxis.Button == state.Offset && joystickMapping.GasAxis.IsFullAxis)
            {
                InputCode.AnalogBytes[2] = JvsHelper.CalculateGasPos(state.Value, true, joystickMapping.GasAxis.IsReverseAxis);
            }

            // If brake has full axis
            if ((JoystickOffset)joystickMapping.BrakeAxis.Button == state.Offset &&
                joystickMapping.BrakeAxis.IsFullAxis)
            {
                InputCode.AnalogBytes[4] = JvsHelper.CalculateGasPos(state.Value, true, joystickMapping.BrakeAxis.IsReverseAxis);
            }

            // If gas has NO full axis (we default that other way is brake, otherwise just ignore and let user fix his mistake himself.)
            if ((JoystickOffset)joystickMapping.GasAxis.Button == state.Offset && !joystickMapping.GasAxis.IsFullAxis)
            {
                if (joystickMapping.GasAxis.IsAxisMinus)
                {
                    if (state.Value <= 32767)
                    {
                        InputCode.AnalogBytes[2] = JvsHelper.CalculateGasPos(-state.Value + 32767, false, joystickMapping.GasAxis.IsReverseAxis);
                        InputCode.AnalogBytes[4] = 0;
                    }
                    else
                    {
                        InputCode.AnalogBytes[4] = JvsHelper.CalculateGasPos(state.Value - 32767, false, joystickMapping.GasAxis.IsReverseAxis);
                        InputCode.AnalogBytes[2] = 0;
                    }
                }
                else
                {
                    if (state.Value <= 32767)
                    {
                        InputCode.AnalogBytes[4] = JvsHelper.CalculateGasPos(state.Value - 32767, false, joystickMapping.GasAxis.IsReverseAxis);
                        InputCode.AnalogBytes[2] = 0;
                    }
                    else
                    {
                        InputCode.AnalogBytes[2] = JvsHelper.CalculateGasPos(-state.Value + 32767, false, joystickMapping.GasAxis.IsReverseAxis);
                        InputCode.AnalogBytes[4] = 0;
                    }
                }
            }
        }