Virtual Pad - ability to toggle between single player and multiplayer and remember the setting in the config

This commit is contained in:
adelikat 2014-05-11 23:08:34 +00:00
parent abac70d592
commit 1e48111092
12 changed files with 66 additions and 18 deletions

View File

@ -489,6 +489,7 @@ namespace BizHawk.Client.Common
public bool VirtualPadsUpdatePads = true; public bool VirtualPadsUpdatePads = true;
public bool AutoloadVirtualPad = false; public bool AutoloadVirtualPad = false;
public bool VirtualPadSticky = true; public bool VirtualPadSticky = true;
public bool VirtualPadMultiplayerMode = false;
// NES Game Genie Encoder/Decoder // NES Game Genie Encoder/Decoder
public ToolDialogSettings NesGGSettings = new ToolDialogSettings(); public ToolDialogSettings NesGGSettings = new ToolDialogSettings();

View File

@ -2,6 +2,7 @@
{ {
public interface IVirtualPad public interface IVirtualPad
{ {
string Controller { get; set; }
string GetMnemonic(); string GetMnemonic();
void Clear(); void Clear();
void SetButtons(string buttons); void SetButtons(string buttons);

View File

@ -21,7 +21,7 @@ namespace BizHawk.Client.EmuHawk
public CheckBox B6; public CheckBox B6;
public CheckBox B7; public CheckBox B7;
public CheckBox B8; public CheckBox B8;
public string Controller; public string Controller { get; set; }
public VirtualPad() public VirtualPad()
{ {

View File

@ -8,7 +8,7 @@ namespace BizHawk.Client.EmuHawk
{ {
public partial class VirtualPadA78 : UserControl, IVirtualPad public partial class VirtualPadA78 : UserControl, IVirtualPad
{ {
public string Controller = "P1"; public string Controller { get; set; }
public VirtualPadA78() public VirtualPadA78()
{ {
@ -17,6 +17,8 @@ namespace BizHawk.Client.EmuHawk
SetStyle(ControlStyles.DoubleBuffer, true); SetStyle(ControlStyles.DoubleBuffer, true);
BorderStyle = BorderStyle.Fixed3D; BorderStyle = BorderStyle.Fixed3D;
InitializeComponent(); InitializeComponent();
Controller = "P1";
} }
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) protected override bool ProcessCmdKey(ref Message msg, Keys keyData)

View File

@ -8,6 +8,7 @@ namespace BizHawk.Client.EmuHawk
{ {
public partial class VirtualPadA78Control : UserControl, IVirtualPad public partial class VirtualPadA78Control : UserControl, IVirtualPad
{ {
public string Controller { get; set; }
public VirtualPadA78Control() public VirtualPadA78Control()
{ {
SetStyle(ControlStyles.AllPaintingInWmPaint, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true);
@ -16,6 +17,8 @@ namespace BizHawk.Client.EmuHawk
BorderStyle = BorderStyle.Fixed3D; BorderStyle = BorderStyle.Fixed3D;
Paint += VirtualPad_Paint; Paint += VirtualPad_Paint;
InitializeComponent(); InitializeComponent();
Controller = string.Empty;
} }
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) protected override bool ProcessCmdKey(ref Message msg, Keys keyData)

View File

@ -8,9 +8,11 @@ namespace BizHawk.Client.EmuHawk
{ {
public partial class VirtualPadC64Keyboard : UserControl , IVirtualPad public partial class VirtualPadC64Keyboard : UserControl , IVirtualPad
{ {
public string Controller { get; set; }
public VirtualPadC64Keyboard() public VirtualPadC64Keyboard()
{ {
InitializeComponent(); InitializeComponent();
Controller = string.Empty;
} }
private void Buttons_CheckedChanged(object sender, EventArgs e) private void Buttons_CheckedChanged(object sender, EventArgs e)

View File

@ -8,7 +8,7 @@ namespace BizHawk.Client.EmuHawk
{ {
public partial class VirtualPadColeco : UserControl , IVirtualPad public partial class VirtualPadColeco : UserControl , IVirtualPad
{ {
public string Controller = "P1"; public string Controller { get; set; }
public VirtualPadColeco() public VirtualPadColeco()
{ {
SetStyle(ControlStyles.AllPaintingInWmPaint, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true);
@ -17,6 +17,8 @@ namespace BizHawk.Client.EmuHawk
BorderStyle = BorderStyle.Fixed3D; BorderStyle = BorderStyle.Fixed3D;
Paint += VirtualPad_Paint; Paint += VirtualPad_Paint;
InitializeComponent(); InitializeComponent();
Controller = "P1";
} }
private void VirtualPadColeco_Load(object sender, EventArgs e) private void VirtualPadColeco_Load(object sender, EventArgs e)

View File

@ -36,8 +36,6 @@ namespace BizHawk.Client.EmuHawk
private int _defaultWidth; private int _defaultWidth;
private int _defaultHeight; private int _defaultHeight;
private bool _multiplayerMode;
#region Public API #region Public API
public bool AskSave() { return true; } public bool AskSave() { return true; }
@ -95,6 +93,10 @@ namespace BizHawk.Client.EmuHawk
{ {
LoadConfigSettings(); LoadConfigSettings();
LoadStartingPads(); LoadStartingPads();
if (Global.Config.VirtualPadMultiplayerMode)
{
SwitchToMultiplayer();
}
} }
private void LoadConfigSettings() private void LoadConfigSettings()
@ -196,7 +198,7 @@ namespace BizHawk.Client.EmuHawk
} }
} }
private void LoadExtraPads() private void SwitchToMultiplayer()
{ {
switch (Global.Emulator.SystemId) switch (Global.Emulator.SystemId)
{ {
@ -254,7 +256,7 @@ namespace BizHawk.Client.EmuHawk
break; break;
} }
_multiplayerMode = true; Global.Config.VirtualPadMultiplayerMode = true;
} }
public void BumpAnalogValue(int? dx, int? dy) // TODO: multi-player public void BumpAnalogValue(int? dx, int? dy) // TODO: multi-player
@ -314,6 +316,8 @@ namespace BizHawk.Client.EmuHawk
Global.Config.VirtualPadSettings.SaveWindowPosition = true; Global.Config.VirtualPadSettings.SaveWindowPosition = true;
Global.Config.VirtualPadSettings.TopMost = TopMost = false; Global.Config.VirtualPadSettings.TopMost = TopMost = false;
Global.Config.VirtualPadSettings.FloatingWindow = false; Global.Config.VirtualPadSettings.FloatingWindow = false;
Global.Config.VirtualPadMultiplayerMode = false;
SwitchToSinglePlayer();
} }
private void ExitMenuItem_Click(object sender, EventArgs e) private void ExitMenuItem_Click(object sender, EventArgs e)
@ -347,18 +351,39 @@ namespace BizHawk.Client.EmuHawk
base.OnShown(e); base.OnShown(e);
} }
private void SwitchToSinglePlayer()
{
var toRemove = Pads
.Where(pad => !string.IsNullOrEmpty(pad.Controller) && pad.Controller != "P1")
.ToList();
foreach (var pad in toRemove)
{
ControllerBox.Controls.Remove(pad as Control);
}
Global.Config.VirtualPadMultiplayerMode = false;
}
#endregion #endregion
#endregion #endregion
private void MultiplayerModeMenuItem_Click(object sender, EventArgs e) private void MultiplayerModeMenuItem_Click(object sender, EventArgs e)
{ {
LoadExtraPads(); if (Global.Config.VirtualPadMultiplayerMode)
{
SwitchToSinglePlayer();
}
else
{
SwitchToMultiplayer();
}
} }
private void PadsSubMenu_DropDownOpened(object sender, EventArgs e) private void PadsSubMenu_DropDownOpened(object sender, EventArgs e)
{ {
MultiplayerModeMenuItem.Enabled = !_multiplayerMode; MultiplayerModeMenuItem.Checked = Global.Config.VirtualPadMultiplayerMode;
} }
} }
} }

View File

@ -8,7 +8,7 @@ namespace BizHawk.Client.EmuHawk
{ {
public partial class VirtualPadGen6Button : UserControl, IVirtualPad public partial class VirtualPadGen6Button : UserControl, IVirtualPad
{ {
public string Controller = "P1"; public string Controller { get; set; }
public VirtualPadGen6Button() public VirtualPadGen6Button()
{ {
@ -17,6 +17,8 @@ namespace BizHawk.Client.EmuHawk
SetStyle(ControlStyles.DoubleBuffer, true); SetStyle(ControlStyles.DoubleBuffer, true);
BorderStyle = BorderStyle.Fixed3D; BorderStyle = BorderStyle.Fixed3D;
InitializeComponent(); InitializeComponent();
Controller = "P1";
} }
private void VirtualPadGen6Button_Load(object sender, EventArgs e) private void VirtualPadGen6Button_Load(object sender, EventArgs e)

View File

@ -10,7 +10,7 @@ namespace BizHawk.Client.EmuHawk
{ {
public partial class VirtualPadN64 : UserControl, IVirtualPad public partial class VirtualPadN64 : UserControl, IVirtualPad
{ {
public string Controller = "P1"; public string Controller { get; set; }
private int old_X = 0; private int old_X = 0;
private int old_Y = 0; private int old_Y = 0;
@ -22,15 +22,19 @@ namespace BizHawk.Client.EmuHawk
SetStyle(ControlStyles.DoubleBuffer, true); SetStyle(ControlStyles.DoubleBuffer, true);
BorderStyle = BorderStyle.Fixed3D; BorderStyle = BorderStyle.Fixed3D;
InitializeComponent(); InitializeComponent();
Controller = "P1";
} }
private void UserControl1_Load(object sender, EventArgs e) private void UserControl1_Load(object sender, EventArgs e)
{ {
if (Controller == "P1") // adelikat: What's wrong with having this on players 2 - 4?
{ if (Controller == "P1")
numericUpDown1.Visible = true; {
numericUpDown2.Visible = true; numericUpDown1.Visible = true;
} numericUpDown2.Visible = true;
}
PU.ControllerButton = Controller + " Up"; PU.ControllerButton = Controller + " Up";
PD.ControllerButton = Controller + " Down"; PD.ControllerButton = Controller + " Down";
PL.ControllerButton = Controller + " Left"; PL.ControllerButton = Controller + " Left";

View File

@ -8,7 +8,7 @@ namespace BizHawk.Client.EmuHawk
{ {
public partial class VirtualPadSaturn : UserControl, IVirtualPad public partial class VirtualPadSaturn : UserControl, IVirtualPad
{ {
public string Controller = "P1"; public string Controller { get; set; }
public VirtualPadSaturn() public VirtualPadSaturn()
{ {
@ -18,6 +18,8 @@ namespace BizHawk.Client.EmuHawk
BorderStyle = BorderStyle.Fixed3D; BorderStyle = BorderStyle.Fixed3D;
Paint += VirtualPad_Paint; Paint += VirtualPad_Paint;
InitializeComponent(); InitializeComponent();
Controller = "P1";
} }
private void VirtualPadSaturn_Load(object sender, EventArgs e) private void VirtualPadSaturn_Load(object sender, EventArgs e)

View File

@ -8,6 +8,8 @@ namespace BizHawk.Client.EmuHawk
{ {
public partial class VirtualPadSaturnControl : UserControl, IVirtualPad public partial class VirtualPadSaturnControl : UserControl, IVirtualPad
{ {
public string Controller { get; set; }
public VirtualPadSaturnControl() public VirtualPadSaturnControl()
{ {
SetStyle(ControlStyles.AllPaintingInWmPaint, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true);
@ -16,6 +18,8 @@ namespace BizHawk.Client.EmuHawk
BorderStyle = BorderStyle.Fixed3D; BorderStyle = BorderStyle.Fixed3D;
Paint += VirtualPad_Paint; Paint += VirtualPad_Paint;
InitializeComponent(); InitializeComponent();
Controller = string.Empty;
} }
private void VirtualPadSaturnControl_Load(object sender, EventArgs e) private void VirtualPadSaturnControl_Load(object sender, EventArgs e)