Get saturn virtualpad closer to reworking again

This is a mess and we need a new notion of controller definition
This commit is contained in:
nattthebear 2020-06-14 11:33:51 -04:00
parent 7ba3f6db03
commit aa3369a080
1 changed files with 41 additions and 45 deletions

View File

@ -1,6 +1,11 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using BizHawk.Emulation.Common; using BizHawk.Emulation.Common;
using BizHawk.Emulation.Cores.Consoles.Sega.Saturn;
using static BizHawk.Emulation.Common.ControllerDefinition;
namespace BizHawk.Client.EmuHawk namespace BizHawk.Client.EmuHawk
{ {
@ -8,59 +13,51 @@ namespace BizHawk.Client.EmuHawk
// ReSharper disable once UnusedMember.Global // ReSharper disable once UnusedMember.Global
public class SaturnSchema : IVirtualPadSchema public class SaturnSchema : IVirtualPadSchema
{ {
public IEnumerable<PadSchema> GetPadSchemas(IEmulator core) => throw new NotImplementedException(); private static V GetOrDefault<K, V>(IDictionary<K, V> dict, K key)
/* {
dict.TryGetValue(key, out var ret);
return ret;
}
public IEnumerable<PadSchema> GetPadSchemas(IEmulator core) public IEnumerable<PadSchema> GetPadSchemas(IEmulator core)
{ {
var ss = ((Saturnus)core).GetSyncSettings(); var ss = ((Saturnus)core).GetSyncSettings();
var multi1 = GetOrDefault(ss.MednafenValues, "ss.input.sport1.multitap") != "1";
var multi2 = GetOrDefault(ss.MednafenValues, "ss.input.sport2.multitap") != "1";
int totalPorts = (ss.Port1Multitap ? 6 : 1) + (ss.Port2Multitap ? 6 : 1); int totalPorts = 1 + (multi1 ? 6 : 1) + (multi2 ? 6 : 1);
var padSchemas = new[] var padSchemas = Enumerable.Range(0, 12)
{ .Take(totalPorts)
ss.Port1, .Concat(new[] { 12 })
ss.Port2, .Select(p => new { index = p, device = GetOrDefault(ss.PortDevices, p) })
ss.Port3, .Where(a => a.device != null && a.device != "none")
ss.Port4, .Select(a => GenerateSchemaForPort(a.device, a.index + 1))
ss.Port5, .Concat(new[] { ConsoleButtons() })
ss.Port6, .ToList();
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; return padSchemas;
} }
private static PadSchema GenerateSchemaForPort(SaturnusControllerDeck.Device device, int controllerNum) private static PadSchema GenerateSchemaForPort(string device, int controllerNum)
{ {
switch (device) switch (device)
{ {
default: default:
case SaturnusControllerDeck.Device.None: MessageBox.Show($"This peripheral `{device}` is not supported yet");
return null; return null;
case SaturnusControllerDeck.Device.Gamepad:
case "gamepad":
return StandardController(controllerNum); return StandardController(controllerNum);
case SaturnusControllerDeck.Device.ThreeDeePad: case "3dpad":
return ThreeDeeController(controllerNum); return ThreeDeeController(controllerNum);
case SaturnusControllerDeck.Device.Mouse: case "mouse":
return Mouse(controllerNum); return Mouse(controllerNum);
case SaturnusControllerDeck.Device.Wheel: case "wheel":
return Wheel(controllerNum); return Wheel(controllerNum);
case SaturnusControllerDeck.Device.Mission: case "mission":
return MissionControl(controllerNum); return MissionControl(controllerNum);
case SaturnusControllerDeck.Device.DualMission: case "dmission":
return DualMissionControl(controllerNum); return DualMissionControl(controllerNum);
case SaturnusControllerDeck.Device.Keyboard:
MessageBox.Show("This peripheral is not supported yet");
return null;
} }
} }
@ -90,7 +87,7 @@ namespace BizHawk.Client.EmuHawk
private static PadSchema ThreeDeeController(int controller) private static PadSchema ThreeDeeController(int controller)
{ {
var axisRanges = SaturnusControllerDeck.ThreeDeeAxisRanges; var axisRange = new AxisRange(0, 0x8000, 0xffff);
return new PadSchema return new PadSchema
{ {
Size = new Size(458, 285), Size = new Size(458, 285),
@ -110,8 +107,8 @@ namespace BizHawk.Client.EmuHawk
new AnalogSchema(6, 74, $"P{controller} Stick Horizontal") new AnalogSchema(6, 74, $"P{controller} Stick Horizontal")
{ {
SecondaryName = $"P{controller} Stick Vertical", SecondaryName = $"P{controller} Stick Vertical",
AxisRange = axisRanges[0], AxisRange = axisRange,
SecondaryAxisRange = axisRanges[1] SecondaryAxisRange = axisRange
}, },
new SingleAxisSchema(8, 12, controller, "Left Shoulder") new SingleAxisSchema(8, 12, controller, "Left Shoulder")
{ {
@ -189,7 +186,7 @@ namespace BizHawk.Client.EmuHawk
private static PadSchema MissionControl(int controller) private static PadSchema MissionControl(int controller)
{ {
var axisRanges = SaturnusControllerDeck.MissionAxisRanges; var axisRange = new AxisRange(0, 0x8000, 0xffff);
return new PadSchema return new PadSchema
{ {
DisplayName = "Mission", DisplayName = "Mission",
@ -208,8 +205,8 @@ namespace BizHawk.Client.EmuHawk
new AnalogSchema(185, 13, $"P{controller} Stick Horizontal") new AnalogSchema(185, 13, $"P{controller} Stick Horizontal")
{ {
SecondaryName = $"P{controller} Stick Vertical", SecondaryName = $"P{controller} Stick Vertical",
AxisRange = axisRanges[0], AxisRange = axisRange,
SecondaryAxisRange = axisRanges[1] SecondaryAxisRange = axisRange
}, },
new SingleAxisSchema(135, 13, controller, "Throttle", isVertical: true) new SingleAxisSchema(135, 13, controller, "Throttle", isVertical: true)
{ {
@ -223,7 +220,7 @@ namespace BizHawk.Client.EmuHawk
private static PadSchema DualMissionControl(int controller) private static PadSchema DualMissionControl(int controller)
{ {
var axisRanges = SaturnusControllerDeck.DualMissionAxisRanges; var axisRange = new AxisRange(0, 0x8000, 0xffff);
return new PadSchema return new PadSchema
{ {
DisplayName = "Dual Mission", DisplayName = "Dual Mission",
@ -233,8 +230,8 @@ namespace BizHawk.Client.EmuHawk
new AnalogSchema(58, 13, $"P{controller} Left Stick Horizontal") new AnalogSchema(58, 13, $"P{controller} Left Stick Horizontal")
{ {
SecondaryName = $"P{controller} Left Stick Vertical", SecondaryName = $"P{controller} Left Stick Vertical",
AxisRange = axisRanges[3], AxisRange = axisRange,
SecondaryAxisRange = axisRanges[4] SecondaryAxisRange = axisRange
}, },
new SingleAxisSchema(8, 13, controller, "Left Throttle", isVertical: true) new SingleAxisSchema(8, 13, controller, "Left Throttle", isVertical: true)
{ {
@ -246,8 +243,8 @@ namespace BizHawk.Client.EmuHawk
new AnalogSchema(400, 13, $"P{controller} Right Stick Horizontal") new AnalogSchema(400, 13, $"P{controller} Right Stick Horizontal")
{ {
SecondaryName = $"P{controller} Right Stick Vertical", SecondaryName = $"P{controller} Right Stick Vertical",
AxisRange = axisRanges[0], AxisRange = axisRange,
SecondaryAxisRange = axisRanges[1] SecondaryAxisRange = axisRange
}, },
new SingleAxisSchema(350, 13, controller, "Right Throttle", isVertical: true) new SingleAxisSchema(350, 13, controller, "Right Throttle", isVertical: true)
{ {
@ -280,6 +277,5 @@ namespace BizHawk.Client.EmuHawk
} }
}; };
} }
*/
} }
} }