Exemple #1
0
        public static byte CalculateWheelPosXinput(XInputButton button, State state, bool useSto0Z, int stoozPercent,
                                                   GameProfile gameProfile)
        {
            int minVal = 0;
            int maxVal = 255;

            switch (gameProfile.EmulationProfile)
            {
            case EmulationProfile.SegaInitialD:
                minVal = 0x1F;
                maxVal = 0xE1;
                break;

            case EmulationProfile.SegaInitialDLindbergh:
                minVal = 0x1F;
                maxVal = 0xE1;
                break;

            case EmulationProfile.SegaSonicAllStarsRacing:
                minVal = 0x1D;
                maxVal = 0xED;
                break;

            default:
                minVal = 0;
                maxVal = 255;
                break;
            }

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

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

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

            if (button.IsRightThumbY)
            {
                return(useSto0Z ? JvsHelper.CalculateSto0ZWheelPos(state.Gamepad.RightThumbY, stoozPercent, true) : JvsHelper.CalculateWheelPos(state.Gamepad.RightThumbY, true, false, minVal, maxVal));
            }
            return(0x7F);
        }
Exemple #2
0
        private byte?ModifyAnalog(JoystickButtons joystickButtons, JoystickUpdate state)
        {
            if (joystickButtons.DirectInputButton == null)
            {
                return(null);
            }
            if ((JoystickOffset)joystickButtons.DirectInputButton.Button != state.Offset)
            {
                return(null);
            }

            switch (joystickButtons.AnalogType)
            {
            case AnalogType.None:
                break;

            case AnalogType.AnalogJoystick:
            {
                return(JvsHelper.CalculateWheelPos(state.Value));
            }

            case AnalogType.AnalogJoystickReverse:
            {
                return((byte)~JvsHelper.CalculateWheelPos(state.Value));
            }

            case AnalogType.Gas:
            {
                var gas = HandleGasBrakeForJvs(state.Value, joystickButtons.DirectInputButton?.IsAxisMinus, Lazydata.ParrotData.ReverseAxisGas, Lazydata.ParrotData.FullAxisGas, true);
                //Console.WriteLine("Gas: " + gas.ToString("X2"));
                if (InputCode.ButtonMode == EmulationProfile.NamcoWmmt5)
                {
                    gas /= 3;
                }
                return(gas);
            }
            break;

            case AnalogType.Brake:
            {
                var brake = HandleGasBrakeForJvs(state.Value, joystickButtons.DirectInputButton?.IsAxisMinus, Lazydata.ParrotData.ReverseAxisGas, Lazydata.ParrotData.FullAxisGas, false);
                if (InputCode.ButtonMode == EmulationProfile.NamcoWmmt5)
                {
                    brake /= 3;
                }
                //Console.WriteLine("Brake: " + brake.ToString("X2"));
                return(brake);
            }
            break;

            case AnalogType.Wheel:
            {
                int minVal = 0;
                int maxVal = 255;
                switch (_gameProfile.EmulationProfile)
                {
                case EmulationProfile.SegaInitialD:
                    minVal = 0x1F;
                    maxVal = 0xE1;
                    break;

                case EmulationProfile.SegaInitialDLindbergh:
                    minVal = 0x1F;
                    maxVal = 0xE1;
                    break;

                case EmulationProfile.SegaSonicAllStarsRacing:
                    minVal = 0x1D;
                    maxVal = 0xED;
                    break;

                default:
                    minVal = 0;
                    maxVal = 0xFF;
                    break;
                }
                var wheelPos = Lazydata.ParrotData.UseSto0ZDrivingHack
                        ? JvsHelper.CalculateSto0ZWheelPos(state.Value, Lazydata.ParrotData.StoozPercent)
                        : JvsHelper.CalculateWheelPos(state.Value, false, false, minVal, maxVal);

                if (_gameProfile.EmulationProfile == EmulationProfile.TaitoTypeXBattleGear ||
                    _gameProfile.EmulationProfile == EmulationProfile.VirtuaRLimit)
                {
                    JvsHelper.StateView.Write(4, wheelPos);
                }

                return(wheelPos);
            }

            case AnalogType.Minimum:
                if (state.Value == 0x80)
                {
                    return(0x00);
                }
                else
                {
                    return(0x7F);
                }

            case AnalogType.Maximum:
                if (state.Value == 0x80)
                {
                    return(0xFF);
                }
                else
                {
                    return(0x7F);
                }

            default:
                throw new ArgumentOutOfRangeException();
            }
            return(null);
        }