BizHawk/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/VECSchema.cs

104 lines
2.4 KiB
C#

using System.Collections.Generic;
using System.Drawing;
using BizHawk.Emulation.Common;
using BizHawk.Emulation.Cores.Consoles.Vectrex;
namespace BizHawk.Client.EmuHawk
{
[Schema("VEC")]
// ReSharper disable once UnusedMember.Global
public class VecSchema : IVirtualPadSchema
{
public IEnumerable<PadSchema> GetPadSchemas(IEmulator core)
{
var vecSyncSettings = ((VectrexHawk)core).GetSyncSettings().Clone();
var port1 = vecSyncSettings.Port1;
var port2 = vecSyncSettings.Port2;
switch (port1)
{
case "Vectrex Digital Controller":
yield return StandardController(1);
break;
case "Vectrex Analog Controller":
yield return AnalogController(1);
break;
}
switch (port2)
{
case "Vectrex Digital Controller":
yield return StandardController(2);
break;
case "Vectrex Analog Controller":
yield return AnalogController(2);
break;
}
yield return ConsoleButtons();
}
private static PadSchema StandardController(int controller)
{
return new PadSchema
{
Size = new Size(200, 100),
Buttons = new[]
{
ButtonSchema.Up(14, 12, controller),
ButtonSchema.Down(14, 56, controller),
ButtonSchema.Left(2, 34, controller),
ButtonSchema.Right(24, 34, controller),
Button(74, 34, controller, 1),
Button(98, 34, controller, 2),
Button(122, 34, controller, 3),
Button(146, 34, controller, 4)
}
};
}
private static PadSchema AnalogController(int controller)
{
var controllerDefRanges = new AnalogControls(controller).Definition.AxisRanges;
return new PadSchema
{
Size = new Size(280, 300),
Buttons = new PadSchemaControl[]
{
Button(74, 34, controller, 1),
Button(98, 34, controller, 2),
Button(122, 34, controller, 3),
Button(146, 34, controller, 4),
new AnalogSchema(2, 80, $"P{controller} Stick X")
{
AxisRange = controllerDefRanges[0],
SecondaryAxisRange = controllerDefRanges[1]
}
}
};
}
private static ButtonSchema Button(int x, int y, int controller, int button)
{
return new ButtonSchema(x, y, controller, $"Button {button}")
{
DisplayName = button.ToString()
};
}
private static PadSchema ConsoleButtons()
{
return new ConsoleSchema
{
Size = new Size(150, 50),
Buttons = new[]
{
new ButtonSchema(10, 15, "Reset"),
new ButtonSchema(58, 15, "Power")
}
};
}
}
}