diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPad.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPad.cs
index aa8238de3d..1c1935bb36 100644
--- a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPad.cs
+++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPad.cs
@@ -85,7 +85,7 @@ namespace BizHawk.Client.EmuHawk
{
Name = button.Name,
Location = UIHelper.Scale(button.Location),
- Size = UIHelper.Scale(new Size(127 + 79, 127 + 9)),
+ Size = UIHelper.Scale(new Size(180 + 79, 200 + 9)),
RangeX = new float[] { button.MinValue, button.MidValue, button.MaxValue },
RangeY = new float[] { button.MinValueSec, button.MidValueSec, button.MaxValueSec },
});
diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogStick.Designer.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogStick.Designer.cs
index 6245962f67..2d3abd745e 100644
--- a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogStick.Designer.cs
+++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogStick.Designer.cs
@@ -35,18 +35,24 @@
this.MaxLabel = new System.Windows.Forms.Label();
this.MaxXNumeric = new System.Windows.Forms.NumericUpDown();
this.MaxYNumeric = new System.Windows.Forms.NumericUpDown();
+ this.rLabel = new System.Windows.Forms.Label();
+ this.manualR = new System.Windows.Forms.NumericUpDown();
+ this.manualTheta = new System.Windows.Forms.NumericUpDown();
+ this.thetaLabel = new System.Windows.Forms.Label();
this.AnalogStick = new BizHawk.Client.EmuHawk.AnalogStickPanel();
((System.ComponentModel.ISupportInitialize)(this.ManualX)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.ManualY)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.MaxXNumeric)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.MaxYNumeric)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.manualR)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.manualTheta)).BeginInit();
this.SuspendLayout();
//
// XLabel
//
this.XLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.XLabel.AutoSize = true;
- this.XLabel.Location = new System.Drawing.Point(138, 7);
+ this.XLabel.Location = new System.Drawing.Point(187, 7);
this.XLabel.Name = "XLabel";
this.XLabel.Size = new System.Drawing.Size(14, 13);
this.XLabel.TabIndex = 23;
@@ -55,7 +61,7 @@
// ManualX
//
this.ManualX.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.ManualX.Location = new System.Drawing.Point(156, 3);
+ this.ManualX.Location = new System.Drawing.Point(205, 3);
this.ManualX.Maximum = new decimal(new int[] {
127,
0,
@@ -69,14 +75,13 @@
this.ManualX.Name = "ManualX";
this.ManualX.Size = new System.Drawing.Size(44, 20);
this.ManualX.TabIndex = 24;
- this.ManualX.ValueChanged += new System.EventHandler(this.ManualX_ValueChanged);
- this.ManualX.KeyUp += new System.Windows.Forms.KeyEventHandler(this.ManualX_KeyUp);
+ this.ManualX.KeyUp += new System.Windows.Forms.KeyEventHandler(this.ManualXY_ValueChanged);
//
// YLabel
//
this.YLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.YLabel.AutoSize = true;
- this.YLabel.Location = new System.Drawing.Point(138, 33);
+ this.YLabel.Location = new System.Drawing.Point(187, 33);
this.YLabel.Name = "YLabel";
this.YLabel.Size = new System.Drawing.Size(14, 13);
this.YLabel.TabIndex = 26;
@@ -85,7 +90,7 @@
// ManualY
//
this.ManualY.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.ManualY.Location = new System.Drawing.Point(156, 29);
+ this.ManualY.Location = new System.Drawing.Point(205, 29);
this.ManualY.Maximum = new decimal(new int[] {
127,
0,
@@ -100,14 +105,13 @@
this.ManualY.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.ManualY.Size = new System.Drawing.Size(44, 20);
this.ManualY.TabIndex = 25;
- this.ManualY.ValueChanged += new System.EventHandler(this.ManualY_ValueChanged);
- this.ManualY.KeyUp += new System.Windows.Forms.KeyEventHandler(this.ManualY_KeyUp);
+ this.ManualY.KeyUp += new System.Windows.Forms.KeyEventHandler(this.ManualXY_ValueChanged);
//
// MaxLabel
//
this.MaxLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.MaxLabel.AutoSize = true;
- this.MaxLabel.Location = new System.Drawing.Point(138, 72);
+ this.MaxLabel.Location = new System.Drawing.Point(205, 107);
this.MaxLabel.Name = "MaxLabel";
this.MaxLabel.Size = new System.Drawing.Size(47, 13);
this.MaxLabel.TabIndex = 27;
@@ -116,7 +120,7 @@
// MaxXNumeric
//
this.MaxXNumeric.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.MaxXNumeric.Location = new System.Drawing.Point(138, 89);
+ this.MaxXNumeric.Location = new System.Drawing.Point(205, 124);
this.MaxXNumeric.Maximum = new decimal(new int[] {
127,
0,
@@ -130,13 +134,13 @@
this.MaxXNumeric.Name = "MaxXNumeric";
this.MaxXNumeric.Size = new System.Drawing.Size(44, 20);
this.MaxXNumeric.TabIndex = 28;
- this.MaxXNumeric.ValueChanged += new System.EventHandler(this.MaxXNumeric_ValueChanged);
- this.MaxXNumeric.KeyUp += new System.Windows.Forms.KeyEventHandler(this.MaxXNumeric_KeyUp);
+ this.MaxXNumeric.ValueChanged += new System.EventHandler(this.MaxManualXY_ValueChanged);
+ this.MaxXNumeric.KeyUp += new System.Windows.Forms.KeyEventHandler(this.MaxManualXY_ValueChanged);
//
// MaxYNumeric
//
this.MaxYNumeric.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.MaxYNumeric.Location = new System.Drawing.Point(138, 112);
+ this.MaxYNumeric.Location = new System.Drawing.Point(205, 147);
this.MaxYNumeric.Maximum = new decimal(new int[] {
127,
0,
@@ -151,21 +155,71 @@
this.MaxYNumeric.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.MaxYNumeric.Size = new System.Drawing.Size(44, 20);
this.MaxYNumeric.TabIndex = 29;
- this.MaxYNumeric.ValueChanged += new System.EventHandler(this.MaxYNumeric_ValueChanged);
- this.MaxYNumeric.KeyUp += new System.Windows.Forms.KeyEventHandler(this.MaxYNumeric_KeyUp);
+ this.MaxYNumeric.ValueChanged += new System.EventHandler(this.MaxManualXY_ValueChanged);
+ this.MaxYNumeric.KeyUp += new System.Windows.Forms.KeyEventHandler(this.MaxManualXY_ValueChanged);
+ //
+ // rLabel
+ //
+ this.rLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.rLabel.AutoSize = true;
+ this.rLabel.Location = new System.Drawing.Point(167, 60);
+ this.rLabel.Name = "rLabel";
+ this.rLabel.Size = new System.Drawing.Size(26, 13);
+ this.rLabel.TabIndex = 30;
+ this.rLabel.Text = "Ray";
+ //
+ // manualR
+ //
+ this.manualR.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.manualR.DecimalPlaces = 2;
+ this.manualR.Location = new System.Drawing.Point(193, 58);
+ this.manualR.Maximum = new decimal(new int[] {
+ 182,
+ 0,
+ 0,
+ 0});
+ this.manualR.Name = "manualR";
+ this.manualR.Size = new System.Drawing.Size(56, 20);
+ this.manualR.TabIndex = 31;
+ //
+ // manualTheta
+ //
+ this.manualTheta.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.manualTheta.DecimalPlaces = 2;
+ this.manualTheta.Location = new System.Drawing.Point(193, 84);
+ this.manualTheta.Maximum = new decimal(new int[] {
+ 360,
+ 0,
+ 0,
+ 0});
+ this.manualTheta.Minimum = new decimal(new int[] {
+ 360,
+ 0,
+ 0,
+ -2147483648});
+ this.manualTheta.Name = "manualTheta";
+ this.manualTheta.Size = new System.Drawing.Size(56, 20);
+ this.manualTheta.TabIndex = 33;
+ //
+ // thetaLabel
+ //
+ this.thetaLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.thetaLabel.AutoSize = true;
+ this.thetaLabel.Location = new System.Drawing.Point(167, 86);
+ this.thetaLabel.Name = "thetaLabel";
+ this.thetaLabel.Size = new System.Drawing.Size(20, 13);
+ this.thetaLabel.TabIndex = 32;
+ this.thetaLabel.Text = "θ °";
//
// AnalogStick
//
- this.AnalogStick.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
this.AnalogStick.BackColor = System.Drawing.Color.Gray;
this.AnalogStick.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.AnalogStick.ClearCallback = null;
this.AnalogStick.Location = new System.Drawing.Point(3, 3);
this.AnalogStick.Name = "AnalogStick";
this.AnalogStick.ReadOnly = false;
- this.AnalogStick.Size = new System.Drawing.Size(129, 129);
+ this.AnalogStick.Size = new System.Drawing.Size(164, 164);
this.AnalogStick.TabIndex = 0;
this.AnalogStick.X = 0;
this.AnalogStick.Y = 0;
@@ -176,6 +230,10 @@
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Controls.Add(this.manualTheta);
+ this.Controls.Add(this.thetaLabel);
+ this.Controls.Add(this.manualR);
+ this.Controls.Add(this.rLabel);
this.Controls.Add(this.MaxYNumeric);
this.Controls.Add(this.MaxXNumeric);
this.Controls.Add(this.MaxLabel);
@@ -185,12 +243,14 @@
this.Controls.Add(this.XLabel);
this.Controls.Add(this.AnalogStick);
this.Name = "VirtualPadAnalogStick";
- this.Size = new System.Drawing.Size(204, 136);
+ this.Size = new System.Drawing.Size(253, 172);
this.Load += new System.EventHandler(this.VirtualPadAnalogStick_Load);
((System.ComponentModel.ISupportInitialize)(this.ManualX)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.ManualY)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.MaxXNumeric)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.MaxYNumeric)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.manualR)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.manualTheta)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
@@ -206,5 +266,9 @@
private System.Windows.Forms.Label MaxLabel;
private System.Windows.Forms.NumericUpDown MaxXNumeric;
private System.Windows.Forms.NumericUpDown MaxYNumeric;
+ private System.Windows.Forms.Label rLabel;
+ private System.Windows.Forms.NumericUpDown manualR;
+ private System.Windows.Forms.NumericUpDown manualTheta;
+ private System.Windows.Forms.Label thetaLabel;
}
}
diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogStick.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogStick.cs
index edd6b6cd02..f562c323c0 100644
--- a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogStick.cs
+++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogStick.cs
@@ -5,18 +5,34 @@ using System.Windows.Forms;
using BizHawk.Emulation.Common;
using BizHawk.Client.Common;
using System.Windows;
+using BizHawk.Common.NumberExtensions;
namespace BizHawk.Client.EmuHawk
{
public partial class VirtualPadAnalogStick : UserControl, IVirtualPadControl
{
+ #region Fields
+
private bool _programmaticallyUpdatingNumerics;
private bool _readonly;
+ private EventHandler manualXYValueChangedEventHandler;
+ private EventHandler polarNumericChangedEventHandler;
+
+ #endregion
+
public VirtualPadAnalogStick()
{
InitializeComponent();
AnalogStick.ClearCallback = ClearCallback;
+
+ manualXYValueChangedEventHandler = new EventHandler(ManualXY_ValueChanged);
+ polarNumericChangedEventHandler = new EventHandler(PolarNumeric_Changed);
+
+ ManualX.ValueChanged += manualXYValueChangedEventHandler;
+ ManualY.ValueChanged += manualXYValueChangedEventHandler;
+ manualR.ValueChanged += polarNumericChangedEventHandler;
+ manualTheta.ValueChanged += polarNumericChangedEventHandler;
}
public float[] RangeX = new float[] { -128f, 0.0f, 127f };
@@ -64,6 +80,8 @@ namespace BizHawk.Client.EmuHawk
{
ManualX.Value = 0;
ManualY.Value = 0;
+ manualR.Value = 0;
+ manualTheta.Value = 0;
//see HOOMOO
Global.AutofireStickyXORAdapter.SetSticky(AnalogStick.XName, false);
Global.StickyXORAdapter.Unset(AnalogStick.XName);
@@ -95,12 +113,16 @@ namespace BizHawk.Client.EmuHawk
MaxLabel.Enabled =
MaxXNumeric.Enabled =
MaxYNumeric.Enabled =
+ manualR.Enabled =
+ rLabel.Enabled =
+ manualTheta.Enabled =
+ thetaLabel.Enabled =
!value;
- AnalogStick.ReadOnly =
+ AnalogStick.ReadOnly =
_readonly =
value;
-
+
Refresh();
}
}
@@ -130,24 +152,30 @@ namespace BizHawk.Client.EmuHawk
AnalogStick.SetPrevious(previous);
}
- private void ManualX_ValueChanged(object sender, EventArgs e)
+ private void ManualXY_ValueChanged(object sender, EventArgs e)
{
SetAnalogControlFromNumerics();
}
-
- private void ManualX_KeyUp(object sender, KeyEventArgs e)
+ private void MaxManualXY_ValueChanged(object sender, EventArgs e)
{
- SetAnalogControlFromNumerics();
+ SetAnalogMaxFromNumerics();
}
- private void ManualY_KeyUp(object sender, KeyEventArgs e)
+ private void PolarNumeric_Changed(object sender, EventArgs e)
{
- SetAnalogControlFromNumerics();
- }
+ ManualX.ValueChanged -= manualXYValueChangedEventHandler;
+ ManualY.ValueChanged -= manualXYValueChangedEventHandler;
- private void ManualY_ValueChanged(object sender, EventArgs e)
- {
- SetAnalogControlFromNumerics();
+ ManualX.Value = Math.Ceiling(manualR.Value * (decimal)Math.Cos(Math.PI * (double)manualTheta.Value / 180)).Clamp(-127, 127);
+ ManualY.Value = Math.Ceiling(manualR.Value * (decimal)Math.Sin(Math.PI * (double)manualTheta.Value / 180)).Clamp(-127, 127);
+
+ AnalogStick.X = (int)ManualX.Value;
+ AnalogStick.Y = (int)ManualY.Value;
+ AnalogStick.HasValue = true;
+ AnalogStick.Refresh();
+
+ ManualX.ValueChanged += manualXYValueChangedEventHandler;
+ ManualY.ValueChanged += manualXYValueChangedEventHandler;
}
private void SetAnalogControlFromNumerics()
@@ -188,6 +216,15 @@ namespace BizHawk.Client.EmuHawk
ManualY.Value = 0;
}
}
+
+ manualR.ValueChanged -= polarNumericChangedEventHandler;
+ manualTheta.ValueChanged -= polarNumericChangedEventHandler;
+
+ manualR.Value = (decimal)Math.Sqrt(Math.Pow(AnalogStick.X, 2) + Math.Pow(AnalogStick.Y, 2));
+ manualTheta.Value = (decimal)(Math.Atan2(AnalogStick.Y, AnalogStick.X) * (180 / Math.PI));
+
+ manualR.ValueChanged += polarNumericChangedEventHandler;
+ manualTheta.ValueChanged += polarNumericChangedEventHandler;
}
private void AnalogStick_MouseDown(object sender, MouseEventArgs e)
@@ -210,26 +247,6 @@ namespace BizHawk.Client.EmuHawk
}
}
- private void MaxXNumeric_ValueChanged(object sender, EventArgs e)
- {
- SetAnalogMaxFromNumerics();
- }
-
- private void MaxXNumeric_KeyUp(object sender, KeyEventArgs e)
- {
- SetAnalogMaxFromNumerics();
- }
-
- private void MaxYNumeric_ValueChanged(object sender, EventArgs e)
- {
- SetAnalogMaxFromNumerics();
- }
-
- private void MaxYNumeric_KeyUp(object sender, KeyEventArgs e)
- {
- SetAnalogMaxFromNumerics();
- }
-
private void SetAnalogMaxFromNumerics()
{
if (!_programmaticallyUpdatingNumerics)
diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/components/AnalogSticklPanel.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/components/AnalogSticklPanel.cs
index 77da016124..46d17aa5c7 100644
--- a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/components/AnalogSticklPanel.cs
+++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/components/AnalogSticklPanel.cs
@@ -123,8 +123,8 @@ namespace BizHawk.Client.EmuHawk
//dont count on this working. it's never been tested.
//but it kind of must be, or else nothing here would work...
- public float ScaleX = 0.5f;
- public float ScaleY = 0.5f;
+ public float ScaleX = 0.60f;
+ public float ScaleY = 0.60f;
int MinX { get { return (int)(RangeX[0]); } }
int MinY { get { return (int)(RangeY[0]); } }
@@ -252,7 +252,7 @@ namespace BizHawk.Client.EmuHawk
unchecked
{
// Background
- e.Graphics.Clear(Color.Black);
+ e.Graphics.Clear(Color.LightGray);
e.Graphics.FillRectangle(GrayBrush, PixelMinX, PixelMinY, PixelMaxX - PixelMinX, PixelMaxY- PixelMinY);
e.Graphics.FillEllipse(ReadOnly ? OffWhiteBrush : WhiteBrush, PixelMinX, PixelMinY, PixelMaxX - PixelMinX - 2, PixelMaxY - PixelMinY - 3);
diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/N64Schema.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/N64Schema.cs
index 6afa6fb363..aa3ecbfa1d 100644
--- a/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/N64Schema.cs
+++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/N64Schema.cs
@@ -26,7 +26,7 @@ namespace BizHawk.Client.EmuHawk
return new PadSchema
{
IsConsole = false,
- DefaultSize = new Size(220, 316),
+ DefaultSize = new Size(275, 316),
Buttons = new[]
{
new PadSchema.ButtonScema
@@ -34,7 +34,7 @@ namespace BizHawk.Client.EmuHawk
Name = "P" + controller + " DPad U",
DisplayName = "",
Icon = Properties.Resources.BlueUp,
- Location = new Point(24, 195),
+ Location = new Point(24, 230),
Type = PadSchema.PadInputType.Boolean
},
new PadSchema.ButtonScema
@@ -42,7 +42,7 @@ namespace BizHawk.Client.EmuHawk
Name = "P" + controller + " DPad D",
DisplayName = "",
Icon = Properties.Resources.BlueDown,
- Location = new Point(24, 216),
+ Location = new Point(24, 251),
Type = PadSchema.PadInputType.Boolean
},
new PadSchema.ButtonScema
@@ -50,7 +50,7 @@ namespace BizHawk.Client.EmuHawk
Name = "P" + controller + " DPad L",
DisplayName = "",
Icon = Properties.Resources.Back,
- Location = new Point(3, 207),
+ Location = new Point(3, 242),
Type = PadSchema.PadInputType.Boolean
},
new PadSchema.ButtonScema
@@ -58,77 +58,77 @@ namespace BizHawk.Client.EmuHawk
Name = "P" + controller + " DPad R",
DisplayName = "",
Icon = Properties.Resources.Forward,
- Location = new Point(45, 207),
+ Location = new Point(45, 242),
Type = PadSchema.PadInputType.Boolean
},
new PadSchema.ButtonScema
{
Name = "P" + controller + " L",
DisplayName = "L",
- Location = new Point(3, 150),
+ Location = new Point(3, 185),
Type = PadSchema.PadInputType.Boolean
},
new PadSchema.ButtonScema
{
Name = "P" + controller + " R",
DisplayName = "R",
- Location = new Point(191, 150),
+ Location = new Point(191, 185),
Type = PadSchema.PadInputType.Boolean
},
new PadSchema.ButtonScema
{
Name = "P" + controller + " Z",
DisplayName = "Z",
- Location = new Point(81, 234),
+ Location = new Point(81, 269),
Type = PadSchema.PadInputType.Boolean
},
new PadSchema.ButtonScema
{
Name = "P" + controller + " Start",
DisplayName = "S",
- Location = new Point(81, 211),
+ Location = new Point(81, 246),
Type = PadSchema.PadInputType.Boolean
},
new PadSchema.ButtonScema
{
Name = "P" + controller + " B",
DisplayName = "B",
- Location = new Point(127, 211),
+ Location = new Point(127, 246),
Type = PadSchema.PadInputType.Boolean
},
new PadSchema.ButtonScema
{
Name = "P" + controller + " A",
DisplayName = "A",
- Location = new Point(138, 234),
+ Location = new Point(138, 269),
Type = PadSchema.PadInputType.Boolean
},
new PadSchema.ButtonScema
{
Name = "P" + controller + " C Up",
Icon = Properties.Resources.YellowUp,
- Location = new Point(173, 175),
+ Location = new Point(173, 210),
Type = PadSchema.PadInputType.Boolean
},
new PadSchema.ButtonScema
{
Name = "P" + controller + " C Down",
Icon = Properties.Resources.YellowDown,
- Location = new Point(173, 196),
+ Location = new Point(173, 231),
Type = PadSchema.PadInputType.Boolean
},
new PadSchema.ButtonScema
{
Name = "P" + controller + " C Left",
Icon = Properties.Resources.YellowLeft,
- Location = new Point(152, 189),
+ Location = new Point(152, 221),
Type = PadSchema.PadInputType.Boolean
},
new PadSchema.ButtonScema
{
Name = "P" + controller + " C Right",
Icon = Properties.Resources.YellowRight,
- Location = new Point(194, 189),
+ Location = new Point(194, 221),
Type = PadSchema.PadInputType.Boolean
},
new PadSchema.ButtonScema
diff --git a/BizHawk.Common/Extensions/NumberExtensions.cs b/BizHawk.Common/Extensions/NumberExtensions.cs
index cb2f5f19b6..3cb3294de2 100644
--- a/BizHawk.Common/Extensions/NumberExtensions.cs
+++ b/BizHawk.Common/Extensions/NumberExtensions.cs
@@ -1,4 +1,5 @@
-using System.Linq;
+using System;
+using System.Linq;
namespace BizHawk.Common.NumberExtensions
{
@@ -106,5 +107,29 @@ namespace BizHawk.Common.NumberExtensions
{
return a - (b * (int)System.Math.Floor((float)a / b));
}
+
+ ///
+ /// Force the value to be stricly between min and max (both exclued)
+ ///
+ /// Anything that implements
+ /// Value that will be clamped
+ /// Minimum allowed
+ /// Maximum allowed
+ /// The value if strictly between min and max; otherwise min (or max depending of what is passed)
+ public static T Clamp(this T val, T min, T max) where T : IComparable
+ {
+ if(val.CompareTo(min) < 0)
+ {
+ return min;
+ }
+ else if(val.CompareTo(max) > 0)
+ {
+ return max;
+ }
+ else
+ {
+ return val;
+ }
+ }
}
}