Rework some input stuff in preparation for moving it to common

This commit is contained in:
adelikat 2013-12-24 21:37:51 +00:00
parent 82c82b681a
commit 302e71edc3
5 changed files with 25 additions and 10 deletions

View File

@ -84,5 +84,9 @@ namespace BizHawk.Client.Common
public static SimpleController MovieOutputController = new SimpleController();
public static Controller ClientControls;
// Input state which has been estine for game controller inputs are coalesce here
// This relies on a client specific implementation!
public static SimpleController ControllerInputCoalescer;
}
}

View File

@ -129,7 +129,13 @@ namespace BizHawk.Client.Common
protected WorkingDictionary<string, bool> Buttons = new WorkingDictionary<string, bool>();
protected WorkingDictionary<string, float> Floats = new WorkingDictionary<string, float>();
public virtual void Clear()
{
Buttons = new WorkingDictionary<string, bool>();
Floats = new WorkingDictionary<string, float>();
}
public virtual bool this[string button]
{
get { return Buttons[button]; } set { Buttons[button] = value; }

View File

@ -19,7 +19,7 @@ namespace BizHawk.Client.EmuHawk
public static DisplayManager DisplayManager = new DisplayManager();
//input state which has been destined for game controller inputs are coalesced here
public static ControllerInputCoalescer ControllerInputCoalescer = new ControllerInputCoalescer();
//public static ControllerInputCoalescer ControllerInputCoalescer = new ControllerInputCoalescer();
//input state which has been destined for client hotkey consumption are colesced here
public static InputCoalescer HotkeyCoalescer = new InputCoalescer();
}

View File

@ -59,6 +59,7 @@ namespace BizHawk.Client.EmuHawk
public MainForm(string[] args)
{
GlobalWin.MainForm = this;
Global.ControllerInputCoalescer = new ControllerInputCoalescer();
Global.FirmwareManager = new FirmwareManager();
Global.MovieSession = new MovieSession
{
@ -397,10 +398,10 @@ namespace BizHawk.Client.EmuHawk
// handle events and dispatch as a hotkey action, or a hotkey button, or an input button
ProcessInput();
Global.ClientControls.LatchFromPhysical(GlobalWin.HotkeyCoalescer);
Global.ActiveController.LatchFromPhysical(GlobalWin.ControllerInputCoalescer);
Global.ActiveController.LatchFromPhysical(Global.ControllerInputCoalescer);
Global.ActiveController.OR_FromLogical(Global.ClickyVirtualPadController);
Global.AutoFireController.LatchFromPhysical(GlobalWin.ControllerInputCoalescer);
Global.AutoFireController.LatchFromPhysical(Global.ControllerInputCoalescer);
if (Global.ClientControls["Autohold"])
{
@ -517,8 +518,11 @@ namespace BizHawk.Client.EmuHawk
public void ProcessInput()
{
ControllerInputCoalescer conInput = Global.ControllerInputCoalescer as ControllerInputCoalescer;
for (; ; )
{
// loop through all available events
var ie = Input.Instance.DequeueEvent();
if (ie == null) { break; }
@ -561,7 +565,7 @@ namespace BizHawk.Client.EmuHawk
{
default:
case 0: // Both allowed
GlobalWin.ControllerInputCoalescer.Receive(ie);
conInput.Receive(ie);
handled = false;
if (ie.EventType == Input.InputEventType.Press)
@ -577,7 +581,7 @@ namespace BizHawk.Client.EmuHawk
break;
case 1: // Input overrides Hokeys
GlobalWin.ControllerInputCoalescer.Receive(ie);
conInput.Receive(ie);
if (!Global.ActiveController.HasBinding(ie.LogicalButton.ToString()))
{
handled = false;
@ -604,7 +608,7 @@ namespace BizHawk.Client.EmuHawk
if (!handled)
{
GlobalWin.HotkeyCoalescer.Receive(ie);
GlobalWin.ControllerInputCoalescer.Receive(ie);
conInput.Receive(ie);
}
break;
@ -613,7 +617,7 @@ namespace BizHawk.Client.EmuHawk
} // foreach event
// also handle floats
GlobalWin.ControllerInputCoalescer.AcceptNewFloats(Input.Instance.GetFloats());
conInput.AcceptNewFloats(Input.Instance.GetFloats());
}
public void RebootCore()
@ -3016,7 +3020,8 @@ namespace BizHawk.Client.EmuHawk
private static void RewireInputChain() // Move to Client.Common
{
GlobalWin.ControllerInputCoalescer = new ControllerInputCoalescer { Type = Global.ActiveController.Type };
Global.ControllerInputCoalescer.Clear();
Global.ControllerInputCoalescer.Type = Global.ActiveController.Type;
Global.OrControllerAdapter.Source = Global.ActiveController;
Global.OrControllerAdapter.SourceOr = Global.AutoFireController;

View File

@ -31,7 +31,7 @@ namespace BizHawk.Client.EmuHawk
public LuaTable input_get()
{
var buttons = _lua.NewTable();
foreach (var kvp in GlobalWin.ControllerInputCoalescer.BoolButtons().Where(kvp => kvp.Value))
foreach (var kvp in Global.ControllerInputCoalescer.BoolButtons().Where(kvp => kvp.Value))
{
buttons[kvp.Key] = true;
}