2012-10-29 22:57:15 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
using System.Data;
|
|
|
|
|
using System.Drawing;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
|
|
|
|
|
namespace BizHawk.MultiClient
|
|
|
|
|
{
|
|
|
|
|
public partial class VirtualPadForm : Form
|
|
|
|
|
{
|
|
|
|
|
//TODO: clicky vs sticky
|
|
|
|
|
//Remember window size
|
|
|
|
|
//Restore defaults
|
|
|
|
|
|
2012-11-18 05:19:05 +00:00
|
|
|
|
List<IVirtualPad> Pads = new List<IVirtualPad>();
|
2012-10-29 22:57:15 +00:00
|
|
|
|
|
|
|
|
|
public VirtualPadForm()
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
Closing += (o, e) => SaveConfigSettings();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void VirtualPadForm_Load(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
StickyBox.Checked = Global.Config.VirtualPadSticky;
|
|
|
|
|
|
|
|
|
|
if (Global.Config.VirtualPadSaveWindowPosition && Global.Config.VPadWndx >= 0 && Global.Config.VPadWndy >= 0)
|
|
|
|
|
{
|
|
|
|
|
this.Location = new Point(Global.Config.VPadWndx, Global.Config.VPadWndy);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LoadPads();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void SaveConfigSettings()
|
|
|
|
|
{
|
|
|
|
|
Global.Config.VPadWndx = this.Location.X;
|
|
|
|
|
Global.Config.VPadWndy = this.Location.Y;
|
|
|
|
|
Pads.Clear();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void LoadPads()
|
|
|
|
|
{
|
|
|
|
|
switch (Global.Emulator.SystemId)
|
|
|
|
|
{
|
|
|
|
|
case "NULL":
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
case "A26":
|
|
|
|
|
VirtualPadA26 ataripad1 = new VirtualPadA26();
|
|
|
|
|
ataripad1.Location = new Point(8, 19);
|
|
|
|
|
ataripad1.Controller = "P1";
|
|
|
|
|
VirtualPadA26 ataripad2 = new VirtualPadA26();
|
|
|
|
|
ataripad2.Location = new Point(188, 19);
|
|
|
|
|
ataripad2.Controller = "P2";
|
|
|
|
|
Pads.Add(ataripad1);
|
|
|
|
|
Pads.Add(ataripad2);
|
2012-11-18 05:19:05 +00:00
|
|
|
|
ControllerBox.Controls.Add(ataripad1);
|
|
|
|
|
ControllerBox.Controls.Add(ataripad2);
|
2012-10-29 22:57:15 +00:00
|
|
|
|
VirtualPadA26Control ataricontrols = new VirtualPadA26Control();
|
|
|
|
|
ataricontrols.Location = new Point(8, 109);
|
|
|
|
|
Pads.Add(ataricontrols);
|
2012-11-18 05:19:05 +00:00
|
|
|
|
ControllerBox.Controls.Add(Pads[2] as Control);
|
2012-10-29 22:57:15 +00:00
|
|
|
|
break;
|
|
|
|
|
case "NES":
|
|
|
|
|
VirtualPadNES nespad1 = new VirtualPadNES();
|
|
|
|
|
nespad1.Location = new Point(8, 19);
|
|
|
|
|
nespad1.Controller = "P1";
|
|
|
|
|
VirtualPadNES nespad2 = new VirtualPadNES();
|
|
|
|
|
nespad2.Location = new Point(188, 19);
|
|
|
|
|
nespad2.Controller = "P2";
|
|
|
|
|
Pads.Add(nespad1);
|
|
|
|
|
Pads.Add(nespad2);
|
2012-11-18 05:19:05 +00:00
|
|
|
|
ControllerBox.Controls.Add(nespad1);
|
|
|
|
|
ControllerBox.Controls.Add(nespad2);
|
2012-10-29 22:57:15 +00:00
|
|
|
|
VirtualPadNESControl controlpad1 = new VirtualPadNESControl();
|
|
|
|
|
controlpad1.Location = new Point(8, 109);
|
|
|
|
|
Pads.Add(controlpad1);
|
2012-11-18 05:19:05 +00:00
|
|
|
|
ControllerBox.Controls.Add(controlpad1);
|
2012-10-29 22:57:15 +00:00
|
|
|
|
break;
|
|
|
|
|
case "SMS":
|
|
|
|
|
case "SG":
|
|
|
|
|
case "GG":
|
|
|
|
|
VirtualPadSMS smspad1 = new VirtualPadSMS();
|
|
|
|
|
smspad1.Location = new Point(8, 19);
|
|
|
|
|
smspad1.Controller = "P1";
|
|
|
|
|
VirtualPadSMS smspad2 = new VirtualPadSMS();
|
|
|
|
|
smspad2.Location = new Point(188, 19);
|
|
|
|
|
smspad2.Controller = "P2";
|
|
|
|
|
Pads.Add(smspad1);
|
|
|
|
|
Pads.Add(smspad2);
|
2012-11-18 05:19:05 +00:00
|
|
|
|
ControllerBox.Controls.Add(smspad1);
|
|
|
|
|
ControllerBox.Controls.Add(smspad2);
|
2012-10-29 22:57:15 +00:00
|
|
|
|
VirtualPadSMSControl controlpad2 = new VirtualPadSMSControl();
|
|
|
|
|
controlpad2.Location = new Point(8, 109);
|
|
|
|
|
Pads.Add(controlpad2);
|
2012-11-18 05:19:05 +00:00
|
|
|
|
ControllerBox.Controls.Add(Pads[2] as Control);
|
2012-10-29 22:57:15 +00:00
|
|
|
|
break;
|
|
|
|
|
case "PCE":
|
2012-11-26 02:22:15 +00:00
|
|
|
|
case "PCECD":
|
|
|
|
|
case "SGX":
|
2012-10-29 22:57:15 +00:00
|
|
|
|
VirtualPadPCE pcepad1 = new VirtualPadPCE();
|
|
|
|
|
pcepad1.Location = new Point(8, 19);
|
|
|
|
|
pcepad1.Controller = "P1";
|
|
|
|
|
VirtualPadPCE pcepad2 = new VirtualPadPCE();
|
|
|
|
|
pcepad2.Location = new Point(188, 19);
|
|
|
|
|
pcepad2.Controller = "P2";
|
|
|
|
|
VirtualPadPCE pcepad3 = new VirtualPadPCE();
|
|
|
|
|
pcepad3.Location = new Point(8, 109);
|
|
|
|
|
pcepad3.Controller = "P3";
|
|
|
|
|
VirtualPadPCE pcepad4 = new VirtualPadPCE();
|
|
|
|
|
pcepad4.Location = new Point(188, 109);
|
|
|
|
|
pcepad4.Controller = "P4";
|
|
|
|
|
Pads.Add(pcepad1);
|
|
|
|
|
Pads.Add(pcepad2);
|
|
|
|
|
Pads.Add(pcepad3);
|
|
|
|
|
Pads.Add(pcepad4);
|
2012-11-18 05:19:05 +00:00
|
|
|
|
ControllerBox.Controls.Add(pcepad1);
|
|
|
|
|
ControllerBox.Controls.Add(pcepad2);
|
|
|
|
|
ControllerBox.Controls.Add(pcepad3);
|
|
|
|
|
ControllerBox.Controls.Add(pcepad4);
|
2012-10-29 22:57:15 +00:00
|
|
|
|
break;
|
|
|
|
|
case "SNES":
|
|
|
|
|
VirtualPadSNES snespad1 = new VirtualPadSNES();
|
|
|
|
|
snespad1.Location = new Point(8, 19);
|
|
|
|
|
snespad1.Controller = "P1";
|
|
|
|
|
VirtualPadSNES snespad2 = new VirtualPadSNES();
|
|
|
|
|
snespad2.Location = new Point(188, 19);
|
|
|
|
|
snespad2.Controller = "P2";
|
|
|
|
|
VirtualPadSNES snespad3 = new VirtualPadSNES();
|
|
|
|
|
snespad3.Location = new Point(8, 95);
|
|
|
|
|
snespad3.Controller = "P3";
|
|
|
|
|
VirtualPadSNES snespad4 = new VirtualPadSNES();
|
|
|
|
|
snespad4.Location = new Point(188, 95);
|
|
|
|
|
snespad4.Controller = "P4";
|
|
|
|
|
VirtualPadSNESControl snescontrolpad = new VirtualPadSNESControl();
|
|
|
|
|
snescontrolpad.Location = new Point(8, 170);
|
|
|
|
|
Pads.Add(snespad1);
|
|
|
|
|
Pads.Add(snespad2);
|
|
|
|
|
Pads.Add(snespad3);
|
|
|
|
|
Pads.Add(snespad4);
|
|
|
|
|
Pads.Add(snescontrolpad);
|
2012-11-18 05:19:05 +00:00
|
|
|
|
ControllerBox.Controls.Add(snespad1);
|
|
|
|
|
ControllerBox.Controls.Add(snespad2);
|
|
|
|
|
ControllerBox.Controls.Add(snespad3);
|
|
|
|
|
ControllerBox.Controls.Add(snespad4);
|
|
|
|
|
ControllerBox.Controls.Add(snescontrolpad);
|
2012-10-29 22:57:15 +00:00
|
|
|
|
break;
|
|
|
|
|
case "GB":
|
|
|
|
|
case "GBC":
|
|
|
|
|
VirtualPadGB gbpad1 = new VirtualPadGB();
|
|
|
|
|
gbpad1.Location = new Point(8, 19);
|
|
|
|
|
gbpad1.Controller = "";
|
|
|
|
|
Pads.Add(gbpad1);
|
2012-11-18 05:19:05 +00:00
|
|
|
|
ControllerBox.Controls.Add(gbpad1);
|
2012-10-29 22:57:15 +00:00
|
|
|
|
VirtualPadGBControl gbcontrolpad = new VirtualPadGBControl();
|
|
|
|
|
gbcontrolpad.Location = new Point(8, 109);
|
|
|
|
|
Pads.Add(gbcontrolpad);
|
2012-11-18 05:19:05 +00:00
|
|
|
|
ControllerBox.Controls.Add(gbcontrolpad);
|
2012-10-29 22:57:15 +00:00
|
|
|
|
break;
|
2012-11-23 14:33:50 +00:00
|
|
|
|
case "GBA":
|
|
|
|
|
VirtualPadGBA gbapad1 = new VirtualPadGBA();
|
|
|
|
|
gbapad1.Location = new Point(8, 19);
|
|
|
|
|
gbapad1.Controller = "";
|
|
|
|
|
Pads.Add(gbapad1);
|
|
|
|
|
ControllerBox.Controls.Add(gbapad1);
|
|
|
|
|
break;
|
2012-10-29 22:57:15 +00:00
|
|
|
|
case "GEN":
|
|
|
|
|
VirtualPadGen3Button genpad1 = new VirtualPadGen3Button();
|
|
|
|
|
genpad1.Location = new Point(8, 19);
|
|
|
|
|
genpad1.Controller = "P1";
|
|
|
|
|
Pads.Add(genpad1);
|
2012-11-18 05:19:05 +00:00
|
|
|
|
ControllerBox.Controls.Add(genpad1);
|
|
|
|
|
break;
|
|
|
|
|
case "Coleco":
|
|
|
|
|
VirtualPadColeco coleco1 = new VirtualPadColeco();
|
|
|
|
|
coleco1.Location = new Point(8, 19);
|
|
|
|
|
coleco1.Controller = "P1";
|
|
|
|
|
VirtualPadColeco coleco2 = new VirtualPadColeco();
|
|
|
|
|
coleco2.Location = new Point(130, 19);
|
|
|
|
|
coleco2.Controller = "P2";
|
|
|
|
|
Pads.Add(coleco1);
|
|
|
|
|
Pads.Add(coleco2);
|
|
|
|
|
ControllerBox.Controls.Add(coleco1);
|
|
|
|
|
ControllerBox.Controls.Add(coleco2);
|
2012-10-29 22:57:15 +00:00
|
|
|
|
break;
|
2012-11-18 15:03:23 +00:00
|
|
|
|
case "C64":
|
|
|
|
|
VirtualPadC64Keyboard c64k = new VirtualPadC64Keyboard();
|
|
|
|
|
c64k.Location = new Point(8, 19);
|
|
|
|
|
Pads.Add(c64k);
|
|
|
|
|
ControllerBox.Controls.Add(c64k);
|
2012-11-18 22:34:38 +00:00
|
|
|
|
|
|
|
|
|
VirtualPadA26 _ataripad1 = new VirtualPadA26();
|
|
|
|
|
_ataripad1.Location = new Point(8, 159);
|
|
|
|
|
_ataripad1.Controller = "P1";
|
|
|
|
|
VirtualPadA26 _ataripad2 = new VirtualPadA26();
|
2012-11-26 00:54:31 +00:00
|
|
|
|
_ataripad2.Location = new Point(218, 159);
|
2012-11-18 22:34:38 +00:00
|
|
|
|
_ataripad2.Controller = "P2";
|
|
|
|
|
Pads.Add(_ataripad1);
|
|
|
|
|
Pads.Add(_ataripad2);
|
|
|
|
|
ControllerBox.Controls.Add(_ataripad1);
|
|
|
|
|
ControllerBox.Controls.Add(_ataripad2);
|
2012-11-18 15:03:23 +00:00
|
|
|
|
break;
|
2012-10-29 22:57:15 +00:00
|
|
|
|
}
|
2012-11-26 00:54:31 +00:00
|
|
|
|
|
|
|
|
|
//Hack for now
|
|
|
|
|
if (Global.Emulator.SystemId == "C64")
|
|
|
|
|
{
|
|
|
|
|
if (this.Width < 505)
|
|
|
|
|
{
|
|
|
|
|
this.Width = 505;
|
|
|
|
|
ControllerBox.Width = this.Width - 37;
|
|
|
|
|
}
|
|
|
|
|
}
|
2012-10-29 22:57:15 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
this.Close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void ClearVirtualPadHolds()
|
|
|
|
|
{
|
|
|
|
|
foreach (var controller in ControllerBox.Controls)
|
|
|
|
|
{
|
2012-11-18 05:31:31 +00:00
|
|
|
|
if (controller is IVirtualPad)
|
|
|
|
|
((IVirtualPad)controller).Clear();
|
2012-10-29 22:57:15 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Restart()
|
|
|
|
|
{
|
|
|
|
|
if (!this.IsHandleCreated || this.IsDisposed) return;
|
|
|
|
|
ControllerBox.Controls.Clear();
|
|
|
|
|
Pads.Clear();
|
|
|
|
|
LoadPads();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void UpdateValues()
|
|
|
|
|
{
|
2012-11-01 01:18:12 +00:00
|
|
|
|
if (!this.IsHandleCreated || this.IsDisposed) return;
|
|
|
|
|
|
2012-10-29 22:57:15 +00:00
|
|
|
|
if (Global.MovieSession.Movie.IsPlaying && !Global.MovieSession.Movie.IsFinished)
|
|
|
|
|
{
|
|
|
|
|
string str = Global.MovieSession.Movie.GetInput(Global.Emulator.Frame);
|
|
|
|
|
if (Global.Config.TASUpdatePads == true && str != "")
|
|
|
|
|
{
|
|
|
|
|
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());
|
|
|
|
|
break;
|
|
|
|
|
case "A26":
|
|
|
|
|
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));
|
|
|
|
|
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));
|
|
|
|
|
break;
|
|
|
|
|
case "TI83":
|
|
|
|
|
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));
|
|
|
|
|
break;
|
|
|
|
|
case "GEN":
|
|
|
|
|
Pads[0].SetButtons(str.Substring(3, 8));
|
|
|
|
|
Pads[1].SetButtons(str.Substring(12, 8));
|
|
|
|
|
break;
|
|
|
|
|
case "GB":
|
|
|
|
|
Pads[0].SetButtons(str.Substring(3, 8));
|
|
|
|
|
break;
|
2012-11-18 15:03:23 +00:00
|
|
|
|
case "Coleco":
|
|
|
|
|
Pads[0].SetButtons(str.Substring(1, 18));
|
|
|
|
|
Pads[1].SetButtons(str.Substring(20, 18));
|
|
|
|
|
break;
|
|
|
|
|
case "C64":
|
|
|
|
|
break;
|
2012-10-29 22:57:15 +00:00
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2012-12-02 20:44:44 +00:00
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (!Global.Config.VirtualPadSticky)
|
|
|
|
|
{
|
|
|
|
|
foreach (IVirtualPad v in Pads)
|
|
|
|
|
{
|
|
|
|
|
v.Clear();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2012-10-29 22:57:15 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void StickyBox_CheckedChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Global.Config.VirtualPadSticky = StickyBox.Checked;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void optionsToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
saveWindowPositionToolStripMenuItem.Checked = Global.Config.VirtualPadSaveWindowPosition;
|
|
|
|
|
autolaodToolStripMenuItem.Checked = Global.Config.AutoloadVirtualPad;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void autolaodToolStripMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Global.Config.AutoloadVirtualPad ^= true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void saveWindowPositionToolStripMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Global.Config.VirtualPadSaveWindowPosition ^= true;
|
|
|
|
|
}
|
2012-10-29 23:18:20 +00:00
|
|
|
|
|
|
|
|
|
private void clearToolStripMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
ClearVirtualPadHolds();
|
|
|
|
|
}
|
2012-10-29 22:57:15 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2012-11-18 05:19:05 +00:00
|
|
|
|
|