Virtualpads - simplify some boilerplate logic
This commit is contained in:
parent
83be118d03
commit
8e2fa8a31b
|
@ -11,7 +11,13 @@ namespace BizHawk.Client.EmuHawk
|
|||
public partial class VirtualPadForm : Form, IToolForm
|
||||
{
|
||||
// TODO: UpdateValues doesn't support all cores, and is probably wrong for gens, also done in an unsustainable way
|
||||
private readonly List<IVirtualPad> _pads = new List<IVirtualPad>();
|
||||
private List<IVirtualPad> Pads
|
||||
{
|
||||
get
|
||||
{
|
||||
return ControllerBox.Controls.OfType<IVirtualPad>().ToList();
|
||||
}
|
||||
}
|
||||
|
||||
private int _defaultWidth;
|
||||
private int _defaultHeight;
|
||||
|
@ -37,7 +43,6 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
|
||||
ControllerBox.Controls.Clear();
|
||||
_pads.Clear();
|
||||
LoadPads();
|
||||
}
|
||||
|
||||
|
@ -56,63 +61,63 @@ namespace BizHawk.Client.EmuHawk
|
|||
switch (Global.Emulator.SystemId)
|
||||
{
|
||||
case "NES":
|
||||
_pads[0].SetButtons(str.Substring(3, 8));
|
||||
_pads[1].SetButtons(str.Substring(12, 8));
|
||||
_pads[2].SetButtons(str[1].ToString());
|
||||
Pads[0].SetButtons(str.Substring(3, 8));
|
||||
Pads[1].SetButtons(str.Substring(12, 8));
|
||||
Pads[2].SetButtons(str[1].ToString());
|
||||
break;
|
||||
case "A26":
|
||||
_pads[0].SetButtons(str.Substring(4, 5));
|
||||
_pads[1].SetButtons(str.Substring(10, 5));
|
||||
_pads[2].SetButtons(str.Substring(1, 2));
|
||||
Pads[0].SetButtons(str.Substring(4, 5));
|
||||
Pads[1].SetButtons(str.Substring(10, 5));
|
||||
Pads[2].SetButtons(str.Substring(1, 2));
|
||||
break;
|
||||
case "SMS":
|
||||
case "GG":
|
||||
case "SG":
|
||||
_pads[0].SetButtons(str.Substring(1, 6));
|
||||
_pads[1].SetButtons(str.Substring(8, 6));
|
||||
_pads[2].SetButtons(str.Substring(15, 2));
|
||||
Pads[0].SetButtons(str.Substring(1, 6));
|
||||
Pads[1].SetButtons(str.Substring(8, 6));
|
||||
Pads[2].SetButtons(str.Substring(15, 2));
|
||||
break;
|
||||
case "PCE":
|
||||
case "SGX":
|
||||
_pads[0].SetButtons(str.Substring(3, 8));
|
||||
_pads[1].SetButtons(str.Substring(12, 8));
|
||||
_pads[2].SetButtons(str.Substring(21, 8));
|
||||
_pads[3].SetButtons(str.Substring(30, 8));
|
||||
Pads[0].SetButtons(str.Substring(3, 8));
|
||||
Pads[1].SetButtons(str.Substring(12, 8));
|
||||
Pads[2].SetButtons(str.Substring(21, 8));
|
||||
Pads[3].SetButtons(str.Substring(30, 8));
|
||||
break;
|
||||
case "TI83":
|
||||
_pads[0].SetButtons(str.Substring(2, 50));
|
||||
Pads[0].SetButtons(str.Substring(2, 50));
|
||||
break;
|
||||
case "SNES":
|
||||
_pads[0].SetButtons(str.Substring(3, 12));
|
||||
_pads[1].SetButtons(str.Substring(16, 12));
|
||||
_pads[2].SetButtons(str.Substring(29, 12));
|
||||
_pads[3].SetButtons(str.Substring(42, 12));
|
||||
Pads[0].SetButtons(str.Substring(3, 12));
|
||||
Pads[1].SetButtons(str.Substring(16, 12));
|
||||
Pads[2].SetButtons(str.Substring(29, 12));
|
||||
Pads[3].SetButtons(str.Substring(42, 12));
|
||||
break;
|
||||
case "GEN":
|
||||
_pads[0].SetButtons(str.Substring(3, 8));
|
||||
_pads[1].SetButtons(str.Substring(12, 8));
|
||||
Pads[0].SetButtons(str.Substring(3, 8));
|
||||
Pads[1].SetButtons(str.Substring(12, 8));
|
||||
break;
|
||||
case "GB":
|
||||
_pads[0].SetButtons(str.Substring(3, 8));
|
||||
Pads[0].SetButtons(str.Substring(3, 8));
|
||||
break;
|
||||
case "Coleco":
|
||||
_pads[0].SetButtons(str.Substring(1, 18));
|
||||
_pads[1].SetButtons(str.Substring(20, 18));
|
||||
Pads[0].SetButtons(str.Substring(1, 18));
|
||||
Pads[1].SetButtons(str.Substring(20, 18));
|
||||
break;
|
||||
case "C64":
|
||||
break;
|
||||
case "N64":
|
||||
_pads[0].SetButtons(str.Substring(3, 23));
|
||||
_pads[1].SetButtons(str.Substring(27, 23));
|
||||
_pads[2].SetButtons(str.Substring(51, 23));
|
||||
_pads[3].SetButtons(str.Substring(75, 23));
|
||||
Pads[0].SetButtons(str.Substring(3, 23));
|
||||
Pads[1].SetButtons(str.Substring(27, 23));
|
||||
Pads[2].SetButtons(str.Substring(51, 23));
|
||||
Pads[3].SetButtons(str.Substring(75, 23));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (!Global.Config.VirtualPadSticky)
|
||||
{
|
||||
_pads.ForEach(pad => pad.Clear());
|
||||
Pads.ForEach(pad => pad.Clear());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -155,8 +160,6 @@ namespace BizHawk.Client.EmuHawk
|
|||
Global.Config.VirtualPadSettings.Wndy = Location.Y;
|
||||
Global.Config.VirtualPadSettings.Width = Right - Left;
|
||||
Global.Config.VirtualPadSettings.Height = Bottom - Top;
|
||||
|
||||
_pads.Clear();
|
||||
}
|
||||
|
||||
private void LoadPads()
|
||||
|
@ -164,157 +167,77 @@ namespace BizHawk.Client.EmuHawk
|
|||
switch (Global.Emulator.SystemId)
|
||||
{
|
||||
case "A26":
|
||||
var ataripad1 = new VirtualPadA26 { Location = new Point(8, 19), Controller = "P1" };
|
||||
var ataripad2 = new VirtualPadA26 { Location = new Point(188, 19), Controller = "P2" };
|
||||
_pads.Add(ataripad1);
|
||||
_pads.Add(ataripad2);
|
||||
ControllerBox.Controls.Add(ataripad1);
|
||||
ControllerBox.Controls.Add(ataripad2);
|
||||
var ataricontrols = new VirtualPadA26Control { Location = new Point(8, 109) };
|
||||
_pads.Add(ataricontrols);
|
||||
ControllerBox.Controls.Add(ataricontrols);
|
||||
ControllerBox.Controls.Add(new VirtualPadA26 { Location = new Point(8, 19), Controller = "P1" });
|
||||
ControllerBox.Controls.Add(new VirtualPadA26 { Location = new Point(188, 19), Controller = "P2" });
|
||||
ControllerBox.Controls.Add(new VirtualPadA26Control { Location = new Point(8, 109) });
|
||||
break;
|
||||
case "A78":
|
||||
var atari78pad1 = new VirtualPadA78 { Location = new Point(8, 19), Controller = "P1" };
|
||||
var atari78pad2 = new VirtualPadA78 { Location = new Point(150, 19), Controller = "P2" };
|
||||
_pads.Add(atari78pad1);
|
||||
_pads.Add(atari78pad2);
|
||||
ControllerBox.Controls.Add(atari78pad1);
|
||||
ControllerBox.Controls.Add(atari78pad2);
|
||||
var atari78controls = new VirtualPadA78Control { Location = new Point(8, 125) };
|
||||
_pads.Add(atari78controls);
|
||||
ControllerBox.Controls.Add(atari78controls);
|
||||
ControllerBox.Controls.Add(new VirtualPadA78 { Location = new Point(8, 19), Controller = "P1" });
|
||||
ControllerBox.Controls.Add(new VirtualPadA78 { Location = new Point(150, 19), Controller = "P2" });
|
||||
ControllerBox.Controls.Add(new VirtualPadA78Control { Location = new Point(8, 125) });
|
||||
break;
|
||||
case "NES":
|
||||
var nespad1 = new VirtualPadNES { Location = new Point(8, 19), Controller = "P1" };
|
||||
var nespad2 = new VirtualPadNES { Location = new Point(188, 19), Controller = "P2" };
|
||||
_pads.Add(nespad1);
|
||||
_pads.Add(nespad2);
|
||||
ControllerBox.Controls.Add(nespad1);
|
||||
ControllerBox.Controls.Add(nespad2);
|
||||
var controlpad1 = new VirtualPadNESControl { Location = new Point(8, 109) };
|
||||
_pads.Add(controlpad1);
|
||||
ControllerBox.Controls.Add(controlpad1);
|
||||
ControllerBox.Controls.Add(new VirtualPadNES { Location = new Point(8, 19), Controller = "P1" });
|
||||
ControllerBox.Controls.Add(new VirtualPadNES { Location = new Point(188, 19), Controller = "P2" });
|
||||
ControllerBox.Controls.Add(new VirtualPadNESControl { Location = new Point(8, 109) });
|
||||
break;
|
||||
case "N64":
|
||||
var n64pad1 = new VirtualPadN64 { Location = new Point(8, 19), Controller = "P1" };
|
||||
var n64pad2 = new VirtualPadN64 { Location = new Point(208, 19), Controller = "P2" };
|
||||
var n64pad3 = new VirtualPadN64 { Location = new Point(408, 19), Controller = "P3" };
|
||||
var n64pad4 = new VirtualPadN64 { Location = new Point(608, 19), Controller = "P4" };
|
||||
_pads.Add(n64pad1);
|
||||
_pads.Add(n64pad2);
|
||||
_pads.Add(n64pad3);
|
||||
_pads.Add(n64pad4);
|
||||
ControllerBox.Controls.Add(n64pad1);
|
||||
ControllerBox.Controls.Add(n64pad2);
|
||||
ControllerBox.Controls.Add(n64pad3);
|
||||
ControllerBox.Controls.Add(n64pad4);
|
||||
var n64controlpad1 = new VirtualPadN64Control { Location = new Point(8, 350) };
|
||||
_pads.Add(n64controlpad1);
|
||||
ControllerBox.Controls.Add(n64controlpad1);
|
||||
ControllerBox.Controls.Add(new VirtualPadN64 { Location = new Point(8, 19), Controller = "P1" });
|
||||
ControllerBox.Controls.Add(new VirtualPadN64 { Location = new Point(208, 19), Controller = "P2" });
|
||||
ControllerBox.Controls.Add(new VirtualPadN64 { Location = new Point(408, 19), Controller = "P3" });
|
||||
ControllerBox.Controls.Add(new VirtualPadN64 { Location = new Point(608, 19), Controller = "P4" });
|
||||
ControllerBox.Controls.Add(new VirtualPadN64Control { Location = new Point(8, 350) });
|
||||
break;
|
||||
case "SMS":
|
||||
case "SG":
|
||||
case "GG":
|
||||
var smspad1 = new VirtualPadSMS { Location = new Point(8, 19), Controller = "P1" };
|
||||
var smspad2 = new VirtualPadSMS { Location = new Point(188, 19), Controller = "P2" };
|
||||
_pads.Add(smspad1);
|
||||
_pads.Add(smspad2);
|
||||
ControllerBox.Controls.Add(smspad1);
|
||||
ControllerBox.Controls.Add(smspad2);
|
||||
var controlpad2 = new VirtualPadSMSControl { Location = new Point(8, 109) };
|
||||
_pads.Add(controlpad2);
|
||||
ControllerBox.Controls.Add(controlpad2);
|
||||
ControllerBox.Controls.Add(new VirtualPadSMS { Location = new Point(8, 19), Controller = "P1" });
|
||||
ControllerBox.Controls.Add(new VirtualPadSMS { Location = new Point(188, 19), Controller = "P2" });
|
||||
ControllerBox.Controls.Add(new VirtualPadSMSControl { Location = new Point(8, 109) });
|
||||
break;
|
||||
case "PCE":
|
||||
case "PCECD":
|
||||
case "SGX":
|
||||
var pcepad1 = new VirtualPadPCE { Location = new Point(8, 19), Controller = "P1" };
|
||||
var pcepad2 = new VirtualPadPCE { Location = new Point(188, 19), Controller = "P2" };
|
||||
var pcepad3 = new VirtualPadPCE { Location = new Point(8, 109), Controller = "P3" };
|
||||
var pcepad4 = new VirtualPadPCE { Location = new Point(188, 109), Controller = "P4" };
|
||||
_pads.Add(pcepad1);
|
||||
_pads.Add(pcepad2);
|
||||
_pads.Add(pcepad3);
|
||||
_pads.Add(pcepad4);
|
||||
ControllerBox.Controls.Add(pcepad1);
|
||||
ControllerBox.Controls.Add(pcepad2);
|
||||
ControllerBox.Controls.Add(pcepad3);
|
||||
ControllerBox.Controls.Add(pcepad4);
|
||||
ControllerBox.Controls.Add(new VirtualPadPCE { Location = new Point(8, 19), Controller = "P1" });
|
||||
ControllerBox.Controls.Add(new VirtualPadPCE { Location = new Point(188, 19), Controller = "P2" });
|
||||
ControllerBox.Controls.Add(new VirtualPadPCE { Location = new Point(8, 109), Controller = "P3" });
|
||||
ControllerBox.Controls.Add(new VirtualPadPCE { Location = new Point(188, 109), Controller = "P4" });
|
||||
break;
|
||||
case "SNES":
|
||||
var snespad1 = new VirtualPadSNES { Location = new Point(8, 19), Controller = "P1" };
|
||||
var snespad2 = new VirtualPadSNES { Location = new Point(188, 19), Controller = "P2" };
|
||||
var snespad3 = new VirtualPadSNES { Location = new Point(8, 95), Controller = "P3" };
|
||||
var snespad4 = new VirtualPadSNES { Location = new Point(188, 95), Controller = "P4" };
|
||||
var snescontrolpad = new VirtualPadSNESControl { Location = new Point(8, 170) };
|
||||
_pads.Add(snespad1);
|
||||
_pads.Add(snespad2);
|
||||
_pads.Add(snespad3);
|
||||
_pads.Add(snespad4);
|
||||
_pads.Add(snescontrolpad);
|
||||
ControllerBox.Controls.Add(snespad1);
|
||||
ControllerBox.Controls.Add(snespad2);
|
||||
ControllerBox.Controls.Add(snespad3);
|
||||
ControllerBox.Controls.Add(snespad4);
|
||||
ControllerBox.Controls.Add(snescontrolpad);
|
||||
ControllerBox.Controls.Add(new VirtualPadSNES { Location = new Point(8, 19), Controller = "P1" });
|
||||
ControllerBox.Controls.Add(new VirtualPadSNES { Location = new Point(188, 19), Controller = "P2" });
|
||||
ControllerBox.Controls.Add(new VirtualPadSNES { Location = new Point(8, 95), Controller = "P3" });
|
||||
ControllerBox.Controls.Add(new VirtualPadSNES { Location = new Point(188, 95), Controller = "P4" });
|
||||
ControllerBox.Controls.Add(new VirtualPadSNESControl { Location = new Point(8, 170) });
|
||||
break;
|
||||
case "GB":
|
||||
case "GBC":
|
||||
var gbpad1 = new VirtualPadGB { Location = new Point(8, 19), Controller = string.Empty };
|
||||
_pads.Add(gbpad1);
|
||||
ControllerBox.Controls.Add(gbpad1);
|
||||
var gbcontrolpad = new VirtualPadGBControl { Location = new Point(8, 109) };
|
||||
_pads.Add(gbcontrolpad);
|
||||
ControllerBox.Controls.Add(gbcontrolpad);
|
||||
ControllerBox.Controls.Add(new VirtualPadGB { Location = new Point(8, 19), Controller = string.Empty });
|
||||
ControllerBox.Controls.Add(new VirtualPadGBControl { Location = new Point(8, 109) });
|
||||
break;
|
||||
case "GBA":
|
||||
var gbapad1 = new VirtualPadGBA { Location = new Point(8, 19), Controller = string.Empty };
|
||||
_pads.Add(gbapad1);
|
||||
ControllerBox.Controls.Add(gbapad1);
|
||||
ControllerBox.Controls.Add(new VirtualPadGBA { Location = new Point(8, 19), Controller = string.Empty });
|
||||
break;
|
||||
case "GEN":
|
||||
var genpad1 = new VirtualPadGen6Button { Location = new Point(8, 19), Controller = "P1" };
|
||||
var genpad2 = new VirtualPadGen6Button { Location = new Point(195, 19), Controller = "P2" };
|
||||
_pads.Add(genpad1);
|
||||
_pads.Add(genpad2);
|
||||
ControllerBox.Controls.Add(genpad1);
|
||||
ControllerBox.Controls.Add(genpad2);
|
||||
|
||||
var gencontrol = new VirtualPadNESControl { Location = new Point(8, 105) };
|
||||
_pads.Add(gencontrol);
|
||||
ControllerBox.Controls.Add(gencontrol);
|
||||
|
||||
ControllerBox.Controls.Add(new VirtualPadGen6Button { Location = new Point(8, 19), Controller = "P1" });
|
||||
ControllerBox.Controls.Add(new VirtualPadGen6Button { Location = new Point(195, 19), Controller = "P2" });
|
||||
ControllerBox.Controls.Add(new VirtualPadNESControl { Location = new Point(8, 105) });
|
||||
break;
|
||||
case "Coleco":
|
||||
var coleco1 = new VirtualPadColeco { Location = new Point(8, 19), Controller = "P1" };
|
||||
var coleco2 = new VirtualPadColeco { Location = new Point(130, 19), Controller = "P2" };
|
||||
_pads.Add(coleco1);
|
||||
_pads.Add(coleco2);
|
||||
ControllerBox.Controls.Add(coleco1);
|
||||
ControllerBox.Controls.Add(coleco2);
|
||||
break;
|
||||
case "C64":
|
||||
var c64k = new VirtualPadC64Keyboard { Location = new Point(8, 19) };
|
||||
_pads.Add(c64k);
|
||||
ControllerBox.Controls.Add(c64k);
|
||||
var _ataripad1 = new VirtualPadA26 { Location = new Point(8, 159), Controller = "P1" };
|
||||
var _ataripad2 = new VirtualPadA26 { Location = new Point(218, 159), Controller = "P2" };
|
||||
_pads.Add(_ataripad1);
|
||||
_pads.Add(_ataripad2);
|
||||
ControllerBox.Controls.Add(_ataripad1);
|
||||
ControllerBox.Controls.Add(_ataripad2);
|
||||
ControllerBox.Controls.Add(new VirtualPadC64Keyboard { Location = new Point(8, 19) });
|
||||
ControllerBox.Controls.Add(new VirtualPadA26 { Location = new Point(8, 159), Controller = "P1" });
|
||||
ControllerBox.Controls.Add(new VirtualPadA26 { Location = new Point(218, 159), Controller = "P2" });
|
||||
break;
|
||||
case "SAT":
|
||||
var saturnpad1 = new VirtualPadSaturn { Location = new Point(8, 19), Controller = "P1" };
|
||||
var saturnpad2 = new VirtualPadSaturn { Location = new Point(213, 19), Controller = "P2" };
|
||||
_pads.Add(saturnpad1);
|
||||
_pads.Add(saturnpad2);
|
||||
ControllerBox.Controls.Add(saturnpad1);
|
||||
ControllerBox.Controls.Add(saturnpad2);
|
||||
var saturncontrols = new VirtualPadSaturnControl { Location = new Point(8, 125) };
|
||||
_pads.Add(saturncontrols);
|
||||
ControllerBox.Controls.Add(saturncontrols);
|
||||
ControllerBox.Controls.Add(new VirtualPadSaturn { Location = new Point(8, 19), Controller = "P1" });
|
||||
ControllerBox.Controls.Add(new VirtualPadSaturn { Location = new Point(213, 19), Controller = "P2" });
|
||||
ControllerBox.Controls.Add(new VirtualPadSaturnControl { Location = new Point(8, 125) });
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -329,13 +252,12 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
}
|
||||
|
||||
// TODO: multi-player
|
||||
public void BumpAnalogValue(int? dx, int? dy)
|
||||
public void BumpAnalogValue(int? dx, int? dy) // TODO: multi-player
|
||||
{
|
||||
// TODO: make an analog flag in virtualpads that have it, and check the virtualpads loaded, instead of doing this hardcoded
|
||||
if (_pads[0] is VirtualPadN64)
|
||||
if (Pads[0] is VirtualPadN64)
|
||||
{
|
||||
(_pads[0] as VirtualPadN64).FudgeAnalog(dx, dy);
|
||||
(Pads[0] as VirtualPadN64).FudgeAnalog(dx, dy);
|
||||
|
||||
UpdateValues();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue