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); }
/// <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; } } } }