N64: Fixed the analog control in the virtual pad to look and behave better
This commit is contained in:
parent
fc596038e5
commit
4225ef55af
|
@ -5,8 +5,8 @@ namespace BizHawk.MultiClient
|
|||
{
|
||||
public sealed class AnalogControlPanel : Panel
|
||||
{
|
||||
public int X = 1;
|
||||
public int Y = 1;
|
||||
public int X = 0;
|
||||
public int Y = 0;
|
||||
|
||||
private readonly Brush WhiteBrush = Brushes.White;
|
||||
private readonly Brush BlackBrush = Brushes.Black;
|
||||
|
@ -19,7 +19,7 @@ namespace BizHawk.MultiClient
|
|||
private readonly Pen RedPen;
|
||||
private readonly Pen BluePen;
|
||||
|
||||
private const int DOTW = 8;
|
||||
private Bitmap dot = new Bitmap(7, 7);
|
||||
|
||||
public AnalogControlPanel()
|
||||
{
|
||||
|
@ -39,6 +39,13 @@ namespace BizHawk.MultiClient
|
|||
RedPen = new Pen(RedBrush);
|
||||
BluePen = new Pen(BlueBrush);
|
||||
BorderStyle = BorderStyle.Fixed3D;
|
||||
|
||||
// Draw the dot into a bitmap
|
||||
Graphics g = Graphics.FromImage(dot);
|
||||
g.Clear(Color.Transparent);
|
||||
g.FillRectangle(RedBrush, 2, 0, 3, 7);
|
||||
g.FillRectangle(RedBrush, 1, 1, 5, 5);
|
||||
g.FillRectangle(RedBrush, 0, 2, 7, 3);
|
||||
}
|
||||
|
||||
private int RealToGFX(int val)
|
||||
|
@ -48,7 +55,7 @@ namespace BizHawk.MultiClient
|
|||
|
||||
private int GFXToReal(int val)
|
||||
{
|
||||
int ret = (val * 2) - 128;
|
||||
int ret = (val * 2);
|
||||
if (ret > 127) ret = 127;
|
||||
if (ret < -128) ret = -128;
|
||||
return ret;
|
||||
|
@ -62,12 +69,13 @@ namespace BizHawk.MultiClient
|
|||
e.Graphics.FillRectangle(GrayBrush, 0, 0, 128, 128);
|
||||
e.Graphics.FillEllipse(WhiteBrush, 0, 0, 127, 127);
|
||||
e.Graphics.DrawEllipse(BlackPen, 0, 0, 127, 127);
|
||||
e.Graphics.DrawLine(BlackPen, 65, 0, 65, 127);
|
||||
e.Graphics.DrawLine(BlackPen, 0, 65, 127, 65);
|
||||
e.Graphics.DrawLine(BlackPen, 64, 0, 64, 127);
|
||||
e.Graphics.DrawLine(BlackPen, 0, 63, 127, 63);
|
||||
|
||||
//Line
|
||||
e.Graphics.DrawLine(BluePen, 64, 64, RealToGFX(X), RealToGFX(Y));
|
||||
e.Graphics.FillEllipse(RedBrush, RealToGFX(X) - (DOTW / 2), RealToGFX(Y) - (DOTW / 2), DOTW, DOTW);
|
||||
e.Graphics.DrawLine(BluePen, 64, 63, RealToGFX(X), 127 - RealToGFX(Y));
|
||||
e.Graphics.DrawImage(dot, RealToGFX(X) - 3, 127 - RealToGFX(Y) - 3);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -75,8 +83,8 @@ namespace BizHawk.MultiClient
|
|||
{
|
||||
if (e.Button == MouseButtons.Left)
|
||||
{
|
||||
X = GFXToReal(e.X);
|
||||
Y = GFXToReal(e.Y);
|
||||
X = GFXToReal(e.X - 64);
|
||||
Y = GFXToReal(-(e.Y - 63));
|
||||
}
|
||||
|
||||
Refresh();
|
||||
|
@ -86,8 +94,8 @@ namespace BizHawk.MultiClient
|
|||
{
|
||||
if (e.Button == MouseButtons.Left)
|
||||
{
|
||||
X = GFXToReal(e.X);
|
||||
Y = GFXToReal(e.Y);
|
||||
X = GFXToReal(e.X - 64);
|
||||
Y = GFXToReal(-(e.Y - 63));
|
||||
}
|
||||
|
||||
Refresh();
|
||||
|
|
|
@ -8,6 +8,9 @@ namespace BizHawk.MultiClient
|
|||
{
|
||||
public string Controller = "P1";
|
||||
|
||||
private int old_X = 0;
|
||||
private int old_Y = 0;
|
||||
|
||||
public VirtualPadN64()
|
||||
{
|
||||
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
|
||||
|
@ -214,32 +217,39 @@ namespace BizHawk.MultiClient
|
|||
|
||||
private void AnalogControl1_MouseClick(object sender, MouseEventArgs e)
|
||||
{
|
||||
Global.StickyXORAdapter.SetFloat(Controller + " X Axis", AnalogControl1.X);
|
||||
Global.StickyXORAdapter.SetFloat(Controller + " Y Axis", -AnalogControl1.Y - 1);
|
||||
ManualX.Value = AnalogControl1.X;
|
||||
ManualY.Value = -AnalogControl1.Y - 1;
|
||||
set_analog(AnalogControl1.X, AnalogControl1.Y);
|
||||
}
|
||||
|
||||
private void AnalogControl1_MouseMove(object sender, MouseEventArgs e)
|
||||
{
|
||||
Global.StickyXORAdapter.SetFloat(Controller + " X Axis", AnalogControl1.X);
|
||||
Global.StickyXORAdapter.SetFloat(Controller + " Y Axis", -AnalogControl1.Y - 1);
|
||||
ManualX.Value = AnalogControl1.X;
|
||||
ManualY.Value = -AnalogControl1.Y - 1;
|
||||
set_analog(AnalogControl1.X, AnalogControl1.Y);
|
||||
}
|
||||
|
||||
private void ManualX_ValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
Global.StickyXORAdapter.SetFloat(Controller + " X Axis", (float)ManualX.Value);
|
||||
AnalogControl1.X = (int)ManualX.Value;
|
||||
AnalogControl1.Refresh();
|
||||
if (ManualX.Value != old_X)
|
||||
set_analog((int)ManualX.Value, old_Y);
|
||||
}
|
||||
|
||||
private void ManualY_ValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
Global.StickyXORAdapter.SetFloat(Controller + " Y Axis", (float)ManualY.Value);
|
||||
AnalogControl1.Y = -((int)ManualY.Value + 1);
|
||||
if (ManualY.Value != old_Y)
|
||||
set_analog(old_X, (int)ManualY.Value);
|
||||
}
|
||||
|
||||
public void set_analog(int X, int Y)
|
||||
{
|
||||
Global.StickyXORAdapter.SetFloat(Controller + " X Axis", X);
|
||||
Global.StickyXORAdapter.SetFloat(Controller + " Y Axis", Y);
|
||||
|
||||
AnalogControl1.X = X;
|
||||
AnalogControl1.Y = Y;
|
||||
AnalogControl1.Refresh();
|
||||
|
||||
old_X = X;
|
||||
old_Y = Y;
|
||||
ManualX.Value = X;
|
||||
ManualY.Value = Y;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue