diff --git a/BizHawk.MultiClient/Config.cs b/BizHawk.MultiClient/Config.cs
index c2f6f24a12..6cf5701eb5 100644
--- a/BizHawk.MultiClient/Config.cs
+++ b/BizHawk.MultiClient/Config.cs
@@ -702,10 +702,13 @@ namespace BizHawk.MultiClient
public string Value;
/// sensitivity and flip
public float Mult;
- public AnalogBind(string Value, float Mult)
+ /// portion of axis to ignore
+ public float Deadzone;
+ public AnalogBind(string Value, float Mult, float Deadzone)
{
this.Value = Value;
this.Mult = Mult;
+ this.Deadzone = Deadzone;
}
}
diff --git a/BizHawk.MultiClient/Input/ControllerBinding.cs b/BizHawk.MultiClient/Input/ControllerBinding.cs
index d9fb327305..c8dd7ddbd3 100644
--- a/BizHawk.MultiClient/Input/ControllerBinding.cs
+++ b/BizHawk.MultiClient/Input/ControllerBinding.cs
@@ -92,11 +92,27 @@ namespace BizHawk.MultiClient
float input = controller.GetFloat(kvp.Value.Value);
string outkey = kvp.Key;
float multiplier = kvp.Value.Mult;
+ float deadzone = kvp.Value.Deadzone;
ControllerDefinition.FloatRange range;
if (FloatRanges.TryGetValue(outkey, out range))
{
// input range is assumed to be -10000,0,10000
- // todo: deadzones and such
+
+ // first, modify for deadzone
+ {
+ float absinput = Math.Abs(input);
+ float zeropoint = deadzone * 10000.0f;
+ if (absinput < zeropoint)
+ input = 0.0f;
+ else
+ {
+ absinput -= zeropoint;
+ absinput *= 10000.0f;
+ absinput /= (10000.0f - zeropoint);
+ input = absinput * Math.Sign(input);
+ }
+ }
+
float output = (input * multiplier + 10000.0f) * (range.Max - range.Min) / 20000.0f + range.Min;
if (output < range.Min) output = range.Min;
if (output > range.Max) output = range.Max;
diff --git a/BizHawk.MultiClient/config/ControllerConfig/AnalogBindControl.Designer.cs b/BizHawk.MultiClient/config/ControllerConfig/AnalogBindControl.Designer.cs
index 4456f28ed4..4bac2c8f35 100644
--- a/BizHawk.MultiClient/config/ControllerConfig/AnalogBindControl.Designer.cs
+++ b/BizHawk.MultiClient/config/ControllerConfig/AnalogBindControl.Designer.cs
@@ -35,7 +35,10 @@
this.labelSensitivity = new System.Windows.Forms.Label();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.buttonBind = new System.Windows.Forms.Button();
+ this.trackBarDeadzone = new System.Windows.Forms.TrackBar();
+ this.labelDeadzone = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.trackBarSensitivity)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.trackBarDeadzone)).BeginInit();
this.SuspendLayout();
//
// textBox1
@@ -58,7 +61,7 @@
// trackBarSensitivity
//
this.trackBarSensitivity.LargeChange = 20;
- this.trackBarSensitivity.Location = new System.Drawing.Point(169, 3);
+ this.trackBarSensitivity.Location = new System.Drawing.Point(267, 3);
this.trackBarSensitivity.Maximum = 20;
this.trackBarSensitivity.Minimum = -20;
this.trackBarSensitivity.Name = "trackBarSensitivity";
@@ -71,7 +74,7 @@
// labelSensitivity
//
this.labelSensitivity.AutoSize = true;
- this.labelSensitivity.Location = new System.Drawing.Point(3, 26);
+ this.labelSensitivity.Location = new System.Drawing.Point(166, 6);
this.labelSensitivity.Name = "labelSensitivity";
this.labelSensitivity.Size = new System.Drawing.Size(95, 13);
this.labelSensitivity.TabIndex = 3;
@@ -83,7 +86,7 @@
//
// buttonBind
//
- this.buttonBind.Location = new System.Drawing.Point(279, 1);
+ this.buttonBind.Location = new System.Drawing.Point(3, 29);
this.buttonBind.Name = "buttonBind";
this.buttonBind.Size = new System.Drawing.Size(75, 23);
this.buttonBind.TabIndex = 4;
@@ -91,18 +94,38 @@
this.buttonBind.UseVisualStyleBackColor = true;
this.buttonBind.Click += new System.EventHandler(this.buttonBind_Click);
//
+ // trackBarDeadzone
+ //
+ this.trackBarDeadzone.Location = new System.Drawing.Point(267, 51);
+ this.trackBarDeadzone.Name = "trackBarDeadzone";
+ this.trackBarDeadzone.Size = new System.Drawing.Size(104, 42);
+ this.trackBarDeadzone.TabIndex = 5;
+ this.trackBarDeadzone.ValueChanged += new System.EventHandler(this.trackBarDeadzone_ValueChanged);
+ //
+ // labelDeadzone
+ //
+ this.labelDeadzone.AutoSize = true;
+ this.labelDeadzone.Location = new System.Drawing.Point(166, 60);
+ this.labelDeadzone.Name = "labelDeadzone";
+ this.labelDeadzone.Size = new System.Drawing.Size(97, 13);
+ this.labelDeadzone.TabIndex = 6;
+ this.labelDeadzone.Text = "Deadzone: 5 billion";
+ //
// AnalogBindControl
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Controls.Add(this.labelDeadzone);
+ this.Controls.Add(this.trackBarDeadzone);
this.Controls.Add(this.buttonBind);
this.Controls.Add(this.labelSensitivity);
this.Controls.Add(this.trackBarSensitivity);
this.Controls.Add(this.labelButtonName);
this.Controls.Add(this.textBox1);
this.Name = "AnalogBindControl";
- this.Size = new System.Drawing.Size(387, 43);
+ this.Size = new System.Drawing.Size(378, 99);
((System.ComponentModel.ISupportInitialize)(this.trackBarSensitivity)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.trackBarDeadzone)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
@@ -116,5 +139,7 @@
private System.Windows.Forms.Label labelSensitivity;
private System.Windows.Forms.Timer timer1;
private System.Windows.Forms.Button buttonBind;
+ private System.Windows.Forms.TrackBar trackBarDeadzone;
+ private System.Windows.Forms.Label labelDeadzone;
}
}
diff --git a/BizHawk.MultiClient/config/ControllerConfig/AnalogBindControl.cs b/BizHawk.MultiClient/config/ControllerConfig/AnalogBindControl.cs
index f817148028..b5d2a8c3f1 100644
--- a/BizHawk.MultiClient/config/ControllerConfig/AnalogBindControl.cs
+++ b/BizHawk.MultiClient/config/ControllerConfig/AnalogBindControl.cs
@@ -27,6 +27,9 @@ namespace BizHawk.MultiClient.config.ControllerConfig
this.ButtonName = ButtonName;
labelButtonName.Text = ButtonName;
trackBarSensitivity.Value = (int)(Bind.Mult * 10.0f);
+ trackBarDeadzone.Value = (int)(Bind.Deadzone * 10.0f);
+ trackBarSensitivity_ValueChanged(null, null);
+ trackBarDeadzone_ValueChanged(null, null);
textBox1.Text = Bind.Value;
}
@@ -67,5 +70,11 @@ namespace BizHawk.MultiClient.config.ControllerConfig
Bind.Mult = trackBarSensitivity.Value / 10.0f;
labelSensitivity.Text = string.Format("Sensitivity: {0}", Bind.Mult);
}
+
+ private void trackBarDeadzone_ValueChanged(object sender, EventArgs e)
+ {
+ Bind.Deadzone = trackBarDeadzone.Value / 10.0f;
+ labelDeadzone.Text = string.Format("Deadzone: {0}", Bind.Deadzone);
+ }
}
}
diff --git a/BizHawk.MultiClient/config/NewControllerConfig.cs b/BizHawk.MultiClient/config/NewControllerConfig.cs
index 40256ea824..b82eb483a1 100644
--- a/BizHawk.MultiClient/config/NewControllerConfig.cs
+++ b/BizHawk.MultiClient/config/NewControllerConfig.cs
@@ -153,7 +153,7 @@ namespace BizHawk.MultiClient.config
{
LoadToPanel(tabPage1, the_definition.Name, the_definition.BoolButtons, Global.Config.AllTrollers, "", CreateNormalPanel);
LoadToPanel(tabPage2, the_definition.Name, the_definition.BoolButtons, Global.Config.AllTrollersAutoFire, "", CreateNormalPanel);
- LoadToPanel(tabPage3, the_definition.Name, the_definition.FloatControls, Global.Config.AllTrollersAnalog, new Config.AnalogBind("", 1.0f), CreateAnalogPanel);
+ LoadToPanel(tabPage3, the_definition.Name, the_definition.FloatControls, Global.Config.AllTrollersAnalog, new Config.AnalogBind("", 1.0f, 0.0f), CreateAnalogPanel);
if (tabPage3.Controls.Count == 0)
{