Initial anti-deadzone feature. Minor R2 deadzone fix.

This commit is contained in:
Travis Nickles 2017-03-26 20:55:05 -07:00
parent fc58383a82
commit fa8ba7a0ba
5 changed files with 1085 additions and 2644 deletions

View File

@ -447,43 +447,79 @@ namespace DS4Windows
double lsSquared = Math.Pow(cState.LX - 127.5f, 2) + Math.Pow(cState.LY - 127.5f, 2);
//deadzones
int lsDeadzone = LSDeadzone[device];
int lsAntiDead = LSAntiDeadzone[device];
double lsDeadzoneSquared = Math.Pow(lsDeadzone, 2);
if (lsDeadzone > 0 && lsSquared <= lsDeadzoneSquared)
{
dState.LX = 127;
dState.LY = 127;
}
else if (lsDeadzone > 0 && lsSquared > lsDeadzoneSquared)
else if ((lsDeadzone > 0 && lsSquared > lsDeadzoneSquared) || lsAntiDead > 0)
{
double r = Math.Atan2(-(dState.LY - 127.5f), (dState.LX - 127.5f));
double tempLsXDead = Math.Cos(r) * (lsDeadzone);
double tempLsYDead = Math.Sin(r) * (lsDeadzone);
double maxXValue = dState.LX > 127.5 ? 127.5 : -127.5;
double maxYValue = dState.LY > 127.5 ? 127.5 : -127.5;
dState.LX = (byte)(((dState.LX - 127.5f - tempLsXDead) / (double)(maxXValue - tempLsXDead)) * maxXValue + 127.5f);
dState.LY = (byte)(((dState.LY - 127.5f - tempLsYDead) / (double)(maxYValue - tempLsYDead)) * maxYValue + 127.5f);
double tempLsXDead = 0.0, tempLsYDead = 0.0;
if (lsDeadzone > 0)
{
tempLsXDead = Math.Cos(r) * (lsDeadzone);
tempLsYDead = Math.Sin(r) * (lsDeadzone);
}
double tempLsXAntiDeadPercent = 0.0, tempLsYAntiDeadPercent = 0.0;
if (lsAntiDead > 0)
{
tempLsXAntiDeadPercent = (lsAntiDead / 100.0) * Math.Abs(Math.Cos(r));
tempLsYAntiDeadPercent = (lsAntiDead / 100.0) * Math.Abs(Math.Sin(r));
}
double tempOutputX = ((dState.LX - 127.5f - tempLsXDead) / (double)(maxXValue - tempLsXDead));
double tempOutputY = ((dState.LY - 127.5f - tempLsYDead) / (double)(maxYValue - tempLsYDead));
dState.LX = (byte)((((1.0 - tempLsXAntiDeadPercent) * tempOutputX + tempLsXAntiDeadPercent)) * maxXValue + 127.5f);
dState.LY = (byte)((((1.0 - tempLsYAntiDeadPercent) * tempOutputY + tempLsYAntiDeadPercent)) * maxYValue + 127.5f);
//dState.LX = (byte)(Math.Cos(r) * (127.5f + LSDeadzone[device]) + 127.5f);
//dState.LY = (byte)(Math.Sin(r) * (127.5f + LSDeadzone[device]) + 127.5f);
}
//Console.WriteLine
double rsSquared = Math.Pow(cState.RX - 127.5f, 2) + Math.Pow(cState.RY - 127.5f, 2);
int rsDeadzone = RSDeadzone[device];
int rsAntiDead = RSAntiDeadzone[device];
double rsDeadzoneSquared = Math.Pow(rsDeadzone, 2);
if (rsDeadzone > 0 && rsSquared <= rsDeadzoneSquared)
{
dState.RX = 127;
dState.RY = 127;
}
else if (rsDeadzone > 0 && rsSquared > rsDeadzoneSquared)
else if ((rsDeadzone > 0 && rsSquared > rsDeadzoneSquared) || rsAntiDead > 0)
{
double r = Math.Atan2(-(dState.RY - 127.5f), (dState.RX - 127.5f));
double tempRsXDead = Math.Cos(r) * (lsDeadzone);
double tempRsYDead = Math.Sin(r) * (lsDeadzone);
double maxXValue = dState.RX > 127.5 ? 127.5 : -127.5;
double maxYValue = dState.RY > 127.5 ? 127.5 : -127.5;
dState.RX = (byte)(((dState.RX - 127.5f - tempRsXDead) / (double)(maxXValue - tempRsXDead)) * maxXValue + 127.5f);
dState.RY = (byte)(((dState.RY - 127.5f - tempRsYDead) / (double)(maxYValue - tempRsYDead)) * maxYValue + 127.5f);
double tempRsXDead = 0.0, tempRsYDead = 0.0;
if (rsDeadzone > 0)
{
tempRsXDead = Math.Cos(r) * (rsDeadzone);
tempRsYDead = Math.Sin(r) * (rsDeadzone);
}
double tempRsXAntiDeadPercent = 0.0, tempRsYAntiDeadPercent = 0.0;
if (rsAntiDead > 0)
{
tempRsXAntiDeadPercent = (rsAntiDead / 100.0) * Math.Abs(Math.Cos(r));
tempRsYAntiDeadPercent = (rsAntiDead / 100.0) * Math.Abs(Math.Sin(r));
}
double tempOutputX = ((dState.RX - 127.5f - tempRsXDead) / (double)(maxXValue - tempRsXDead));
double tempOutputY = ((dState.RY - 127.5f - tempRsYDead) / (double)(maxYValue - tempRsYDead));
dState.RX = (byte)((((1.0 - tempRsXAntiDeadPercent) * tempOutputX + tempRsXAntiDeadPercent)) * maxXValue + 127.5f);
dState.RY = (byte)((((1.0 - tempRsYAntiDeadPercent) * tempOutputY + tempRsYAntiDeadPercent)) * maxYValue + 127.5f);
//dState.RX = (byte)(((dState.RX - 127.5f - tempRsXDead) / (double)(maxXValue - tempRsXDead)) * maxXValue + 127.5f);
//dState.RY = (byte)(((dState.RY - 127.5f - tempRsYDead) / (double)(maxYValue - tempRsYDead)) * maxYValue + 127.5f);
//dState.RX = (byte)(Math.Cos(r) * (127.5f + RSDeadzone[device]) + 127.5f);
//dState.RY = (byte)(Math.Sin(r) * (127.5f + RSDeadzone[device]) + 127.5f);
}
@ -506,7 +542,7 @@ namespace DS4Windows
{
if (cState.R2 > r2Deadzone)
{
dState.R2 = (byte)(((dState.R2 - l2Deadzone) / (double)(255 - r2Deadzone)) * 255);
dState.R2 = (byte)(((dState.R2 - r2Deadzone) / (double)(255 - r2Deadzone)) * 255);
}
else
{

View File

@ -319,6 +319,8 @@ namespace DS4Windows
public static double[] SZDeadzone => m_Config.SZDeadzone;
public static int[] LSDeadzone => m_Config.LSDeadzone;
public static int[] RSDeadzone => m_Config.RSDeadzone;
public static int[] LSAntiDeadzone => m_Config.LSAntiDeadzone;
public static int[] RSAntiDeadzone => m_Config.RSAntiDeadzone;
public static int[] LSCurve => m_Config.lsCurve;
public static int[] RSCurve => m_Config.rsCurve;
public static double[] L2Sens => m_Config.l2Sens;
@ -532,6 +534,7 @@ namespace DS4Windows
public Byte[] touchSensitivity = { 100, 100, 100, 100, 100 };
public Byte[] l2Deadzone = { 0, 0, 0, 0, 0 }, r2Deadzone = { 0, 0, 0, 0, 0 };
public int[] LSDeadzone = { 0, 0, 0, 0, 0 }, RSDeadzone = { 0, 0, 0, 0, 0 };
public int[] LSAntiDeadzone = { 0, 0, 0, 0, 0 }, RSAntiDeadzone = { 0, 0, 0, 0, 0 };
public double[] SXDeadzone = { 0.25, 0.25, 0.25, 0.25, 0.25 }, SZDeadzone = { 0.25, 0.25, 0.25, 0.25, 0.25 };
public double[] l2Sens = { 1, 1, 1, 1, 1 }, r2Sens = { 1, 1, 1, 1, 1 };
public double[] LSSens = { 1, 1, 1, 1, 1 }, RSSens = { 1, 1, 1, 1, 1 };

View File

@ -302,6 +302,11 @@
this.shareToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.pSToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.alwaysOnToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.antiDeadzoneTabPage = new System.Windows.Forms.TabPage();
this.label1 = new System.Windows.Forms.Label();
this.nUDLSAntiDead = new System.Windows.Forms.NumericUpDown();
this.label2 = new System.Windows.Forms.Label();
this.nUDRSAntiDead = new System.Windows.Forms.NumericUpDown();
this.advColorDialog = new DS4Windows.AdvancedColorDialog();
((System.ComponentModel.ISupportInitialize)(this.nUDRainbow)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.tBBlueBar)).BeginInit();
@ -374,6 +379,9 @@
((System.ComponentModel.ISupportInitialize)(this.nUDSXS)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nUDSZS)).BeginInit();
this.cMGyroTriggers.SuspendLayout();
this.antiDeadzoneTabPage.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nUDLSAntiDead)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nUDRSAntiDead)).BeginInit();
this.SuspendLayout();
//
// lowColorChooserButton
@ -2552,6 +2560,7 @@
//
this.tCSens.Controls.Add(this.tPDeadzone);
this.tCSens.Controls.Add(this.tPCurve);
this.tCSens.Controls.Add(this.antiDeadzoneTabPage);
resources.ApplyResources(this.tCSens, "tCSens");
this.tCSens.Name = "tCSens";
this.tCSens.SelectedIndex = 0;
@ -3131,6 +3140,60 @@
resources.ApplyResources(this.alwaysOnToolStripMenuItem, "alwaysOnToolStripMenuItem");
this.alwaysOnToolStripMenuItem.CheckedChanged += new System.EventHandler(this.SATrigger_CheckedChanged);
//
// antiDeadzoneTabPage
//
this.antiDeadzoneTabPage.Controls.Add(this.nUDRSAntiDead);
this.antiDeadzoneTabPage.Controls.Add(this.label2);
this.antiDeadzoneTabPage.Controls.Add(this.nUDLSAntiDead);
this.antiDeadzoneTabPage.Controls.Add(this.label1);
resources.ApplyResources(this.antiDeadzoneTabPage, "antiDeadzoneTabPage");
this.antiDeadzoneTabPage.Name = "antiDeadzoneTabPage";
this.antiDeadzoneTabPage.UseVisualStyleBackColor = true;
//
// label1
//
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
//
// nUDLSAntiDead
//
this.nUDLSAntiDead.DecimalPlaces = 2;
this.nUDLSAntiDead.Increment = new decimal(new int[] {
1,
0,
0,
65536});
resources.ApplyResources(this.nUDLSAntiDead, "nUDLSAntiDead");
this.nUDLSAntiDead.Maximum = new decimal(new int[] {
1,
0,
0,
0});
this.nUDLSAntiDead.Name = "nUDLSAntiDead";
this.nUDLSAntiDead.ValueChanged += new System.EventHandler(this.nUDLSAntiDead_ValueChanged);
//
// label2
//
resources.ApplyResources(this.label2, "label2");
this.label2.Name = "label2";
//
// nUDRSAntiDead
//
this.nUDRSAntiDead.DecimalPlaces = 2;
this.nUDRSAntiDead.Increment = new decimal(new int[] {
1,
0,
0,
65536});
resources.ApplyResources(this.nUDRSAntiDead, "nUDRSAntiDead");
this.nUDRSAntiDead.Maximum = new decimal(new int[] {
1,
0,
0,
0});
this.nUDRSAntiDead.Name = "nUDRSAntiDead";
this.nUDRSAntiDead.ValueChanged += new System.EventHandler(this.nUDRSAntiDead_ValueChanged);
//
// Options
//
resources.ApplyResources(this, "$this");
@ -3229,6 +3292,10 @@
((System.ComponentModel.ISupportInitialize)(this.nUDSXS)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nUDSZS)).EndInit();
this.cMGyroTriggers.ResumeLayout(false);
this.antiDeadzoneTabPage.ResumeLayout(false);
this.antiDeadzoneTabPage.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nUDLSAntiDead)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nUDRSAntiDead)).EndInit();
this.ResumeLayout(false);
}
@ -3510,5 +3577,10 @@
private System.Windows.Forms.Button btnRainbow;
private System.Windows.Forms.ToolStripMenuItem alwaysOnToolStripMenuItem;
public System.Windows.Forms.ToolStripMenuItem fingerOnTouchpadToolStripMenuItem;
private System.Windows.Forms.TabPage antiDeadzoneTabPage;
private System.Windows.Forms.NumericUpDown nUDRSAntiDead;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.NumericUpDown nUDLSAntiDead;
private System.Windows.Forms.Label label1;
}
}

View File

@ -2335,6 +2335,16 @@ namespace DS4Windows
}
}
private void nUDLSAntiDead_ValueChanged(object sender, EventArgs e)
{
LSAntiDeadzone[device] = (byte)(nUDLSAntiDead.Value * 100);
}
private void nUDRSAntiDead_ValueChanged(object sender, EventArgs e)
{
RSAntiDeadzone[device] = (byte)(nUDRSAntiDead.Value * 100);
}
private void Options_Resize(object sender, EventArgs e)
{
fLPSettings.AutoScroll = false;

File diff suppressed because it is too large Load Diff