From 5406da7406f5cc63a39f13318994e4368203db63 Mon Sep 17 00:00:00 2001 From: adelikat Date: Sun, 11 Jun 2017 09:35:03 -0500 Subject: [PATCH] Saturn - start virtualpad support - multitap logic in place, only standard controllers currently --- .../tools/VirtualPads/schema/SatSchema.cs | 50 +++++++++++++++++-- 1 file changed, 47 insertions(+), 3 deletions(-) diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/SatSchema.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/SatSchema.cs index 6263d5bb53..d6423cec5c 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/SatSchema.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/SatSchema.cs @@ -1,7 +1,9 @@ using System.Collections.Generic; using System.Drawing; +using System.Linq; using BizHawk.Emulation.Common; +using BizHawk.Emulation.Cores.Consoles.Sega.Saturn; namespace BizHawk.Client.EmuHawk { @@ -10,9 +12,51 @@ namespace BizHawk.Client.EmuHawk { public IEnumerable GetPadSchemas(IEmulator core) { - yield return StandardController(1); - yield return StandardController(2); - yield return ConsoleButtons(); + var ss = ((Saturnus)core).GetSyncSettings(); + + int totalPorts = (ss.Port1Multitap ? 6 : 1) + (ss.Port2Multitap ? 6 : 1); + + var padSchemas = new SaturnusControllerDeck.Device[] + { + ss.Port1, + ss.Port2, + ss.Port3, + ss.Port4, + ss.Port5, + ss.Port6, + ss.Port7, + ss.Port8, + ss.Port9, + ss.Port10, + ss.Port11, + ss.Port12 + }.Take(totalPorts) + .Where(p => p != SaturnusControllerDeck.Device.None) + .Select((p, i) => GenerateSchemaForPort(p, i + 1)) + .Where(s => s != null) + .Concat(new[] { ConsoleButtons() }); + + return padSchemas; + } + + private static PadSchema GenerateSchemaForPort(SaturnusControllerDeck.Device device, int controllerNum) + { + switch (device) + { + default: + case SaturnusControllerDeck.Device.None: + return null; + case SaturnusControllerDeck.Device.Gamepad: + return StandardController(controllerNum); + case SaturnusControllerDeck.Device.ThreeDeePad: + case SaturnusControllerDeck.Device.Mission: + case SaturnusControllerDeck.Device.DualMission: + case SaturnusControllerDeck.Device.Wheel: + case SaturnusControllerDeck.Device.Keyboard: + case SaturnusControllerDeck.Device.Mouse: + System.Windows.Forms.MessageBox.Show("This peripheral is not supported yet"); + return null; + } } private static PadSchema StandardController(int controller)