Re-allow PadInputType.AnalogStick with reversed ranges

N64 standard controller in virtual pad no longer crashes
This commit is contained in:
YoshiRulz 2019-06-11 05:11:24 +10:00
parent 3a8b3361e3
commit 9b1eaca7be
No known key found for this signature in database
GPG Key ID: C4DE31C245353FB7
2 changed files with 16 additions and 4 deletions

View File

@ -39,6 +39,8 @@ namespace BizHawk.Client.EmuHawk
public float[] RangeX = new float[] { -128f, 0.0f, 127f }; public float[] RangeX = new float[] { -128f, 0.0f, 127f };
public float[] RangeY = new float[] { -128f, 0.0f, 127f }; public float[] RangeY = new float[] { -128f, 0.0f, 127f };
private bool ReverseX;
private bool ReverseY;
public string SecondaryName { get; set; } public string SecondaryName { get; set; }
@ -50,7 +52,17 @@ namespace BizHawk.Client.EmuHawk
AnalogStick.YName = !string.IsNullOrEmpty(SecondaryName) AnalogStick.YName = !string.IsNullOrEmpty(SecondaryName)
? SecondaryName ? SecondaryName
: Name.Replace("X", "Y"); // Fallback : Name.Replace("X", "Y"); // Fallback
if (RangeX[0] > RangeX[2])
{
RangeX = new[] { RangeX[2], RangeX[1], RangeX[0] };
ReverseX = true;
}
AnalogStick.SetRangeX(RangeX); AnalogStick.SetRangeX(RangeX);
if (RangeY[0] > RangeY[2])
{
RangeY = new[] { RangeY[2], RangeY[1], RangeY[0] };
ReverseY = true;
}
AnalogStick.SetRangeY(RangeY); AnalogStick.SetRangeY(RangeY);
ManualX.Minimum = (decimal)RangeX[0]; ManualX.Minimum = (decimal)RangeX[0];
@ -264,7 +276,7 @@ namespace BizHawk.Client.EmuHawk
private void SetAnalogMaxFromNumerics() private void SetAnalogMaxFromNumerics()
{ {
if (!_programmaticallyUpdatingNumerics) if (!_programmaticallyUpdatingNumerics)
AnalogStick.SetUserRange((sbyte)MaxXNumeric.Value, (sbyte)MaxYNumeric.Value); AnalogStick.SetUserRange(ReverseX ? -MaxXNumeric.Value : MaxXNumeric.Value, ReverseY ? -MaxYNumeric.Value : MaxYNumeric.Value);
} }
} }
} }

View File

@ -51,10 +51,10 @@ namespace BizHawk.Client.EmuHawk
private sbyte UserRangePercentageX = 100; private sbyte UserRangePercentageX = 100;
private sbyte UserRangePercentageY = 100; private sbyte UserRangePercentageY = 100;
public void SetUserRange(sbyte rx, sbyte ry) public void SetUserRange(decimal rx, decimal ry)
{ {
UserRangePercentageX = rx; UserRangePercentageX = (sbyte) rx;
UserRangePercentageY = ry; UserRangePercentageY = (sbyte) ry;
Rerange(); Rerange();
Refresh(); Refresh();
} }