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); }
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> /// 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(XInputButton button, State state) { if (button == null) { return(false); } if (button.IsLeftTrigger) { return(state.Gamepad.LeftTrigger != 0); } if (button.IsRightTrigger) { return(state.Gamepad.RightTrigger != 0); } var buttonButtonCode = (short)state.Gamepad.Buttons; return((buttonButtonCode & button.ButtonCode) != 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, XInputButton button, State state, Direction direction) { if (button == null) { return; } // Analog Axis, we expect that the both direction are on same axis!!!! if (button.IsLeftThumbX || button.IsLeftThumbY || button.IsRightThumbX || button.IsRightThumbY) { var calcVal = 0; if (button.IsLeftThumbY) { calcVal = state.Gamepad.LeftThumbY; } if (button.IsLeftThumbX) { calcVal = state.Gamepad.LeftThumbX; } if (button.IsRightThumbX) { calcVal = state.Gamepad.RightThumbX; } if (button.IsRightThumbY) { calcVal = state.Gamepad.RightThumbY; } if (button.IsAxisMinus) { if (calcVal >= 0 + 15000) { } else if (calcVal <= 0 - 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 (calcVal >= 0 + 15000) { InputCode.SetPlayerDirection(playerButtons, direction); } else if (calcVal <= 0 - 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.IsButton) { if ((button.ButtonCode & (short)state.Gamepad.Buttons) != 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); } } } }