- Updated to latest ViGEm.NET
This commit is contained in:
parent
6949bce7f7
commit
6bd8bc0ea9
6 changed files with 134 additions and 136 deletions
|
@ -107,8 +107,11 @@
|
|||
<Reference Include="Fielder, Version=1.2.3.0, Culture=neutral, PublicKeyToken=409b3227471b0f0d, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Fielder.Fody.1.2.3\lib\net452\Fielder.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Nefarius.ViGEmClient, Version=1.15.16.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Nefarius.ViGEmClient.1.15.16\lib\net452\Nefarius.ViGEmClient.dll</HintPath>
|
||||
<Reference Include="JetBrains.Annotations, Version=2018.3.0.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\JetBrains.Annotations.2018.3.0\lib\net20\JetBrains.Annotations.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Nefarius.ViGEm.Client, Version=1.16.150.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Nefarius.ViGEm.Client.1.16.150\lib\net452\Nefarius.ViGEm.Client.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Configuration" />
|
||||
|
|
|
@ -221,10 +221,8 @@ namespace BetterJoyForCemu {
|
|||
public ulong Timestamp = 0;
|
||||
public int packetCounter = 0;
|
||||
|
||||
public Xbox360Controller xin;
|
||||
public Xbox360Report report;
|
||||
public DualShock4Controller ds4;
|
||||
public DualShock4Report ds4_report;
|
||||
public IXbox360Controller xin;
|
||||
public IDualShock4Controller ds4;
|
||||
|
||||
int rumblePeriod = Int32.Parse(ConfigurationManager.AppSettings["RumblePeriod"]);
|
||||
int lowFreq = Int32.Parse(ConfigurationManager.AppSettings["LowFreqRumble"]);
|
||||
|
@ -264,19 +262,19 @@ namespace BetterJoyForCemu {
|
|||
connection = isUSB ? 0x01 : 0x02;
|
||||
|
||||
if (showAsXInput) {
|
||||
xin = new Xbox360Controller(Program.emClient);
|
||||
xin = Program.emClient.CreateXbox360Controller();
|
||||
xin.AutoSubmitReport = false;
|
||||
|
||||
if (toRumble)
|
||||
xin.FeedbackReceived += ReceiveRumble;
|
||||
report = new Xbox360Report();
|
||||
}
|
||||
|
||||
if (showAsDS4) {
|
||||
ds4 = new DualShock4Controller(Program.emClient);
|
||||
ds4 = Program.emClient.CreateDualShock4Controller();
|
||||
ds4.AutoSubmitReport = false;
|
||||
|
||||
if (toRumble)
|
||||
ds4.FeedbackReceived += Ds4_FeedbackReceived;
|
||||
ds4_report = new DualShock4Report();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -449,11 +447,11 @@ namespace BetterJoyForCemu {
|
|||
stop_polling = true;
|
||||
|
||||
if (xin != null) {
|
||||
xin.Disconnect(); xin.Dispose();
|
||||
xin.Disconnect();
|
||||
}
|
||||
|
||||
if (ds4 != null) {
|
||||
ds4.Disconnect(); ds4.Dispose();
|
||||
ds4.Disconnect();
|
||||
}
|
||||
|
||||
if (state > state_.NO_JOYCONS) {
|
||||
|
@ -512,8 +510,7 @@ namespace BetterJoyForCemu {
|
|||
// no reason to send XInput reports so often
|
||||
if (xin != null) {
|
||||
try {
|
||||
xin.SendReport(report);
|
||||
|
||||
xin.SubmitReport();
|
||||
} catch (Exception e) {
|
||||
// ignore /shrug
|
||||
}
|
||||
|
@ -521,7 +518,7 @@ namespace BetterJoyForCemu {
|
|||
|
||||
if (ds4 != null) {
|
||||
try {
|
||||
ds4.SendReport(ds4_report);
|
||||
ds4.SubmitReport();
|
||||
} catch (Exception e) {
|
||||
// ignore /shrug
|
||||
}
|
||||
|
@ -815,75 +812,75 @@ namespace BetterJoyForCemu {
|
|||
return;
|
||||
|
||||
if (isPro) {
|
||||
report.SetButtonState(Xbox360Buttons.A, buttons[(int)(!swapAB ? Button.B : Button.A)]);
|
||||
report.SetButtonState(Xbox360Buttons.B, buttons[(int)(!swapAB ? Button.A : Button.B)]);
|
||||
report.SetButtonState(Xbox360Buttons.Y, buttons[(int)(!swapXY ? Button.X : Button.Y)]);
|
||||
report.SetButtonState(Xbox360Buttons.X, buttons[(int)(!swapXY ? Button.Y : Button.X)]);
|
||||
report.SetButtonState(Xbox360Buttons.Up, buttons[(int)Button.DPAD_UP]);
|
||||
report.SetButtonState(Xbox360Buttons.Down, buttons[(int)Button.DPAD_DOWN]);
|
||||
report.SetButtonState(Xbox360Buttons.Left, buttons[(int)Button.DPAD_LEFT]);
|
||||
report.SetButtonState(Xbox360Buttons.Right, buttons[(int)Button.DPAD_RIGHT]);
|
||||
report.SetButtonState(Xbox360Buttons.Back, buttons[(int)Button.MINUS]);
|
||||
report.SetButtonState(Xbox360Buttons.Start, buttons[(int)Button.PLUS]);
|
||||
report.SetButtonState(Xbox360Buttons.Guide, buttons[(int)Button.HOME]);
|
||||
report.SetButtonState(Xbox360Buttons.LeftShoulder, buttons[(int)Button.SHOULDER_1]);
|
||||
report.SetButtonState(Xbox360Buttons.RightShoulder, buttons[(int)Button.SHOULDER2_1]);
|
||||
report.SetButtonState(Xbox360Buttons.LeftThumb, buttons[(int)Button.STICK]);
|
||||
report.SetButtonState(Xbox360Buttons.RightThumb, buttons[(int)Button.STICK2]);
|
||||
xin.SetButtonState(Xbox360Button.A, buttons[(int)(!swapAB ? Button.B : Button.A)]);
|
||||
xin.SetButtonState(Xbox360Button.B, buttons[(int)(!swapAB ? Button.A : Button.B)]);
|
||||
xin.SetButtonState(Xbox360Button.Y, buttons[(int)(!swapXY ? Button.X : Button.Y)]);
|
||||
xin.SetButtonState(Xbox360Button.X, buttons[(int)(!swapXY ? Button.Y : Button.X)]);
|
||||
xin.SetButtonState(Xbox360Button.Up, buttons[(int)Button.DPAD_UP]);
|
||||
xin.SetButtonState(Xbox360Button.Down, buttons[(int)Button.DPAD_DOWN]);
|
||||
xin.SetButtonState(Xbox360Button.Left, buttons[(int)Button.DPAD_LEFT]);
|
||||
xin.SetButtonState(Xbox360Button.Right, buttons[(int)Button.DPAD_RIGHT]);
|
||||
xin.SetButtonState(Xbox360Button.Back, buttons[(int)Button.MINUS]);
|
||||
xin.SetButtonState(Xbox360Button.Start, buttons[(int)Button.PLUS]);
|
||||
xin.SetButtonState(Xbox360Button.Guide, buttons[(int)Button.HOME]);
|
||||
xin.SetButtonState(Xbox360Button.LeftShoulder, buttons[(int)Button.SHOULDER_1]);
|
||||
xin.SetButtonState(Xbox360Button.RightShoulder, buttons[(int)Button.SHOULDER2_1]);
|
||||
xin.SetButtonState(Xbox360Button.LeftThumb, buttons[(int)Button.STICK]);
|
||||
xin.SetButtonState(Xbox360Button.RightThumb, buttons[(int)Button.STICK2]);
|
||||
} else {
|
||||
if (other != null) { // no need for && other != this
|
||||
report.SetButtonState(!swapAB ? Xbox360Buttons.A : Xbox360Buttons.B, buttons[(int)(isLeft ? Button.B : Button.DPAD_DOWN)]);
|
||||
report.SetButtonState(!swapAB ? Xbox360Buttons.B : Xbox360Buttons.A, buttons[(int)(isLeft ? Button.A : Button.DPAD_RIGHT)]);
|
||||
report.SetButtonState(!swapXY ? Xbox360Buttons.Y : Xbox360Buttons.X, buttons[(int)(isLeft ? Button.X : Button.DPAD_UP)]);
|
||||
report.SetButtonState(!swapXY ? Xbox360Buttons.X : Xbox360Buttons.Y, buttons[(int)(isLeft ? Button.Y : Button.DPAD_LEFT)]);
|
||||
report.SetButtonState(Xbox360Buttons.Up, buttons[(int)(isLeft ? Button.DPAD_UP : Button.X)]);
|
||||
report.SetButtonState(Xbox360Buttons.Down, buttons[(int)(isLeft ? Button.DPAD_DOWN : Button.B)]);
|
||||
report.SetButtonState(Xbox360Buttons.Left, buttons[(int)(isLeft ? Button.DPAD_LEFT : Button.Y)]);
|
||||
report.SetButtonState(Xbox360Buttons.Right, buttons[(int)(isLeft ? Button.DPAD_RIGHT : Button.A)]);
|
||||
report.SetButtonState(Xbox360Buttons.Back, buttons[(int)Button.MINUS]);
|
||||
report.SetButtonState(Xbox360Buttons.Start, buttons[(int)Button.PLUS]);
|
||||
report.SetButtonState(Xbox360Buttons.Guide, buttons[(int)Button.HOME]);
|
||||
report.SetButtonState(Xbox360Buttons.LeftShoulder, buttons[(int)(isLeft ? Button.SHOULDER_1 : Button.SHOULDER2_1)]);
|
||||
report.SetButtonState(Xbox360Buttons.RightShoulder, buttons[(int)(isLeft ? Button.SHOULDER2_1 : Button.SHOULDER_1)]);
|
||||
report.SetButtonState(Xbox360Buttons.LeftThumb, buttons[(int)(isLeft ? Button.STICK : Button.STICK2)]);
|
||||
report.SetButtonState(Xbox360Buttons.RightThumb, buttons[(int)(isLeft ? Button.STICK2 : Button.STICK)]);
|
||||
xin.SetButtonState(!swapAB ? Xbox360Button.A : Xbox360Button.B, buttons[(int)(isLeft ? Button.B : Button.DPAD_DOWN)]);
|
||||
xin.SetButtonState(!swapAB ? Xbox360Button.B : Xbox360Button.A, buttons[(int)(isLeft ? Button.A : Button.DPAD_RIGHT)]);
|
||||
xin.SetButtonState(!swapXY ? Xbox360Button.Y : Xbox360Button.X, buttons[(int)(isLeft ? Button.X : Button.DPAD_UP)]);
|
||||
xin.SetButtonState(!swapXY ? Xbox360Button.X : Xbox360Button.Y, buttons[(int)(isLeft ? Button.Y : Button.DPAD_LEFT)]);
|
||||
xin.SetButtonState(Xbox360Button.Up, buttons[(int)(isLeft ? Button.DPAD_UP : Button.X)]);
|
||||
xin.SetButtonState(Xbox360Button.Down, buttons[(int)(isLeft ? Button.DPAD_DOWN : Button.B)]);
|
||||
xin.SetButtonState(Xbox360Button.Left, buttons[(int)(isLeft ? Button.DPAD_LEFT : Button.Y)]);
|
||||
xin.SetButtonState(Xbox360Button.Right, buttons[(int)(isLeft ? Button.DPAD_RIGHT : Button.A)]);
|
||||
xin.SetButtonState(Xbox360Button.Back, buttons[(int)Button.MINUS]);
|
||||
xin.SetButtonState(Xbox360Button.Start, buttons[(int)Button.PLUS]);
|
||||
xin.SetButtonState(Xbox360Button.Guide, buttons[(int)Button.HOME]);
|
||||
xin.SetButtonState(Xbox360Button.LeftShoulder, buttons[(int)(isLeft ? Button.SHOULDER_1 : Button.SHOULDER2_1)]);
|
||||
xin.SetButtonState(Xbox360Button.RightShoulder, buttons[(int)(isLeft ? Button.SHOULDER2_1 : Button.SHOULDER_1)]);
|
||||
xin.SetButtonState(Xbox360Button.LeftThumb, buttons[(int)(isLeft ? Button.STICK : Button.STICK2)]);
|
||||
xin.SetButtonState(Xbox360Button.RightThumb, buttons[(int)(isLeft ? Button.STICK2 : Button.STICK)]);
|
||||
} else { // single joycon mode
|
||||
report.SetButtonState(!swapAB ? Xbox360Buttons.A : Xbox360Buttons.B, buttons[(int)(isLeft ? Button.DPAD_LEFT : Button.DPAD_RIGHT)]);
|
||||
report.SetButtonState(!swapAB ? Xbox360Buttons.B : Xbox360Buttons.A, buttons[(int)(isLeft ? Button.DPAD_DOWN : Button.DPAD_UP)]);
|
||||
report.SetButtonState(!swapXY ? Xbox360Buttons.Y : Xbox360Buttons.X, buttons[(int)(isLeft ? Button.DPAD_RIGHT : Button.DPAD_LEFT)]);
|
||||
report.SetButtonState(!swapXY ? Xbox360Buttons.X : Xbox360Buttons.Y, buttons[(int)(isLeft ? Button.DPAD_UP : Button.DPAD_DOWN)]);
|
||||
report.SetButtonState(Xbox360Buttons.Back, buttons[(int)Button.MINUS] | buttons[(int)Button.HOME]);
|
||||
report.SetButtonState(Xbox360Buttons.Start, buttons[(int)Button.PLUS] | buttons[(int)Button.CAPTURE]);
|
||||
xin.SetButtonState(!swapAB ? Xbox360Button.A : Xbox360Button.B, buttons[(int)(isLeft ? Button.DPAD_LEFT : Button.DPAD_RIGHT)]);
|
||||
xin.SetButtonState(!swapAB ? Xbox360Button.B : Xbox360Button.A, buttons[(int)(isLeft ? Button.DPAD_DOWN : Button.DPAD_UP)]);
|
||||
xin.SetButtonState(!swapXY ? Xbox360Button.Y : Xbox360Button.X, buttons[(int)(isLeft ? Button.DPAD_RIGHT : Button.DPAD_LEFT)]);
|
||||
xin.SetButtonState(!swapXY ? Xbox360Button.X : Xbox360Button.Y, buttons[(int)(isLeft ? Button.DPAD_UP : Button.DPAD_DOWN)]);
|
||||
xin.SetButtonState(Xbox360Button.Back, buttons[(int)Button.MINUS] | buttons[(int)Button.HOME]);
|
||||
xin.SetButtonState(Xbox360Button.Start, buttons[(int)Button.PLUS] | buttons[(int)Button.CAPTURE]);
|
||||
|
||||
report.SetButtonState(Xbox360Buttons.LeftShoulder, buttons[(int)Button.SL]);
|
||||
report.SetButtonState(Xbox360Buttons.RightShoulder, buttons[(int)Button.SR]);
|
||||
xin.SetButtonState(Xbox360Button.LeftShoulder, buttons[(int)Button.SL]);
|
||||
xin.SetButtonState(Xbox360Button.RightShoulder, buttons[(int)Button.SR]);
|
||||
|
||||
report.SetButtonState(Xbox360Buttons.LeftThumb, buttons[(int)Button.STICK]);
|
||||
xin.SetButtonState(Xbox360Button.LeftThumb, buttons[(int)Button.STICK]);
|
||||
}
|
||||
}
|
||||
|
||||
// overwrite guide button if it's custom-mapped
|
||||
if (Config.Value("home") != "0")
|
||||
report.SetButtonState(Xbox360Buttons.Guide, false);
|
||||
xin.SetButtonState(Xbox360Button.Guide, false);
|
||||
|
||||
if (!isSnes) {
|
||||
if (other != null || isPro) { // no need for && other != this
|
||||
report.SetAxis(Xbox360Axes.LeftThumbX, CastStickValue((other == this && !isLeft) ? stick2[0] : stick[0]));
|
||||
report.SetAxis(Xbox360Axes.LeftThumbY, CastStickValue((other == this && !isLeft) ? stick2[1] : stick[1]));
|
||||
report.SetAxis(Xbox360Axes.RightThumbX, CastStickValue((other == this && !isLeft) ? stick[0] : stick2[0]));
|
||||
report.SetAxis(Xbox360Axes.RightThumbY, CastStickValue((other == this && !isLeft) ? stick[1] : stick2[1]));
|
||||
xin.SetAxisValue(Xbox360Axis.LeftThumbX, CastStickValue((other == this && !isLeft) ? stick2[0] : stick[0]));
|
||||
xin.SetAxisValue(Xbox360Axis.LeftThumbY, CastStickValue((other == this && !isLeft) ? stick2[1] : stick[1]));
|
||||
xin.SetAxisValue(Xbox360Axis.RightThumbX, CastStickValue((other == this && !isLeft) ? stick[0] : stick2[0]));
|
||||
xin.SetAxisValue(Xbox360Axis.RightThumbY, CastStickValue((other == this && !isLeft) ? stick[1] : stick2[1]));
|
||||
} else { // single joycon mode
|
||||
report.SetAxis(Xbox360Axes.LeftThumbY, CastStickValue((isLeft ? 1 : -1) * stick[0]));
|
||||
report.SetAxis(Xbox360Axes.LeftThumbX, CastStickValue((isLeft ? -1 : 1) * stick[1]));
|
||||
xin.SetAxisValue(Xbox360Axis.LeftThumbY, CastStickValue((isLeft ? 1 : -1) * stick[0]));
|
||||
xin.SetAxisValue(Xbox360Axis.LeftThumbX, CastStickValue((isLeft ? -1 : 1) * stick[1]));
|
||||
}
|
||||
}
|
||||
|
||||
if (other != null || isPro) {
|
||||
report.SetAxis(Xbox360Axes.LeftTrigger, (short)(buttons[(int)(isLeft ? Button.SHOULDER_2 : Button.SHOULDER2_2)] ? Int16.MaxValue : 0));
|
||||
report.SetAxis(Xbox360Axes.RightTrigger, (short)(buttons[(int)(isLeft ? Button.SHOULDER2_2 : Button.SHOULDER_2)] ? Int16.MaxValue : 0));
|
||||
xin.SetSliderValue(Xbox360Slider.LeftTrigger, (byte)(buttons[(int)(isLeft ? Button.SHOULDER_2 : Button.SHOULDER2_2)] ? Byte.MaxValue : 0));
|
||||
xin.SetSliderValue(Xbox360Slider.RightTrigger, (byte)(buttons[(int)(isLeft ? Button.SHOULDER2_2 : Button.SHOULDER_2)] ? Byte.MaxValue : 0));
|
||||
} else {
|
||||
report.SetAxis(Xbox360Axes.LeftTrigger, (short)(buttons[(int)(isLeft ? Button.SHOULDER_2 : Button.SHOULDER_1)] ? Int16.MaxValue : 0));
|
||||
report.SetAxis(Xbox360Axes.RightTrigger, (short)(buttons[(int)(isLeft ? Button.SHOULDER_1 : Button.SHOULDER_2)] ? Int16.MaxValue : 0));
|
||||
xin.SetSliderValue(Xbox360Slider.LeftTrigger, (byte)(buttons[(int)(isLeft ? Button.SHOULDER_2 : Button.SHOULDER_1)] ? Byte.MaxValue : 0));
|
||||
xin.SetSliderValue(Xbox360Slider.RightTrigger, (byte)(buttons[(int)(isLeft ? Button.SHOULDER_1 : Button.SHOULDER_2)] ? Byte.MaxValue : 0));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -893,112 +890,112 @@ namespace BetterJoyForCemu {
|
|||
return;
|
||||
|
||||
if (isPro) {
|
||||
ds4_report.SetButtonState(DualShock4Buttons.Cross, buttons[(int)(!swapAB ? Button.B : Button.A)]);
|
||||
ds4_report.SetButtonState(DualShock4Buttons.Circle, buttons[(int)(!swapAB ? Button.A : Button.B)]);
|
||||
ds4_report.SetButtonState(DualShock4Buttons.Triangle, buttons[(int)(!swapXY ? Button.X : Button.Y)]);
|
||||
ds4_report.SetButtonState(DualShock4Buttons.Square, buttons[(int)(!swapXY ? Button.Y : Button.X)]);
|
||||
ds4.SetButtonState(DualShock4Button.Cross, buttons[(int)(!swapAB ? Button.B : Button.A)]);
|
||||
ds4.SetButtonState(DualShock4Button.Circle, buttons[(int)(!swapAB ? Button.A : Button.B)]);
|
||||
ds4.SetButtonState(DualShock4Button.Triangle, buttons[(int)(!swapXY ? Button.X : Button.Y)]);
|
||||
ds4.SetButtonState(DualShock4Button.Square, buttons[(int)(!swapXY ? Button.Y : Button.X)]);
|
||||
|
||||
ds4_report.SetDPad(DualShock4DPadValues.None);
|
||||
ds4.SetDPadDirection(DualShock4DPadDirection.None);
|
||||
if (buttons[(int)Button.DPAD_LEFT])
|
||||
ds4.SetDPadDirection(DualShock4DPadDirection.West);
|
||||
if (buttons[(int)Button.DPAD_RIGHT])
|
||||
ds4.SetDPadDirection(DualShock4DPadDirection.East);
|
||||
if (buttons[(int)Button.DPAD_UP]) {
|
||||
if (buttons[(int)Button.DPAD_LEFT])
|
||||
ds4_report.SetDPad(DualShock4DPadValues.Northwest);
|
||||
ds4.SetDPadDirection(DualShock4DPadDirection.Northwest);
|
||||
else if (buttons[(int)Button.DPAD_RIGHT])
|
||||
ds4_report.SetDPad(DualShock4DPadValues.Northeast);
|
||||
ds4.SetDPadDirection(DualShock4DPadDirection.Northeast);
|
||||
else
|
||||
ds4_report.SetDPad(DualShock4DPadValues.North);
|
||||
ds4.SetDPadDirection(DualShock4DPadDirection.North);
|
||||
}
|
||||
if (buttons[(int)Button.DPAD_DOWN]) {
|
||||
if (buttons[(int)Button.DPAD_LEFT])
|
||||
ds4_report.SetDPad(DualShock4DPadValues.Southwest);
|
||||
ds4.SetDPadDirection(DualShock4DPadDirection.Southwest);
|
||||
else if (buttons[(int)Button.DPAD_RIGHT])
|
||||
ds4_report.SetDPad(DualShock4DPadValues.Southeast);
|
||||
ds4.SetDPadDirection(DualShock4DPadDirection.Southeast);
|
||||
else
|
||||
ds4_report.SetDPad(DualShock4DPadValues.South);
|
||||
ds4.SetDPadDirection(DualShock4DPadDirection.South);
|
||||
}
|
||||
if (buttons[(int)Button.DPAD_LEFT])
|
||||
ds4_report.SetDPad(DualShock4DPadValues.West);
|
||||
if (buttons[(int)Button.DPAD_RIGHT])
|
||||
ds4_report.SetDPad(DualShock4DPadValues.East);
|
||||
|
||||
ds4_report.SetButtonState(DualShock4Buttons.Share, buttons[(int)Button.MINUS]);
|
||||
ds4_report.SetButtonState(DualShock4Buttons.Options, buttons[(int)Button.PLUS]);
|
||||
ds4_report.SetSpecialButtonState(DualShock4SpecialButtons.Ps, buttons[(int)Button.HOME]);
|
||||
ds4_report.SetSpecialButtonState(DualShock4SpecialButtons.Touchpad, buttons[(int)Button.CAPTURE]);
|
||||
ds4_report.SetButtonState(DualShock4Buttons.ShoulderLeft, buttons[(int)Button.SHOULDER_1]);
|
||||
ds4_report.SetButtonState(DualShock4Buttons.ShoulderRight, buttons[(int)Button.SHOULDER2_1]);
|
||||
ds4_report.SetButtonState(DualShock4Buttons.ThumbLeft, buttons[(int)Button.STICK]);
|
||||
ds4_report.SetButtonState(DualShock4Buttons.ThumbRight, buttons[(int)Button.STICK2]);
|
||||
ds4.SetButtonState(DualShock4Button.Share, buttons[(int)Button.MINUS]);
|
||||
ds4.SetButtonState(DualShock4Button.Options, buttons[(int)Button.PLUS]);
|
||||
ds4.SetButtonState(DualShock4SpecialButton.Ps, buttons[(int)Button.HOME]);
|
||||
ds4.SetButtonState(DualShock4SpecialButton.Touchpad, buttons[(int)Button.CAPTURE]);
|
||||
ds4.SetButtonState(DualShock4Button.ShoulderLeft, buttons[(int)Button.SHOULDER_1]);
|
||||
ds4.SetButtonState(DualShock4Button.ShoulderRight, buttons[(int)Button.SHOULDER2_1]);
|
||||
ds4.SetButtonState(DualShock4Button.ThumbLeft, buttons[(int)Button.STICK]);
|
||||
ds4.SetButtonState(DualShock4Button.ThumbRight, buttons[(int)Button.STICK2]);
|
||||
} else {
|
||||
if (other != null) { // no need for && other != this
|
||||
ds4_report.SetButtonState(!swapAB ? DualShock4Buttons.Cross : DualShock4Buttons.Circle, buttons[(int)(isLeft ? Button.B : Button.DPAD_DOWN)]);
|
||||
ds4_report.SetButtonState(!swapAB ? DualShock4Buttons.Circle : DualShock4Buttons.Cross, buttons[(int)(isLeft ? Button.A : Button.DPAD_RIGHT)]);
|
||||
ds4_report.SetButtonState(!swapXY ? DualShock4Buttons.Triangle : DualShock4Buttons.Square, buttons[(int)(isLeft ? Button.X : Button.DPAD_UP)]);
|
||||
ds4_report.SetButtonState(!swapXY ? DualShock4Buttons.Square : DualShock4Buttons.Triangle, buttons[(int)(isLeft ? Button.Y : Button.DPAD_LEFT)]);
|
||||
ds4.SetButtonState(!swapAB ? DualShock4Button.Cross : DualShock4Button.Circle, buttons[(int)(isLeft ? Button.B : Button.DPAD_DOWN)]);
|
||||
ds4.SetButtonState(!swapAB ? DualShock4Button.Circle : DualShock4Button.Cross, buttons[(int)(isLeft ? Button.A : Button.DPAD_RIGHT)]);
|
||||
ds4.SetButtonState(!swapXY ? DualShock4Button.Triangle : DualShock4Button.Square, buttons[(int)(isLeft ? Button.X : Button.DPAD_UP)]);
|
||||
ds4.SetButtonState(!swapXY ? DualShock4Button.Square : DualShock4Button.Triangle, buttons[(int)(isLeft ? Button.Y : Button.DPAD_LEFT)]);
|
||||
|
||||
if (buttons[(int)(isLeft ? Button.DPAD_UP : Button.X)])
|
||||
if (buttons[(int)(isLeft ? Button.DPAD_LEFT : Button.Y)])
|
||||
ds4_report.SetDPad(DualShock4DPadValues.Northwest);
|
||||
ds4.SetDPadDirection(DualShock4DPadDirection.Northwest);
|
||||
else if (buttons[(int)(isLeft ? Button.DPAD_RIGHT : Button.A)])
|
||||
ds4_report.SetDPad(DualShock4DPadValues.Northeast);
|
||||
ds4.SetDPadDirection(DualShock4DPadDirection.Northeast);
|
||||
else
|
||||
ds4_report.SetDPad(DualShock4DPadValues.North);
|
||||
ds4.SetDPadDirection(DualShock4DPadDirection.North);
|
||||
if (buttons[(int)(isLeft ? Button.DPAD_DOWN : Button.B)])
|
||||
if (buttons[(int)(isLeft ? Button.DPAD_LEFT : Button.Y)])
|
||||
ds4_report.SetDPad(DualShock4DPadValues.Southwest);
|
||||
ds4.SetDPadDirection(DualShock4DPadDirection.Southwest);
|
||||
else if (buttons[(int)(isLeft ? Button.DPAD_RIGHT : Button.A)])
|
||||
ds4_report.SetDPad(DualShock4DPadValues.Southeast);
|
||||
ds4.SetDPadDirection(DualShock4DPadDirection.Southeast);
|
||||
else
|
||||
ds4_report.SetDPad(DualShock4DPadValues.South);
|
||||
ds4.SetDPadDirection(DualShock4DPadDirection.South);
|
||||
if (buttons[(int)(isLeft ? Button.DPAD_LEFT : Button.Y)])
|
||||
ds4_report.SetDPad(DualShock4DPadValues.West);
|
||||
ds4.SetDPadDirection(DualShock4DPadDirection.West);
|
||||
if (buttons[(int)(isLeft ? Button.DPAD_RIGHT : Button.A)])
|
||||
ds4_report.SetDPad(DualShock4DPadValues.East);
|
||||
ds4.SetDPadDirection(DualShock4DPadDirection.East);
|
||||
|
||||
ds4_report.SetButtonState(DualShock4Buttons.Share, buttons[(int)Button.MINUS]);
|
||||
ds4_report.SetButtonState(DualShock4Buttons.Options, buttons[(int)Button.PLUS]);
|
||||
ds4_report.SetSpecialButtonState(DualShock4SpecialButtons.Ps, buttons[(int)Button.HOME]);
|
||||
ds4_report.SetSpecialButtonState(DualShock4SpecialButtons.Touchpad, buttons[(int)Button.CAPTURE]);
|
||||
ds4_report.SetButtonState(DualShock4Buttons.ShoulderLeft, buttons[(int)(isLeft ? Button.SHOULDER_1 : Button.SHOULDER2_1)]);
|
||||
ds4_report.SetButtonState(DualShock4Buttons.ShoulderRight, buttons[(int)(isLeft ? Button.SHOULDER2_1 : Button.SHOULDER_1)]);
|
||||
ds4_report.SetButtonState(DualShock4Buttons.ThumbLeft, buttons[(int)(isLeft ? Button.STICK : Button.STICK2)]);
|
||||
ds4_report.SetButtonState(DualShock4Buttons.ThumbRight, buttons[(int)(isLeft ? Button.STICK2 : Button.STICK)]);
|
||||
ds4.SetButtonState(DualShock4Button.Share, buttons[(int)Button.MINUS]);
|
||||
ds4.SetButtonState(DualShock4Button.Options, buttons[(int)Button.PLUS]);
|
||||
ds4.SetButtonState(DualShock4SpecialButton.Ps, buttons[(int)Button.HOME]);
|
||||
ds4.SetButtonState(DualShock4SpecialButton.Touchpad, buttons[(int)Button.CAPTURE]);
|
||||
ds4.SetButtonState(DualShock4Button.ShoulderLeft, buttons[(int)(isLeft ? Button.SHOULDER_1 : Button.SHOULDER2_1)]);
|
||||
ds4.SetButtonState(DualShock4Button.ShoulderRight, buttons[(int)(isLeft ? Button.SHOULDER2_1 : Button.SHOULDER_1)]);
|
||||
ds4.SetButtonState(DualShock4Button.ThumbLeft, buttons[(int)(isLeft ? Button.STICK : Button.STICK2)]);
|
||||
ds4.SetButtonState(DualShock4Button.ThumbRight, buttons[(int)(isLeft ? Button.STICK2 : Button.STICK)]);
|
||||
} else { // single joycon mode
|
||||
ds4_report.SetButtonState(!swapAB ? DualShock4Buttons.Cross : DualShock4Buttons.Circle, buttons[(int)(isLeft ? Button.DPAD_LEFT : Button.DPAD_RIGHT)]);
|
||||
ds4_report.SetButtonState(!swapAB ? DualShock4Buttons.Circle : DualShock4Buttons.Cross, buttons[(int)(isLeft ? Button.DPAD_DOWN : Button.DPAD_UP)]);
|
||||
ds4_report.SetButtonState(!swapXY ? DualShock4Buttons.Triangle : DualShock4Buttons.Square, buttons[(int)(isLeft ? Button.DPAD_RIGHT : Button.DPAD_LEFT)]);
|
||||
ds4_report.SetButtonState(!swapXY ? DualShock4Buttons.Square : DualShock4Buttons.Triangle, buttons[(int)(isLeft ? Button.DPAD_UP : Button.DPAD_DOWN)]);
|
||||
ds4_report.SetButtonState(DualShock4Buttons.Share, buttons[(int)Button.MINUS] | buttons[(int)Button.HOME]);
|
||||
ds4_report.SetButtonState(DualShock4Buttons.Options, buttons[(int)Button.PLUS] | buttons[(int)Button.CAPTURE]);
|
||||
ds4.SetButtonState(!swapAB ? DualShock4Button.Cross : DualShock4Button.Circle, buttons[(int)(isLeft ? Button.DPAD_LEFT : Button.DPAD_RIGHT)]);
|
||||
ds4.SetButtonState(!swapAB ? DualShock4Button.Circle : DualShock4Button.Cross, buttons[(int)(isLeft ? Button.DPAD_DOWN : Button.DPAD_UP)]);
|
||||
ds4.SetButtonState(!swapXY ? DualShock4Button.Triangle : DualShock4Button.Square, buttons[(int)(isLeft ? Button.DPAD_RIGHT : Button.DPAD_LEFT)]);
|
||||
ds4.SetButtonState(!swapXY ? DualShock4Button.Square : DualShock4Button.Triangle, buttons[(int)(isLeft ? Button.DPAD_UP : Button.DPAD_DOWN)]);
|
||||
ds4.SetButtonState(DualShock4Button.Share, buttons[(int)Button.MINUS] | buttons[(int)Button.HOME]);
|
||||
ds4.SetButtonState(DualShock4Button.Options, buttons[(int)Button.PLUS] | buttons[(int)Button.CAPTURE]);
|
||||
|
||||
ds4_report.SetButtonState(DualShock4Buttons.ShoulderLeft, buttons[(int)Button.SL]);
|
||||
ds4_report.SetButtonState(DualShock4Buttons.ShoulderRight, buttons[(int)Button.SR]);
|
||||
ds4.SetButtonState(DualShock4Button.ShoulderLeft, buttons[(int)Button.SL]);
|
||||
ds4.SetButtonState(DualShock4Button.ShoulderRight, buttons[(int)Button.SR]);
|
||||
|
||||
ds4_report.SetButtonState(DualShock4Buttons.ThumbLeft, buttons[(int)Button.STICK]);
|
||||
ds4.SetButtonState(DualShock4Button.ThumbLeft, buttons[(int)Button.STICK]);
|
||||
}
|
||||
}
|
||||
|
||||
// overwrite guide button if it's custom-mapped
|
||||
if (Config.Value("home") != "0")
|
||||
ds4_report.SetSpecialButtonState(DualShock4SpecialButtons.Ps, false);
|
||||
ds4.SetButtonState(DualShock4SpecialButton.Ps, false);
|
||||
|
||||
if (!isSnes) {
|
||||
if (other != null || isPro) { // no need for && other != this
|
||||
ds4_report.SetAxis(DualShock4Axes.LeftThumbX, CastStickValueByte((other == this && !isLeft) ? -stick2[0] : -stick[0]));
|
||||
ds4_report.SetAxis(DualShock4Axes.LeftThumbY, CastStickValueByte((other == this && !isLeft) ? stick2[1] : stick[1]));
|
||||
ds4_report.SetAxis(DualShock4Axes.RightThumbX, CastStickValueByte((other == this && !isLeft) ? -stick[0] : -stick2[0]));
|
||||
ds4_report.SetAxis(DualShock4Axes.RightThumbY, CastStickValueByte((other == this && !isLeft) ? stick[1] : stick2[1]));
|
||||
ds4.SetAxisValue(DualShock4Axis.LeftThumbX, CastStickValueByte((other == this && !isLeft) ? -stick2[0] : -stick[0]));
|
||||
ds4.SetAxisValue(DualShock4Axis.LeftThumbY, CastStickValueByte((other == this && !isLeft) ? stick2[1] : stick[1]));
|
||||
ds4.SetAxisValue(DualShock4Axis.RightThumbX, CastStickValueByte((other == this && !isLeft) ? -stick[0] : -stick2[0]));
|
||||
ds4.SetAxisValue(DualShock4Axis.RightThumbY, CastStickValueByte((other == this && !isLeft) ? stick[1] : stick2[1]));
|
||||
} else { // single joycon mode
|
||||
ds4_report.SetAxis(DualShock4Axes.LeftThumbY, CastStickValueByte((isLeft ? 1 : -1) * stick[0]));
|
||||
ds4_report.SetAxis(DualShock4Axes.LeftThumbX, CastStickValueByte((isLeft ? -1 : 1) * stick[1]));
|
||||
ds4.SetAxisValue(DualShock4Axis.LeftThumbY, CastStickValueByte((isLeft ? 1 : -1) * stick[0]));
|
||||
ds4.SetAxisValue(DualShock4Axis.LeftThumbX, CastStickValueByte((isLeft ? -1 : 1) * stick[1]));
|
||||
}
|
||||
}
|
||||
|
||||
if (other != null || isPro) {
|
||||
ds4_report.SetAxis(DualShock4Axes.LeftTrigger, (byte)(buttons[(int)(isLeft ? Button.SHOULDER_2 : Button.SHOULDER2_2)] ? Byte.MaxValue : 0));
|
||||
ds4_report.SetAxis(DualShock4Axes.RightTrigger, (byte)(buttons[(int)(isLeft ? Button.SHOULDER2_2 : Button.SHOULDER_2)] ? Byte.MaxValue : 0));
|
||||
ds4.SetSliderValue(DualShock4Slider.LeftTrigger, (byte)(buttons[(int)(isLeft ? Button.SHOULDER_2 : Button.SHOULDER2_2)] ? Byte.MaxValue : 0));
|
||||
ds4.SetSliderValue(DualShock4Slider.RightTrigger, (byte)(buttons[(int)(isLeft ? Button.SHOULDER2_2 : Button.SHOULDER_2)] ? Byte.MaxValue : 0));
|
||||
} else {
|
||||
ds4_report.SetAxis(DualShock4Axes.LeftTrigger, (byte)(buttons[(int)(isLeft ? Button.SHOULDER_2 : Button.SHOULDER_1)] ? Byte.MaxValue : 0));
|
||||
ds4_report.SetAxis(DualShock4Axes.RightTrigger, (byte)(buttons[(int)(isLeft ? Button.SHOULDER_1 : Button.SHOULDER_2)] ? Byte.MaxValue : 0));
|
||||
ds4.SetSliderValue(DualShock4Slider.LeftTrigger, (byte)(buttons[(int)(isLeft ? Button.SHOULDER_2 : Button.SHOULDER_1)] ? Byte.MaxValue : 0));
|
||||
ds4.SetSliderValue(DualShock4Slider.RightTrigger, (byte)(buttons[(int)(isLeft ? Button.SHOULDER_1 : Button.SHOULDER_2)] ? Byte.MaxValue : 0));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -177,7 +177,7 @@ namespace BetterJoyForCemu {
|
|||
jc.SetPlayerLED(led);
|
||||
v.SetPlayerLED(led);
|
||||
|
||||
v.xin.Dispose();
|
||||
v.xin.Disconnect();
|
||||
v.xin = null;
|
||||
|
||||
// setting the other joycon's button image
|
||||
|
@ -261,11 +261,10 @@ namespace BetterJoyForCemu {
|
|||
|
||||
void ReenableXinput(Joycon v) {
|
||||
if (showAsXInput) {
|
||||
v.xin = new Xbox360Controller(Program.emClient);
|
||||
v.xin = Program.emClient.CreateXbox360Controller();
|
||||
|
||||
if (toRumble)
|
||||
v.xin.FeedbackReceived += v.ReceiveRumble;
|
||||
v.report = new Xbox360Report();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -240,9 +240,9 @@ namespace BetterJoyForCemu {
|
|||
v.SetPlayerLED(led);
|
||||
|
||||
if (temp.xin != null)
|
||||
temp.xin.Dispose();
|
||||
temp.xin.Disconnect();
|
||||
if (temp.ds4 != null)
|
||||
temp.ds4.Dispose();
|
||||
temp.ds4.Disconnect();
|
||||
temp.xin = null;
|
||||
temp.ds4 = null;
|
||||
|
||||
|
@ -294,12 +294,10 @@ namespace BetterJoyForCemu {
|
|||
|
||||
if (v.xin != null) {
|
||||
v.xin.Disconnect();
|
||||
v.xin.Dispose();
|
||||
}
|
||||
|
||||
if (v.ds4 != null) {
|
||||
v.ds4.Disconnect();
|
||||
v.ds4.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
<package id="Crc32.NET" version="1.2.0" targetFramework="net461" />
|
||||
<package id="Fielder.Fody" version="1.2.3" targetFramework="net461" />
|
||||
<package id="Fody" version="4.2.1" targetFramework="net461" developmentDependency="true" />
|
||||
<package id="Nefarius.ViGEmClient" version="1.15.16" targetFramework="net461" />
|
||||
<package id="JetBrains.Annotations" version="2018.3.0" targetFramework="net461" />
|
||||
<package id="Nefarius.ViGEm.Client" version="1.16.150" targetFramework="net461" />
|
||||
<package id="WindowsInput" version="6.1.1" targetFramework="net461" />
|
||||
</packages>
|
BIN
external/ViGEmClient.dll
vendored
Normal file
BIN
external/ViGEmClient.dll
vendored
Normal file
Binary file not shown.
Loading…
Add table
Reference in a new issue