From 1e481110929b4122a68ddc54b73e60c6f55962fc Mon Sep 17 00:00:00 2001 From: adelikat Date: Sun, 11 May 2014 23:08:34 +0000 Subject: [PATCH] Virtual Pad - ability to toggle between single player and multiplayer and remember the setting in the config --- BizHawk.Client.Common/config/Config.cs | 1 + .../tools/VirtualPads/IVirtualPad.cs | 1 + .../tools/VirtualPads/VirtualPad.cs | 2 +- .../tools/VirtualPads/VirtualPadA78.cs | 4 +- .../tools/VirtualPads/VirtualPadA78Control.cs | 3 ++ .../VirtualPads/VirtualPadC64Keyboard.cs | 2 + .../tools/VirtualPads/VirtualPadColeco.cs | 4 +- .../tools/VirtualPads/VirtualPadForm.cs | 37 ++++++++++++++++--- .../tools/VirtualPads/VirtualPadGen6Button.cs | 4 +- .../tools/VirtualPads/VirtualPadN64.cs | 18 +++++---- .../tools/VirtualPads/VirtualPadSaturn.cs | 4 +- .../VirtualPads/VirtualPadSaturnControl.cs | 4 ++ 12 files changed, 66 insertions(+), 18 deletions(-) diff --git a/BizHawk.Client.Common/config/Config.cs b/BizHawk.Client.Common/config/Config.cs index 7d28cfc502..577d7dcd89 100644 --- a/BizHawk.Client.Common/config/Config.cs +++ b/BizHawk.Client.Common/config/Config.cs @@ -489,6 +489,7 @@ namespace BizHawk.Client.Common public bool VirtualPadsUpdatePads = true; public bool AutoloadVirtualPad = false; public bool VirtualPadSticky = true; + public bool VirtualPadMultiplayerMode = false; // NES Game Genie Encoder/Decoder public ToolDialogSettings NesGGSettings = new ToolDialogSettings(); diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/IVirtualPad.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/IVirtualPad.cs index fd82a148d8..58974dd226 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/IVirtualPad.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/IVirtualPad.cs @@ -2,6 +2,7 @@ { public interface IVirtualPad { + string Controller { get; set; } string GetMnemonic(); void Clear(); void SetButtons(string buttons); diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPad.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPad.cs index 840ff5cc5a..3261587c1f 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPad.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPad.cs @@ -21,7 +21,7 @@ namespace BizHawk.Client.EmuHawk public CheckBox B6; public CheckBox B7; public CheckBox B8; - public string Controller; + public string Controller { get; set; } public VirtualPad() { diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadA78.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadA78.cs index 984edbaae4..bd0c242dfc 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadA78.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadA78.cs @@ -8,7 +8,7 @@ namespace BizHawk.Client.EmuHawk { public partial class VirtualPadA78 : UserControl, IVirtualPad { - public string Controller = "P1"; + public string Controller { get; set; } public VirtualPadA78() { @@ -17,6 +17,8 @@ namespace BizHawk.Client.EmuHawk SetStyle(ControlStyles.DoubleBuffer, true); BorderStyle = BorderStyle.Fixed3D; InitializeComponent(); + + Controller = "P1"; } protected override bool ProcessCmdKey(ref Message msg, Keys keyData) diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadA78Control.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadA78Control.cs index 47452f2990..2866e9512e 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadA78Control.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadA78Control.cs @@ -8,6 +8,7 @@ namespace BizHawk.Client.EmuHawk { public partial class VirtualPadA78Control : UserControl, IVirtualPad { + public string Controller { get; set; } public VirtualPadA78Control() { SetStyle(ControlStyles.AllPaintingInWmPaint, true); @@ -16,6 +17,8 @@ namespace BizHawk.Client.EmuHawk BorderStyle = BorderStyle.Fixed3D; Paint += VirtualPad_Paint; InitializeComponent(); + + Controller = string.Empty; } protected override bool ProcessCmdKey(ref Message msg, Keys keyData) diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadC64Keyboard.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadC64Keyboard.cs index 9012e7e4bf..6996050c06 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadC64Keyboard.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadC64Keyboard.cs @@ -8,9 +8,11 @@ namespace BizHawk.Client.EmuHawk { public partial class VirtualPadC64Keyboard : UserControl , IVirtualPad { + public string Controller { get; set; } public VirtualPadC64Keyboard() { InitializeComponent(); + Controller = string.Empty; } private void Buttons_CheckedChanged(object sender, EventArgs e) diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadColeco.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadColeco.cs index a9583fa985..8bb6f920c1 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadColeco.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadColeco.cs @@ -8,7 +8,7 @@ namespace BizHawk.Client.EmuHawk { public partial class VirtualPadColeco : UserControl , IVirtualPad { - public string Controller = "P1"; + public string Controller { get; set; } public VirtualPadColeco() { SetStyle(ControlStyles.AllPaintingInWmPaint, true); @@ -17,6 +17,8 @@ namespace BizHawk.Client.EmuHawk BorderStyle = BorderStyle.Fixed3D; Paint += VirtualPad_Paint; InitializeComponent(); + + Controller = "P1"; } private void VirtualPadColeco_Load(object sender, EventArgs e) diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadForm.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadForm.cs index 8653d6bac6..3b714d13a4 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadForm.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadForm.cs @@ -36,8 +36,6 @@ namespace BizHawk.Client.EmuHawk private int _defaultWidth; private int _defaultHeight; - private bool _multiplayerMode; - #region Public API public bool AskSave() { return true; } @@ -95,6 +93,10 @@ namespace BizHawk.Client.EmuHawk { LoadConfigSettings(); LoadStartingPads(); + if (Global.Config.VirtualPadMultiplayerMode) + { + SwitchToMultiplayer(); + } } private void LoadConfigSettings() @@ -196,7 +198,7 @@ namespace BizHawk.Client.EmuHawk } } - private void LoadExtraPads() + private void SwitchToMultiplayer() { switch (Global.Emulator.SystemId) { @@ -254,7 +256,7 @@ namespace BizHawk.Client.EmuHawk break; } - _multiplayerMode = true; + Global.Config.VirtualPadMultiplayerMode = true; } 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.TopMost = TopMost = false; Global.Config.VirtualPadSettings.FloatingWindow = false; + Global.Config.VirtualPadMultiplayerMode = false; + SwitchToSinglePlayer(); } private void ExitMenuItem_Click(object sender, EventArgs e) @@ -347,18 +351,39 @@ namespace BizHawk.Client.EmuHawk 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 private void MultiplayerModeMenuItem_Click(object sender, EventArgs e) { - LoadExtraPads(); + if (Global.Config.VirtualPadMultiplayerMode) + { + SwitchToSinglePlayer(); + } + else + { + SwitchToMultiplayer(); + } } private void PadsSubMenu_DropDownOpened(object sender, EventArgs e) { - MultiplayerModeMenuItem.Enabled = !_multiplayerMode; + MultiplayerModeMenuItem.Checked = Global.Config.VirtualPadMultiplayerMode; } } } diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadGen6Button.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadGen6Button.cs index b9854d792c..e7f0d7acdd 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadGen6Button.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadGen6Button.cs @@ -8,7 +8,7 @@ namespace BizHawk.Client.EmuHawk { public partial class VirtualPadGen6Button : UserControl, IVirtualPad { - public string Controller = "P1"; + public string Controller { get; set; } public VirtualPadGen6Button() { @@ -17,6 +17,8 @@ namespace BizHawk.Client.EmuHawk SetStyle(ControlStyles.DoubleBuffer, true); BorderStyle = BorderStyle.Fixed3D; InitializeComponent(); + + Controller = "P1"; } private void VirtualPadGen6Button_Load(object sender, EventArgs e) diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadN64.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadN64.cs index 0aecfba8ef..4872ece6dd 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadN64.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadN64.cs @@ -10,7 +10,7 @@ namespace BizHawk.Client.EmuHawk { public partial class VirtualPadN64 : UserControl, IVirtualPad { - public string Controller = "P1"; + public string Controller { get; set; } private int old_X = 0; private int old_Y = 0; @@ -22,15 +22,19 @@ namespace BizHawk.Client.EmuHawk SetStyle(ControlStyles.DoubleBuffer, true); BorderStyle = BorderStyle.Fixed3D; InitializeComponent(); + + Controller = "P1"; } private void UserControl1_Load(object sender, EventArgs e) - { - if (Controller == "P1") - { - numericUpDown1.Visible = true; - numericUpDown2.Visible = true; - } + { + // adelikat: What's wrong with having this on players 2 - 4? + if (Controller == "P1") + { + numericUpDown1.Visible = true; + numericUpDown2.Visible = true; + } + PU.ControllerButton = Controller + " Up"; PD.ControllerButton = Controller + " Down"; PL.ControllerButton = Controller + " Left"; diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadSaturn.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadSaturn.cs index a1a348ac69..2b3d4f85f1 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadSaturn.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadSaturn.cs @@ -8,7 +8,7 @@ namespace BizHawk.Client.EmuHawk { public partial class VirtualPadSaturn : UserControl, IVirtualPad { - public string Controller = "P1"; + public string Controller { get; set; } public VirtualPadSaturn() { @@ -18,6 +18,8 @@ namespace BizHawk.Client.EmuHawk BorderStyle = BorderStyle.Fixed3D; Paint += VirtualPad_Paint; InitializeComponent(); + + Controller = "P1"; } private void VirtualPadSaturn_Load(object sender, EventArgs e) diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadSaturnControl.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadSaturnControl.cs index d3d708ef6d..b5577bebe0 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadSaturnControl.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPadSaturnControl.cs @@ -8,6 +8,8 @@ namespace BizHawk.Client.EmuHawk { public partial class VirtualPadSaturnControl : UserControl, IVirtualPad { + public string Controller { get; set; } + public VirtualPadSaturnControl() { SetStyle(ControlStyles.AllPaintingInWmPaint, true); @@ -16,6 +18,8 @@ namespace BizHawk.Client.EmuHawk BorderStyle = BorderStyle.Fixed3D; Paint += VirtualPad_Paint; InitializeComponent(); + + Controller = string.Empty; } private void VirtualPadSaturnControl_Load(object sender, EventArgs e)