atari 7800: did controller stuff until i got annoyed
This commit is contained in:
parent
a9bf3cf58a
commit
1895103a9c
|
@ -49,7 +49,7 @@ namespace BizHawk.Emulation
|
|||
"P4 Paddle"
|
||||
}
|
||||
};
|
||||
public static ControllerDefinition Keypads = new ControllerDefinition
|
||||
public static ControllerDefinition Keypad = new ControllerDefinition
|
||||
{
|
||||
Name = "Atari 7800 Keypad Controller",
|
||||
BoolButtons =
|
||||
|
@ -133,7 +133,7 @@ namespace BizHawk.Emulation
|
|||
"P2 Up", "P2 Down", "P2 Left", "P2 Right", "P2 Trigger", "P2 Trigger 2"
|
||||
}
|
||||
};
|
||||
public static ControllerDefinition LightGunController = new ControllerDefinition
|
||||
public static ControllerDefinition Lightgun = new ControllerDefinition
|
||||
{
|
||||
Name = "Atari 7800 Light Gun Controller",
|
||||
BoolButtons =
|
||||
|
@ -154,5 +154,166 @@ namespace BizHawk.Emulation
|
|||
"P2 VPos", "P2 HPos"
|
||||
}
|
||||
};
|
||||
|
||||
struct ControlAdapter
|
||||
{
|
||||
public ControllerDefinition Type;
|
||||
public Controller Left;
|
||||
public Controller Right;
|
||||
public Action<IController, InputState> Convert;
|
||||
public ControlAdapter(ControllerDefinition Type, Controller Left, Controller Right, Action<IController, InputState> Convert)
|
||||
{
|
||||
this.Type = Type;
|
||||
this.Left = Left;
|
||||
this.Right = Right;
|
||||
this.Convert = Convert;
|
||||
}
|
||||
}
|
||||
|
||||
static readonly ControlAdapter[] Adapters = new[]
|
||||
{
|
||||
new ControlAdapter(Joystick, Controller.Joystick, Controller.Joystick, ConvertJoystick),
|
||||
new ControlAdapter(Paddles, Controller.Paddles, Controller.Paddles, ConvertPaddles),
|
||||
new ControlAdapter(Keypad, Controller.Keypad, Controller.Keypad, ConvertKeypad),
|
||||
new ControlAdapter(Driving, Controller.Driving, Controller.Driving, ConvertDriving),
|
||||
new ControlAdapter(BoosterGrip, Controller.BoosterGrip, Controller.BoosterGrip, ConvertBoosterGrip),
|
||||
new ControlAdapter(ProLineJoystick, Controller.ProLineJoystick, Controller.ProLineJoystick, ConvertProLineJoystick),
|
||||
new ControlAdapter(Lightgun, Controller.Lightgun, Controller.Lightgun, ConvertLightgun),
|
||||
};
|
||||
|
||||
static void ConvertConsoleButtons(IController c, InputState s)
|
||||
{
|
||||
s.RaiseInput(0, MachineInput.Reset, c["Reset"]);
|
||||
s.RaiseInput(0, MachineInput.Select, c["Select"]);
|
||||
s.RaiseInput(0, MachineInput.Color, c["BW"]);
|
||||
s.RaiseInput(0, MachineInput.LeftDifficulty, c["Left Difficulty"]);
|
||||
s.RaiseInput(0, MachineInput.RightDifficulty, c["Right Difficulty"]);
|
||||
}
|
||||
static void ConvertDirections(IController c, InputState s, int p)
|
||||
{
|
||||
string ps = string.Format("P{0} ", p + 1);
|
||||
s.RaiseInput(p, MachineInput.Up, c[ps + "Up"]);
|
||||
s.RaiseInput(p, MachineInput.Down, c[ps + "Down"]);
|
||||
s.RaiseInput(p, MachineInput.Left, c[ps + "Left"]);
|
||||
s.RaiseInput(p, MachineInput.Right, c[ps + "Right"]);
|
||||
}
|
||||
static void ConvertTrigger(IController c, InputState s, int p)
|
||||
{
|
||||
string ps = string.Format("P{0} ", p + 1);
|
||||
s.RaiseInput(p, MachineInput.Fire, c[ps + "Trigger"]);
|
||||
}
|
||||
|
||||
static void ConvertJoystick(IController c, InputState s)
|
||||
{
|
||||
s.ClearAllInput();
|
||||
ConvertConsoleButtons(c, s);
|
||||
ConvertDirections(c, s, 0);
|
||||
ConvertDirections(c, s, 1);
|
||||
ConvertTrigger(c, s, 0);
|
||||
ConvertTrigger(c, s, 1);
|
||||
}
|
||||
static void ConvertPaddles(IController c, InputState s)
|
||||
{
|
||||
s.ClearAllInput();
|
||||
ConvertConsoleButtons(c, s);
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
string ps = string.Format("P{0} ", i + 1);
|
||||
ConvertTrigger(c, s, i);
|
||||
s.RaisePaddleInput(i, 700000, (int)c.GetFloat(ps + "Trigger"));
|
||||
}
|
||||
}
|
||||
static void ConvertKeypad(IController c, InputState s)
|
||||
{
|
||||
s.ClearAllInput();
|
||||
ConvertConsoleButtons(c, s);
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
string ps = string.Format("P{0} ", i + 1);
|
||||
s.RaiseInput(i, MachineInput.NumPad1, c[ps + "Keypad1"]);
|
||||
s.RaiseInput(i, MachineInput.NumPad2, c[ps + "Keypad2"]);
|
||||
s.RaiseInput(i, MachineInput.NumPad3, c[ps + "Keypad3"]);
|
||||
s.RaiseInput(i, MachineInput.NumPad4, c[ps + "Keypad4"]);
|
||||
s.RaiseInput(i, MachineInput.NumPad5, c[ps + "Keypad5"]);
|
||||
s.RaiseInput(i, MachineInput.NumPad6, c[ps + "Keypad6"]);
|
||||
s.RaiseInput(i, MachineInput.NumPad7, c[ps + "Keypad7"]);
|
||||
s.RaiseInput(i, MachineInput.NumPad8, c[ps + "Keypad8"]);
|
||||
s.RaiseInput(i, MachineInput.NumPad9, c[ps + "Keypad9"]);
|
||||
s.RaiseInput(i, MachineInput.NumPadMult, c[ps + "KeypadA"]);
|
||||
s.RaiseInput(i, MachineInput.NumPad0, c[ps + "Keypad0"]);
|
||||
s.RaiseInput(i, MachineInput.NumPadHash, c[ps + "KeypadP"]);
|
||||
}
|
||||
}
|
||||
static MachineInput[] drvlut = new[]
|
||||
{
|
||||
MachineInput.Driving0,
|
||||
MachineInput.Driving1,
|
||||
MachineInput.Driving2,
|
||||
MachineInput.Driving3
|
||||
};
|
||||
static void ConvertDriving(IController c, InputState s)
|
||||
{
|
||||
s.ClearAllInput();
|
||||
ConvertConsoleButtons(c, s);
|
||||
ConvertTrigger(c, s, 0);
|
||||
ConvertTrigger(c, s, 1);
|
||||
s.RaiseInput(0, drvlut[(int)c.GetFloat("P1 Driving")], true);
|
||||
s.RaiseInput(1, drvlut[(int)c.GetFloat("P2 Driving")], true);
|
||||
}
|
||||
static void ConvertBoosterGrip(IController c, InputState s)
|
||||
{
|
||||
s.ClearAllInput();
|
||||
ConvertConsoleButtons(c, s);
|
||||
ConvertDirections(c, s, 0);
|
||||
ConvertDirections(c, s, 1);
|
||||
// weird mapping is intentional
|
||||
s.RaiseInput(0, MachineInput.Fire, c["P1 Trigger"]);
|
||||
s.RaiseInput(0, MachineInput.Fire2, c["P1 Trigger 2"]);
|
||||
s.RaiseInput(1, MachineInput.Fire2, c["P1 Trigger 3"]);
|
||||
s.RaiseInput(1, MachineInput.Fire, c["P2 Trigger"]);
|
||||
s.RaiseInput(2, MachineInput.Fire2, c["P2 Trigger 2"]);
|
||||
s.RaiseInput(3, MachineInput.Fire2, c["P2 Trigger 3"]);
|
||||
}
|
||||
static void ConvertProLineJoystick(IController c, InputState s)
|
||||
{
|
||||
s.ClearAllInput();
|
||||
ConvertConsoleButtons(c, s);
|
||||
ConvertDirections(c, s, 0);
|
||||
ConvertDirections(c, s, 1);
|
||||
s.RaiseInput(0, MachineInput.Fire, c["P1 Trigger"]);
|
||||
s.RaiseInput(0, MachineInput.Fire2, c["P1 Trigger 2"]);
|
||||
s.RaiseInput(1, MachineInput.Fire, c["P2 Trigger"]);
|
||||
s.RaiseInput(1, MachineInput.Fire2, c["P2 Trigger 2"]);
|
||||
}
|
||||
static void ConvertLightgun(IController c, InputState s)
|
||||
{
|
||||
s.ClearAllInput();
|
||||
ConvertConsoleButtons(c, s);
|
||||
ConvertTrigger(c, s, 0);
|
||||
ConvertTrigger(c, s, 1);
|
||||
s.RaiseLightgunPos(0, (int)c.GetFloat("P1 VPos"), (int)c.GetFloat("P1 HPos"));
|
||||
s.RaiseLightgunPos(1, (int)c.GetFloat("P2 VPos"), (int)c.GetFloat("P2 HPos"));
|
||||
}
|
||||
|
||||
public Action<IController, InputState> Convert { get; private set; }
|
||||
|
||||
public ControllerDefinition ControlType { get; private set; }
|
||||
|
||||
public Atari7800Control(MachineBase mac)
|
||||
{
|
||||
var l = mac.InputState.LeftControllerJack;
|
||||
var r = mac.InputState.RightControllerJack;
|
||||
|
||||
foreach (var a in Adapters)
|
||||
{
|
||||
if (a.Left == l && a.Right == r)
|
||||
{
|
||||
Convert = a.Convert;
|
||||
ControlType = a.Type;
|
||||
return;
|
||||
}
|
||||
}
|
||||
throw new Exception(string.Format("Couldn't connect Atari 7800 controls \"{0}\" and \"{1}\"", l.ToString(), r.ToString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue