Move Global controller adapters into InputManager, it's a step in the right direction

This commit is contained in:
adelikat 2020-03-15 17:50:48 -05:00
parent 1f617221fc
commit 6d5c444252
23 changed files with 226 additions and 229 deletions

View File

@ -359,7 +359,7 @@ namespace BizHawk.Client.ApiHawk
{ {
if (joypad.Inputs == 0) if (joypad.Inputs == 0)
{ {
AutoFireStickyXorAdapter joypadAdapter = Global.AutofireStickyXORAdapter; AutoFireStickyXorAdapter joypadAdapter = Global.InputManager.AutofireStickyXorAdapter;
joypadAdapter.ClearStickies(); joypadAdapter.ClearStickies();
} }
else else
@ -368,7 +368,7 @@ namespace BizHawk.Client.ApiHawk
{ {
if (joypad.Inputs.HasFlag(button)) if (joypad.Inputs.HasFlag(button))
{ {
AutoFireStickyXorAdapter joypadAdapter = Global.AutofireStickyXORAdapter; AutoFireStickyXorAdapter joypadAdapter = Global.InputManager.AutofireStickyXorAdapter;
joypadAdapter.SetSticky( joypadAdapter.SetSticky(
RunningSystem == SystemInfo.GB RunningSystem == SystemInfo.GB
? $"{JoypadConverter.ConvertBack(button, RunningSystem)}" ? $"{JoypadConverter.ConvertBack(button, RunningSystem)}"
@ -408,7 +408,7 @@ namespace BizHawk.Client.ApiHawk
/// </summary> /// </summary>
private static void GetAllInputs() private static void GetAllInputs()
{ {
var joypadAdapter = Global.AutofireStickyXORAdapter; var joypadAdapter = Global.InputManager.AutofireStickyXorAdapter;
var pressedButtons = joypadAdapter.Definition.BoolButtons var pressedButtons = joypadAdapter.Definition.BoolButtons
.Where(b => joypadAdapter.IsPressed(b)); .Where(b => joypadAdapter.IsPressed(b));

View File

@ -18,12 +18,12 @@ namespace BizHawk.Client.Common
public IDictionary<string, dynamic> Get(int? controller = null) public IDictionary<string, dynamic> Get(int? controller = null)
{ {
return Global.AutofireStickyXORAdapter.ToDictionary(controller); return Global.InputManager.AutofireStickyXorAdapter.ToDictionary(controller);
} }
public IDictionary<string, dynamic> GetImmediate(int? controller = null) public IDictionary<string, dynamic> GetImmediate(int? controller = null)
{ {
return Global.ActiveController.ToDictionary(controller); return Global.InputManager.ActiveController.ToDictionary(controller);
} }
public void SetFromMnemonicStr(string inputLogEntry) public void SetFromMnemonicStr(string inputLogEntry)
@ -38,13 +38,13 @@ namespace BizHawk.Client.Common
LogCallback($"invalid mnemonic string: {inputLogEntry}"); LogCallback($"invalid mnemonic string: {inputLogEntry}");
return; return;
} }
foreach (var button in lg.Definition.BoolButtons) Global.ButtonOverrideAdapter.SetButton(button, lg.IsPressed(button)); foreach (var button in lg.Definition.BoolButtons) Global.InputManager.ButtonOverrideAdapter.SetButton(button, lg.IsPressed(button));
foreach (var floatButton in lg.Definition.FloatControls) Global.ButtonOverrideAdapter.SetFloat(floatButton, lg.GetFloat(floatButton)); foreach (var floatButton in lg.Definition.FloatControls) Global.InputManager.ButtonOverrideAdapter.SetFloat(floatButton, lg.GetFloat(floatButton));
} }
public void Set(Dictionary<string, bool> buttons, int? controller = null) public void Set(Dictionary<string, bool> buttons, int? controller = null)
{ {
foreach (var button in Global.ActiveController.Definition.BoolButtons) foreach (var button in Global.InputManager.ActiveController.Definition.BoolButtons)
{ {
Set(button, buttons.TryGetValue(button, out var state) ? state : (bool?) null, controller); Set(button, buttons.TryGetValue(button, out var state) ? state : (bool?) null, controller);
} }
@ -55,9 +55,9 @@ namespace BizHawk.Client.Common
try try
{ {
var buttonToSet = controller == null ? button : $"P{controller} {button}"; var buttonToSet = controller == null ? button : $"P{controller} {button}";
if (state == null) Global.ButtonOverrideAdapter.UnSet(buttonToSet); if (state == null) Global.InputManager.ButtonOverrideAdapter.UnSet(buttonToSet);
else Global.ButtonOverrideAdapter.SetButton(buttonToSet, state.Value); else Global.InputManager.ButtonOverrideAdapter.SetButton(buttonToSet, state.Value);
Global.ActiveController.Overrides(Global.ButtonOverrideAdapter); Global.InputManager.ActiveController.Overrides(Global.InputManager.ButtonOverrideAdapter);
} }
catch catch
{ {
@ -74,7 +74,7 @@ namespace BizHawk.Client.Common
{ {
try try
{ {
Global.StickyXORAdapter.SetFloat(controller == null ? control : $"P{controller} {control}", value); Global.InputManager.StickyXorAdapter.SetFloat(controller == null ? control : $"P{controller} {control}", value);
} }
catch catch
{ {

View File

@ -26,50 +26,6 @@ namespace BizHawk.Client.Common
public static InputManager InputManager { get; } = new InputManager(); public static InputManager InputManager { get; } = new InputManager();
// the movie will be spliced in between these if it is present
public static CopyControllerAdapter MovieInputSourceAdapter { get; } = new CopyControllerAdapter();
public static CopyControllerAdapter MovieOutputHardpoint { get; } = new CopyControllerAdapter();
public static MultitrackRewiringControllerAdapter MultitrackRewiringAdapter { get; } = new MultitrackRewiringControllerAdapter();
// don't take my word for it, since the final word is actually in RewireInputChain, but here is a guide...
// user -> Input -> ActiveController -> UDLR -> StickyXORPlayerInputAdapter -> TurboAdapter(TBD) -> Lua(?TBD?) -> ..
// .. -> MultitrackRewiringControllerAdapter -> MovieInputSourceAdapter -> (MovieSession) -> MovieOutputAdapter -> ControllerOutput(1) -> Game
// (1)->Input Display
// the original source controller, bound to the user, sort of the "input" port for the chain, i think
public static Controller ActiveController { get; set; }
// rapid fire version on the user controller, has its own key bindings and is OR'ed against ActiveController
public static AutofireController AutoFireController { get; set; }
// the "output" port for the controller chain.
public static CopyControllerAdapter ControllerOutput { get; } = new CopyControllerAdapter();
public static UdlrControllerAdapter UD_LR_ControllerAdapter { get; } = new UdlrControllerAdapter();
public static AutoFireStickyXorAdapter AutofireStickyXORAdapter { get; } = new AutoFireStickyXorAdapter();
/// <summary>
/// provides an opportunity to mutate the player's input in an autohold style
/// </summary>
public static StickyXorAdapter StickyXORAdapter { get; } = new StickyXorAdapter();
/// <summary>
/// Used to AND to another controller, used for <see cref="JoypadApi.Set(Dictionary{string, bool}, int?)">JoypadApi.Set</see>
/// </summary>
public static OverrideAdapter ButtonOverrideAdapter { get; } = new OverrideAdapter();
/// <summary>
/// fire off one-frame logical button clicks here. useful for things like ti-83 virtual pad and reset buttons
/// </summary>
public static ClickyVirtualPadController ClickyVirtualPadController { get; } = new ClickyVirtualPadController();
public static Controller ClientControls { get; set; }
// Input state for game controller inputs are coalesced here
// This relies on a client specific implementation!
public static SimpleController ControllerInputCoalescer { get; set; }
public static Dictionary<string, object> UserBag { get; set; } = new Dictionary<string, object>(); public static Dictionary<string, object> UserBag { get; set; } = new Dictionary<string, object>();
} }
} }

View File

@ -5,33 +5,77 @@ using BizHawk.Client.Common.InputAdapterExtensions;
namespace BizHawk.Client.Common namespace BizHawk.Client.Common
{ {
// don't take my word for it, but here is a guide...
// user -> Input -> ActiveController -> UDLR -> StickyXORPlayerInputAdapter -> TurboAdapter(TBD) -> Lua(?TBD?) -> ..
// .. -> MultitrackRewiringControllerAdapter -> MovieInputSourceAdapter -> (MovieSession) -> MovieOutputAdapter -> ControllerOutput(1) -> Game
// (1)->Input Display
public class InputManager public class InputManager
{ {
// the movie will be spliced in between these if it is present
public CopyControllerAdapter MovieInputSourceAdapter { get; } = new CopyControllerAdapter();
public CopyControllerAdapter MovieOutputHardpoint { get; } = new CopyControllerAdapter();
public MultitrackRewiringControllerAdapter MultitrackRewiringAdapter { get; } = new MultitrackRewiringControllerAdapter();
// the original source controller, bound to the user, sort of the "input" port for the chain, i think
public Controller ActiveController { get; set; } // TODO: private setter, add a method that takes both controllers in
// rapid fire version on the user controller, has its own key bindings and is OR'ed against ActiveController
public AutofireController AutoFireController { get; set; } // TODO: private setter, add a method that takes both controllers in
// the "output" port for the controller chain.
public CopyControllerAdapter ControllerOutput { get; } = new CopyControllerAdapter();
public UdlrControllerAdapter UdLRControllerAdapter { get; } = new UdlrControllerAdapter();
public AutoFireStickyXorAdapter AutofireStickyXorAdapter { get; } = new AutoFireStickyXorAdapter();
/// <summary>
/// provides an opportunity to mutate the player's input in an autohold style
/// </summary>
public StickyXorAdapter StickyXorAdapter { get; } = new StickyXorAdapter();
/// <summary>
/// Used to AND to another controller, used for <see cref="JoypadApi.Set(Dictionary{string, bool}, int?)">JoypadApi.Set</see>
/// </summary>
public OverrideAdapter ButtonOverrideAdapter { get; } = new OverrideAdapter();
/// <summary>
/// fire off one-frame logical button clicks here. useful for things like ti-83 virtual pad and reset buttons
/// </summary>
public ClickyVirtualPadController ClickyVirtualPadController { get; } = new ClickyVirtualPadController();
// Input state for game controller inputs are coalesced here
// This relies on a client specific implementation!
public SimpleController ControllerInputCoalescer { get; set; }
public Controller ClientControls { get; set; }
public void RewireInputChain() public void RewireInputChain()
{ {
Global.ControllerInputCoalescer.Clear(); ControllerInputCoalescer.Clear();
Global.ControllerInputCoalescer.Definition = Global.ActiveController.Definition; ControllerInputCoalescer.Definition = ActiveController.Definition;
Global.UD_LR_ControllerAdapter.Source = Global.ActiveController.Or(Global.AutoFireController); UdLRControllerAdapter.Source = ActiveController.Or(AutoFireController);
Global.StickyXORAdapter.Source = Global.UD_LR_ControllerAdapter; StickyXorAdapter.Source = UdLRControllerAdapter;
Global.AutofireStickyXORAdapter.Source = Global.StickyXORAdapter; AutofireStickyXorAdapter.Source = StickyXorAdapter;
Global.MultitrackRewiringAdapter.Source = Global.AutofireStickyXORAdapter; MultitrackRewiringAdapter.Source = AutofireStickyXorAdapter;
Global.MovieInputSourceAdapter.Source = Global.MultitrackRewiringAdapter; MovieInputSourceAdapter.Source = MultitrackRewiringAdapter;
Global.ControllerOutput.Source = Global.MovieOutputHardpoint; ControllerOutput.Source = MovieOutputHardpoint;
Global.MovieSession.MovieControllerAdapter.Definition = Global.MovieInputSourceAdapter.Definition; Global.MovieSession.MovieControllerAdapter.Definition = MovieInputSourceAdapter.Definition;
// connect the movie session before MovieOutputHardpoint if it is doing anything // connect the movie session before MovieOutputHardpoint if it is doing anything
// otherwise connect the MovieInputSourceAdapter to it, effectively bypassing the movie session // otherwise connect the MovieInputSourceAdapter to it, effectively bypassing the movie session
if (Global.MovieSession != null) if (Global.MovieSession != null)
{ {
Global.MovieOutputHardpoint.Source = Global.MovieSession.MovieControllerAdapter; MovieOutputHardpoint.Source = Global.MovieSession.MovieControllerAdapter;
} }
else else
{ {
Global.MovieOutputHardpoint.Source = Global.MovieInputSourceAdapter; MovieOutputHardpoint.Source = MovieInputSourceAdapter;
} }
} }
@ -39,13 +83,13 @@ namespace BizHawk.Client.Common
{ {
var def = emulator.ControllerDefinition; var def = emulator.ControllerDefinition;
Global.ActiveController = BindToDefinition(def, config.AllTrollers, config.AllTrollersAnalog); ActiveController = BindToDefinition(def, config.AllTrollers, config.AllTrollersAnalog);
Global.AutoFireController = BindToDefinitionAF(def, emulator, config.AllTrollersAutoFire); AutoFireController = BindToDefinitionAF(def, emulator, config.AllTrollersAutoFire);
// allow propagating controls that are in the current controller definition but not in the prebaked one // allow propagating controls that are in the current controller definition but not in the prebaked one
// these two lines shouldn't be required anymore under the new system? // these two lines shouldn't be required anymore under the new system?
Global.ActiveController.ForceType(new ControllerDefinition(def)); ActiveController.ForceType(new ControllerDefinition(def));
Global.ClickyVirtualPadController.Definition = new ControllerDefinition(def); ClickyVirtualPadController.Definition = new ControllerDefinition(def);
RewireInputChain(); RewireInputChain();
} }

View File

@ -147,7 +147,7 @@ namespace BizHawk.Client.Common
MovieControllerAdapter.LatchFromSource(input); MovieControllerAdapter.LatchFromSource(input);
if (MultiTrack.IsActive) if (MultiTrack.IsActive)
{ {
Global.MultitrackRewiringAdapter.Source = MovieControllerAdapter; Global.InputManager.MultitrackRewiringAdapter.Source = MovieControllerAdapter;
} }
} }
@ -237,7 +237,7 @@ namespace BizHawk.Client.Common
{ {
if (!Movie.IsActive()) if (!Movie.IsActive())
{ {
LatchInputFromPlayer(Global.MovieInputSourceAdapter); LatchInputFromPlayer(Global.InputManager.MovieInputSourceAdapter);
} }
else if (Movie.IsFinished()) else if (Movie.IsFinished())
{ {
@ -248,7 +248,7 @@ namespace BizHawk.Client.Common
} }
else else
{ {
LatchInputFromPlayer(Global.MovieInputSourceAdapter); LatchInputFromPlayer(Global.InputManager.MovieInputSourceAdapter);
} }
} }
else if (Movie.IsPlaying()) else if (Movie.IsPlaying())
@ -264,20 +264,20 @@ namespace BizHawk.Client.Common
// Movie may go into finished mode as a result from latching // Movie may go into finished mode as a result from latching
if (!Movie.IsFinished()) if (!Movie.IsFinished())
{ {
if (Global.ClientControls.IsPressed("Scrub Input")) if (Global.InputManager.ClientControls.IsPressed("Scrub Input"))
{ {
LatchInputFromPlayer(Global.MovieInputSourceAdapter); LatchInputFromPlayer(Global.InputManager.MovieInputSourceAdapter);
ClearFrame(); ClearFrame();
} }
else if (Global.Config.MoviePlaybackPokeMode) else if (Global.Config.MoviePlaybackPokeMode)
{ {
LatchInputFromPlayer(Global.MovieInputSourceAdapter); LatchInputFromPlayer(Global.InputManager.MovieInputSourceAdapter);
var lg = Movie.LogGeneratorInstance(); var lg = Movie.LogGeneratorInstance();
lg.SetSource(Global.MovieOutputHardpoint); lg.SetSource(Global.InputManager.MovieOutputHardpoint);
if (!lg.IsEmpty) if (!lg.IsEmpty)
{ {
LatchInputFromPlayer(Global.MovieInputSourceAdapter); LatchInputFromPlayer(Global.InputManager.MovieInputSourceAdapter);
Movie.PokeFrame(Global.Emulator.Frame, Global.MovieOutputHardpoint); Movie.PokeFrame(Global.Emulator.Frame, Global.InputManager.MovieOutputHardpoint);
} }
else else
{ {
@ -305,17 +305,17 @@ namespace BizHawk.Client.Common
{ {
if (MultiTrack.IsActive) if (MultiTrack.IsActive)
{ {
LatchMultitrackPlayerInput(Global.MultitrackRewiringAdapter); LatchMultitrackPlayerInput(Global.InputManager.MultitrackRewiringAdapter);
} }
else else
{ {
LatchInputFromPlayer(Global.MovieInputSourceAdapter); LatchInputFromPlayer(Global.InputManager.MovieInputSourceAdapter);
} }
} }
// the movie session makes sure that the correct input has been read and merged to its MovieControllerAdapter; // the movie session makes sure that the correct input has been read and merged to its MovieControllerAdapter;
// this has been wired to Global.MovieOutputHardpoint in RewireInputChain // this has been wired to Global.MovieOutputHardpoint in RewireInputChain
Movie.RecordFrame(Global.Emulator.Frame, Global.MovieOutputHardpoint); Movie.RecordFrame(Global.Emulator.Frame, Global.InputManager.MovieOutputHardpoint);
} }
public void HandleMovieAfterFrameLoop() public void HandleMovieAfterFrameLoop()
@ -368,7 +368,7 @@ namespace BizHawk.Client.Common
} }
else if (Movie.IsFinished()) else if (Movie.IsFinished())
{ {
LatchInputFromPlayer(Global.MovieInputSourceAdapter); LatchInputFromPlayer(Global.InputManager.MovieInputSourceAdapter);
} }
} }
else else

View File

@ -153,7 +153,7 @@ namespace BizHawk.Client.Common
{ {
foreach (var button in Definition.BoolButtons) foreach (var button in Definition.BoolButtons)
{ {
_myBoolButtons[button] = Global.AutofireStickyXORAdapter.IsSticky(button); _myBoolButtons[button] = Global.InputManager.AutofireStickyXorAdapter.IsSticky(button);
} }
// float controls don't have sticky logic, so latch default value // float controls don't have sticky logic, so latch default value

View File

@ -289,7 +289,7 @@ namespace BizHawk.Client.Common
protected void WriteRawInputLog(TextWriter writer) protected void WriteRawInputLog(TextWriter writer)
{ {
var lg = new Bk2LogEntryGenerator(LogKey); var lg = new Bk2LogEntryGenerator(LogKey);
lg.SetSource(Global.MovieOutputHardpoint); lg.SetSource(Global.InputManager.MovieOutputHardpoint);
writer.WriteLine(lg.GenerateLogKey()); writer.WriteLine(lg.GenerateLogKey());

View File

@ -396,7 +396,7 @@ namespace BizHawk.Client.Common
Global.MovieSession.MovieControllerAdapter.LatchSticky(); Global.MovieSession.MovieControllerAdapter.LatchSticky();
var lg = LogGeneratorInstance(); var lg = LogGeneratorInstance();
lg.SetSource(Global.MovieOutputHardpoint); // account for autohold. needs autohold pattern to be already recorded in the current frame lg.SetSource(Global.InputManager.MovieOutputHardpoint); // account for autohold. needs autohold pattern to be already recorded in the current frame
for (int i = 0; i < numFrames; i++) for (int i = 0; i < numFrames; i++)
{ {

View File

@ -11,7 +11,7 @@ namespace BizHawk.Client.EmuHawk
public Dictionary<string, bool> Get() public Dictionary<string, bool> Get()
{ {
var buttons = new Dictionary<string, bool>(); var buttons = new Dictionary<string, bool>();
foreach (var kvp in Global.ControllerInputCoalescer.BoolButtons().Where(kvp => kvp.Value)) buttons[kvp.Key] = true; foreach (var kvp in Global.InputManager.ControllerInputCoalescer.BoolButtons().Where(kvp => kvp.Value)) buttons[kvp.Key] = true;
return buttons; return buttons;
} }

View File

@ -197,7 +197,7 @@ namespace BizHawk.Client.EmuHawk
public string InputStrImmediate() public string InputStrImmediate()
{ {
var lg = Global.MovieSession.LogGeneratorInstance(); var lg = Global.MovieSession.LogGeneratorInstance();
lg.SetSource(Global.AutofireStickyXORAdapter); lg.SetSource(Global.InputManager.AutofireStickyXorAdapter);
return lg.GenerateInputDisplay(); return lg.GenerateInputDisplay();
} }
@ -226,7 +226,7 @@ namespace BizHawk.Client.EmuHawk
var lg = Global.MovieSession.LogGeneratorInstance(); var lg = Global.MovieSession.LogGeneratorInstance();
lg.SetSource(Global.AutofireStickyXORAdapter.Or(m)); lg.SetSource(Global.InputManager.AutofireStickyXorAdapter.Or(m));
return lg.GenerateInputDisplay(); return lg.GenerateInputDisplay();
} }
@ -246,7 +246,7 @@ namespace BizHawk.Client.EmuHawk
: Global.MovieSession.MovieControllerInstance(); : Global.MovieSession.MovieControllerInstance();
var lg = Global.MovieSession.LogGeneratorInstance(); var lg = Global.MovieSession.LogGeneratorInstance();
lg.SetSource(Global.AutofireStickyXORAdapter.And(m)); lg.SetSource(Global.InputManager.AutofireStickyXorAdapter.And(m));
return lg.GenerateInputDisplay(); return lg.GenerateInputDisplay();
} }
@ -323,7 +323,7 @@ namespace BizHawk.Client.EmuHawk
// basically we're tinting whatever is pressed because it's sticky specially // basically we're tinting whatever is pressed because it's sticky specially
// in order to achieve this we want to avoid drawing anything pink that isn't actually held down right now // in order to achieve this we want to avoid drawing anything pink that isn't actually held down right now
// so we make an AND adapter and combine it using immediate & sticky // so we make an AND adapter and combine it using immediate & sticky
var autoString = MakeStringFor(Global.StickyXORAdapter.Source.Xor(Global.AutofireStickyXORAdapter).And(Global.AutofireStickyXORAdapter)); var autoString = MakeStringFor(Global.InputManager.StickyXorAdapter.Source.Xor(Global.InputManager.AutofireStickyXorAdapter).And(Global.InputManager.AutofireStickyXorAdapter));
g.DrawString(autoString, MessageFont, autoColor, point.X, point.Y); g.DrawString(autoString, MessageFont, autoColor, point.X, point.Y);
//recolor everything that's changed from the previous input //recolor everything that's changed from the previous input
@ -358,16 +358,16 @@ namespace BizHawk.Client.EmuHawk
DrawOsdMessage(g, rerecordCount, FixedMessagesColor, point.X, point.Y); DrawOsdMessage(g, rerecordCount, FixedMessagesColor, point.X, point.Y);
} }
if (Global.ClientControls["Autohold"] || Global.ClientControls["Autofire"]) if (Global.InputManager.ClientControls["Autohold"] || Global.InputManager.ClientControls["Autofire"])
{ {
var sb = new StringBuilder("Held: "); var sb = new StringBuilder("Held: ");
foreach (string sticky in Global.StickyXORAdapter.CurrentStickies) foreach (string sticky in Global.InputManager.StickyXorAdapter.CurrentStickies)
{ {
sb.Append(sticky).Append(' '); sb.Append(sticky).Append(' ');
} }
foreach (string autoSticky in Global.AutofireStickyXORAdapter.CurrentStickies) foreach (string autoSticky in Global.InputManager.AutofireStickyXorAdapter.CurrentStickies)
{ {
sb sb
.Append("Auto-") .Append("Auto-")

View File

@ -1011,7 +1011,7 @@ namespace BizHawk.Client.EmuHawk
private void AutofireMenuItem_Click(object sender, EventArgs e) private void AutofireMenuItem_Click(object sender, EventArgs e)
{ {
using var form = new AutofireConfig(Config, AutoFireController, AutofireStickyXORAdapter); using var form = new AutofireConfig(Config, InputManager.AutoFireController, InputManager.AutofireStickyXorAdapter);
var result = form.ShowDialog(); var result = form.ShowDialog();
AddOnScreenMessage(result.IsOk() AddOnScreenMessage(result.IsOk()
? "Autofire settings saved" ? "Autofire settings saved"
@ -1658,7 +1658,7 @@ namespace BizHawk.Client.EmuHawk
{ {
if (MovieSession.Movie.Mode != MovieMode.Play) if (MovieSession.Movie.Mode != MovieMode.Play)
{ {
ClickyVirtualPadController.Click("FDS Eject"); InputManager.ClickyVirtualPadController.Click("FDS Eject");
AddOnScreenMessage("FDS disk ejected."); AddOnScreenMessage("FDS disk ejected.");
} }
} }
@ -1670,7 +1670,7 @@ namespace BizHawk.Client.EmuHawk
{ {
if (MovieSession.Movie.Mode != MovieMode.Play) if (MovieSession.Movie.Mode != MovieMode.Play)
{ {
ClickyVirtualPadController.Click("Insert Coin P1"); InputManager.ClickyVirtualPadController.Click("Insert Coin P1");
AddOnScreenMessage("P1 Coin Inserted"); AddOnScreenMessage("P1 Coin Inserted");
} }
} }
@ -1683,7 +1683,7 @@ namespace BizHawk.Client.EmuHawk
{ {
if (MovieSession.Movie.Mode != MovieMode.Play) if (MovieSession.Movie.Mode != MovieMode.Play)
{ {
ClickyVirtualPadController.Click("Insert Coin P2"); InputManager.ClickyVirtualPadController.Click("Insert Coin P2");
AddOnScreenMessage("P2 Coin Inserted"); AddOnScreenMessage("P2 Coin Inserted");
} }
} }
@ -1696,7 +1696,7 @@ namespace BizHawk.Client.EmuHawk
{ {
if (MovieSession.Movie.Mode != MovieMode.Play) if (MovieSession.Movie.Mode != MovieMode.Play)
{ {
ClickyVirtualPadController.Click("Service Switch"); InputManager.ClickyVirtualPadController.Click("Service Switch");
AddOnScreenMessage("Service Switch Pressed"); AddOnScreenMessage("Service Switch Pressed");
} }
} }

View File

@ -206,7 +206,7 @@ namespace BizHawk.Client.EmuHawk
MessageCallback = AddOnScreenMessage MessageCallback = AddOnScreenMessage
}; };
Global.ControllerInputCoalescer = new ControllerInputCoalescer(); Global.InputManager.ControllerInputCoalescer = new ControllerInputCoalescer();
Global.FirmwareManager = new FirmwareManager(); Global.FirmwareManager = new FirmwareManager();
MovieSession = new MovieSession MovieSession = new MovieSession
{ {
@ -325,9 +325,9 @@ namespace BizHawk.Client.EmuHawk
Input.Initialize(this); Input.Initialize(this);
InitControls(); InitControls();
Global.ActiveController = new Controller(NullController.Instance.Definition); Global.InputManager.ActiveController = new Controller(NullController.Instance.Definition);
Global.AutoFireController = _autofireNullControls; Global.InputManager.AutoFireController = _autofireNullControls;
Global.AutofireStickyXORAdapter.SetOnOffPatternFromConfig(); Global.InputManager.AutofireStickyXorAdapter.SetOnOffPatternFromConfig();
try try
{ {
GlobalWin.Sound = new Sound(Handle); GlobalWin.Sound = new Sound(Handle);
@ -563,28 +563,28 @@ namespace BizHawk.Client.EmuHawk
// handle events and dispatch as a hotkey action, or a hotkey button, or an input button // handle events and dispatch as a hotkey action, or a hotkey button, or an input button
ProcessInput(); ProcessInput();
ClientControls.LatchFromPhysical(_hotkeyCoalescer); InputManager.ClientControls.LatchFromPhysical(_hotkeyCoalescer);
Global.ActiveController.LatchFromPhysical(Global.ControllerInputCoalescer); Global.InputManager.ActiveController.LatchFromPhysical(Global.InputManager.ControllerInputCoalescer);
Global.ActiveController.ApplyAxisConstraints( Global.InputManager.ActiveController.ApplyAxisConstraints(
(Emulator is N64 && Config.N64UseCircularAnalogConstraint) ? "Natural Circle" : null); (Emulator is N64 && Config.N64UseCircularAnalogConstraint) ? "Natural Circle" : null);
Global.ActiveController.OR_FromLogical(ClickyVirtualPadController); Global.InputManager.ActiveController.OR_FromLogical(InputManager.ClickyVirtualPadController);
AutoFireController.LatchFromPhysical(Global.ControllerInputCoalescer); InputManager.AutoFireController.LatchFromPhysical(Global.InputManager.ControllerInputCoalescer);
if (ClientControls["Autohold"]) if (InputManager.ClientControls["Autohold"])
{ {
Global.StickyXORAdapter.MassToggleStickyState(Global.ActiveController.PressedButtons); Global.InputManager.StickyXorAdapter.MassToggleStickyState(Global.InputManager.ActiveController.PressedButtons);
Global.AutofireStickyXORAdapter.MassToggleStickyState(AutoFireController.PressedButtons); Global.InputManager.AutofireStickyXorAdapter.MassToggleStickyState(InputManager.AutoFireController.PressedButtons);
} }
else if (ClientControls["Autofire"]) else if (InputManager.ClientControls["Autofire"])
{ {
Global.AutofireStickyXORAdapter.MassToggleStickyState(Global.ActiveController.PressedButtons); Global.InputManager.AutofireStickyXorAdapter.MassToggleStickyState(Global.InputManager.ActiveController.PressedButtons);
} }
// autohold/autofire must not be affected by the following inputs // autohold/autofire must not be affected by the following inputs
Global.ActiveController.Overrides(Global.ButtonOverrideAdapter); Global.InputManager.ActiveController.Overrides(Global.InputManager.ButtonOverrideAdapter);
if (Tools.Has<LuaConsole>() && !SuppressLua) if (Tools.Has<LuaConsole>() && !SuppressLua)
{ {
@ -734,7 +734,7 @@ namespace BizHawk.Client.EmuHawk
public bool IsSeeking => PauseOnFrame.HasValue; public bool IsSeeking => PauseOnFrame.HasValue;
private bool IsTurboSeeking => PauseOnFrame.HasValue && Config.TurboSeek; private bool IsTurboSeeking => PauseOnFrame.HasValue && Config.TurboSeek;
public bool IsTurboing => ClientControls["Turbo"] || IsTurboSeeking; public bool IsTurboing => InputManager.ClientControls["Turbo"] || IsTurboSeeking;
#endregion #endregion
@ -747,8 +747,8 @@ namespace BizHawk.Client.EmuHawk
public void ClearHolds() public void ClearHolds()
{ {
Global.StickyXORAdapter.ClearStickies(); Global.InputManager.StickyXorAdapter.ClearStickies();
Global.AutofireStickyXORAdapter.ClearStickies(); Global.InputManager.AutofireStickyXorAdapter.ClearStickies();
if (Tools.Has<VirtualpadTool>()) if (Tools.Has<VirtualpadTool>())
{ {
@ -844,14 +844,10 @@ namespace BizHawk.Client.EmuHawk
private Sound Sound => GlobalWin.Sound; private Sound Sound => GlobalWin.Sound;
private CheatCollection CheatList => Global.CheatList; private CheatCollection CheatList => Global.CheatList;
private AutofireController AutoFireController => Global.AutoFireController;
private AutoFireStickyXorAdapter AutofireStickyXORAdapter => Global.AutofireStickyXORAdapter;
private ClickyVirtualPadController ClickyVirtualPadController => Global.ClickyVirtualPadController;
private Rewinder Rewinder { get; } private Rewinder Rewinder { get; }
private FirmwareManager FirmwareManager => Global.FirmwareManager; private FirmwareManager FirmwareManager => Global.FirmwareManager;
private Controller ClientControls => Global.ClientControls;
protected override void OnActivated(EventArgs e) protected override void OnActivated(EventArgs e)
{ {
@ -867,7 +863,7 @@ namespace BizHawk.Client.EmuHawk
private void ProcessInput() private void ProcessInput()
{ {
var conInput = (ControllerInputCoalescer)Global.ControllerInputCoalescer; var conInput = (ControllerInputCoalescer)Global.InputManager.ControllerInputCoalescer;
for (; ; ) for (; ; )
{ {
@ -884,7 +880,7 @@ namespace BizHawk.Client.EmuHawk
// TODO - wonder what happens if we pop up something interactive as a response to one of these hotkeys? may need to purge further processing // TODO - wonder what happens if we pop up something interactive as a response to one of these hotkeys? may need to purge further processing
// look for hotkey bindings for this key // look for hotkey bindings for this key
var triggers = ClientControls.SearchBindings(ie.LogicalButton.ToString()); var triggers = InputManager.ClientControls.SearchBindings(ie.LogicalButton.ToString());
if (triggers.Count == 0) if (triggers.Count == 0)
{ {
// Maybe it is a system alt-key which hasn't been overridden // Maybe it is a system alt-key which hasn't been overridden
@ -933,7 +929,7 @@ namespace BizHawk.Client.EmuHawk
break; break;
case 1: // Input overrides Hotkeys case 1: // Input overrides Hotkeys
conInput.Receive(ie); conInput.Receive(ie);
if (!Global.ActiveController.HasBinding(ie.LogicalButton.ToString())) if (!Global.InputManager.ActiveController.HasBinding(ie.LogicalButton.ToString()))
{ {
handled = false; handled = false;
if (ie.EventType == Input.InputEventType.Press) if (ie.EventType == Input.InputEventType.Press)
@ -1174,7 +1170,7 @@ namespace BizHawk.Client.EmuHawk
// prohibit this operation if the current controls include LMouse // prohibit this operation if the current controls include LMouse
if (allowSuppress) if (allowSuppress)
{ {
if (Global.ActiveController.HasBinding("WMouse L")) if (Global.InputManager.ActiveController.HasBinding("WMouse L"))
{ {
return; return;
} }
@ -1977,7 +1973,7 @@ namespace BizHawk.Client.EmuHawk
controls.BindMulti(b.DisplayName, b.Bindings); controls.BindMulti(b.DisplayName, b.Bindings);
} }
Global.ClientControls = controls; Global.InputManager.ClientControls = controls;
_autofireNullControls = new AutofireController(NullController.Instance.Definition, Emulator); _autofireNullControls = new AutofireController(NullController.Instance.Definition, Emulator);
} }
@ -2051,8 +2047,8 @@ namespace BizHawk.Client.EmuHawk
// skips outputting the audio. There's also a third way which is when no throttle // skips outputting the audio. There's also a third way which is when no throttle
// method is selected, but the clock throttle determines that by itself and // method is selected, but the clock throttle determines that by itself and
// everything appears normal here. // everything appears normal here.
var rewind = Rewinder.RewindActive && (ClientControls["Rewind"] || PressRewind); var rewind = Rewinder.RewindActive && (InputManager.ClientControls["Rewind"] || PressRewind);
var fastForward = ClientControls["Fast Forward"] || FastForward; var fastForward = InputManager.ClientControls["Fast Forward"] || FastForward;
var turbo = IsTurboing; var turbo = IsTurboing;
int speedPercent = fastForward ? Config.SpeedPercentAlternate : Config.SpeedPercent; int speedPercent = fastForward ? Config.SpeedPercentAlternate : Config.SpeedPercent;
@ -2415,7 +2411,7 @@ namespace BizHawk.Client.EmuHawk
{ {
if (MovieSession.Movie.Mode != MovieMode.Play) if (MovieSession.Movie.Mode != MovieMode.Play)
{ {
ClickyVirtualPadController.Click("Reset"); InputManager.ClickyVirtualPadController.Click("Reset");
AddOnScreenMessage("Reset button pressed."); AddOnScreenMessage("Reset button pressed.");
} }
} }
@ -2428,7 +2424,7 @@ namespace BizHawk.Client.EmuHawk
{ {
if (MovieSession.Movie.Mode != MovieMode.Play) if (MovieSession.Movie.Mode != MovieMode.Play)
{ {
ClickyVirtualPadController.Click("Power"); InputManager.ClickyVirtualPadController.Click("Power");
AddOnScreenMessage("Power button pressed."); AddOnScreenMessage("Power button pressed.");
} }
} }
@ -2710,7 +2706,7 @@ namespace BizHawk.Client.EmuHawk
{ {
if (MovieSession.Movie.Mode != MovieMode.Play) if (MovieSession.Movie.Mode != MovieMode.Play)
{ {
ClickyVirtualPadController.Click(button); InputManager.ClickyVirtualPadController.Click(button);
AddOnScreenMessage(msg); AddOnScreenMessage(msg);
} }
} }
@ -2842,7 +2838,7 @@ namespace BizHawk.Client.EmuHawk
runFrame = true; runFrame = true;
} }
if (ClientControls["Frame Advance"] || PressFrameAdvance || HoldFrameAdvance) if (InputManager.ClientControls["Frame Advance"] || PressFrameAdvance || HoldFrameAdvance)
{ {
_runloopFrameAdvance = true; _runloopFrameAdvance = true;
@ -2887,7 +2883,7 @@ namespace BizHawk.Client.EmuHawk
if (runFrame || force) if (runFrame || force)
{ {
var isFastForwarding = ClientControls["Fast Forward"] || IsTurboing || InvisibleEmulation; var isFastForwarding = InputManager.ClientControls["Fast Forward"] || IsTurboing || InvisibleEmulation;
var isFastForwardingOrRewinding = isFastForwarding || isRewinding || _unthrottled; var isFastForwardingOrRewinding = isFastForwarding || isRewinding || _unthrottled;
if (isFastForwardingOrRewinding != _lastFastForwardingOrRewinding) if (isFastForwardingOrRewinding != _lastFastForwardingOrRewinding)
@ -2903,8 +2899,8 @@ namespace BizHawk.Client.EmuHawk
CheatList.Pulse(); CheatList.Pulse();
// zero 03-may-2014 - moved this before call to UpdateToolsBefore(), since it seems to clear the state which a lua event.framestart is going to want to alter // zero 03-may-2014 - moved this before call to UpdateToolsBefore(), since it seems to clear the state which a lua event.framestart is going to want to alter
ClickyVirtualPadController.FrameTick(); InputManager.ClickyVirtualPadController.FrameTick();
Global.ButtonOverrideAdapter.FrameTick(); Global.InputManager.ButtonOverrideAdapter.FrameTick();
if (Tools.Has<LuaConsole>() && !SuppressLua) if (Tools.Has<LuaConsole>() && !SuppressLua)
{ {
@ -2967,7 +2963,7 @@ namespace BizHawk.Client.EmuHawk
} }
bool render = !InvisibleEmulation && (!_throttle.skipNextFrame || (_currAviWriter?.UsesVideo ?? false)); bool render = !InvisibleEmulation && (!_throttle.skipNextFrame || (_currAviWriter?.UsesVideo ?? false));
bool newFrame = Emulator.FrameAdvance(Global.ControllerOutput, render, renderSound); bool newFrame = Emulator.FrameAdvance(Global.InputManager.ControllerOutput, render, renderSound);
MovieSession.HandleMovieAfterFrameLoop(); MovieSession.HandleMovieAfterFrameLoop();
@ -2985,10 +2981,10 @@ namespace BizHawk.Client.EmuHawk
if (IsLagFrame && Config.AutofireLagFrames) if (IsLagFrame && Config.AutofireLagFrames)
{ {
AutoFireController.IncrementStarts(); InputManager.AutoFireController.IncrementStarts();
} }
Global.AutofireStickyXORAdapter.IncrementLoops(IsLagFrame); Global.InputManager.AutofireStickyXorAdapter.IncrementLoops(IsLagFrame);
PressFrameAdvance = false; PressFrameAdvance = false;
@ -3045,7 +3041,7 @@ namespace BizHawk.Client.EmuHawk
} }
} }
if (ClientControls["Rewind"] || PressRewind) if (InputManager.ClientControls["Rewind"] || PressRewind)
{ {
UpdateToolsAfter(); UpdateToolsAfter();
} }
@ -3816,9 +3812,9 @@ namespace BizHawk.Client.EmuHawk
Rewinder.Initialize(); Rewinder.Initialize();
Global.StickyXORAdapter.ClearStickies(); Global.InputManager.StickyXorAdapter.ClearStickies();
Global.StickyXORAdapter.ClearStickyFloats(); Global.InputManager.StickyXorAdapter.ClearStickyFloats();
Global.AutofireStickyXORAdapter.ClearStickies(); Global.InputManager.AutofireStickyXorAdapter.ClearStickies();
RewireSound(); RewireSound();
Tools.UpdateCheatRelatedTools(null, null); Tools.UpdateCheatRelatedTools(null, null);
@ -3940,8 +3936,8 @@ namespace BizHawk.Client.EmuHawk
Emulator.Dispose(); Emulator.Dispose();
Emulator = new NullEmulator(); Emulator = new NullEmulator();
ClientApi.UpdateEmulatorAndVP(Emulator); ClientApi.UpdateEmulatorAndVP(Emulator);
Global.ActiveController = new Controller(NullController.Instance.Definition); Global.InputManager.ActiveController = new Controller(NullController.Instance.Definition);
Global.AutoFireController = _autofireNullControls; Global.InputManager.AutoFireController = _autofireNullControls;
RewireSound(); RewireSound();
RebootStatusBarIcon.Visible = false; RebootStatusBarIcon.Visible = false;
GameIsClosing = false; GameIsClosing = false;
@ -3956,7 +3952,6 @@ namespace BizHawk.Client.EmuHawk
if (Tools.AskSave()) if (Tools.AskSave())
{ {
CloseGame(clearSram); CloseGame(clearSram);
var coreComm = CreateCoreComm();
Emulator = new NullEmulator(); Emulator = new NullEmulator();
Global.Game = GameInfo.NullInstance; Global.Game = GameInfo.NullInstance;
@ -4068,7 +4063,7 @@ namespace BizHawk.Client.EmuHawk
Tools.UpdateToolsBefore(fromLua); Tools.UpdateToolsBefore(fromLua);
UpdateToolsAfter(fromLua); UpdateToolsAfter(fromLua);
UpdateToolsLoadstate(); UpdateToolsLoadstate();
AutoFireController.ClearStarts(); InputManager.AutoFireController.ClearStarts();
if (!IsRewindSlave && MovieSession.Movie.IsActive()) if (!IsRewindSlave && MovieSession.Movie.IsActive())
{ {
@ -4413,7 +4408,7 @@ namespace BizHawk.Client.EmuHawk
if (IsRewindSlave) if (IsRewindSlave)
{ {
if (ClientControls["Rewind"] || PressRewind) if (InputManager.ClientControls["Rewind"] || PressRewind)
{ {
if (_frameRewindTimestamp == 0) if (_frameRewindTimestamp == 0)
{ {
@ -4461,7 +4456,7 @@ namespace BizHawk.Client.EmuHawk
return isRewinding; return isRewinding;
} }
if (Rewinder.RewindActive && (ClientControls["Rewind"] || PressRewind)) if (Rewinder.RewindActive && (InputManager.ClientControls["Rewind"] || PressRewind))
{ {
if (EmulatorPaused) if (EmulatorPaused)
{ {

View File

@ -785,7 +785,7 @@ namespace BizHawk.Client.EmuHawk
foreach (var button in lg.Definition.BoolButtons) foreach (var button in lg.Definition.BoolButtons)
{ {
// TODO: make an input adapter specifically for the bot? // TODO: make an input adapter specifically for the bot?
Global.ButtonOverrideAdapter.SetButton(button, lg.IsPressed(button)); Global.InputManager.ButtonOverrideAdapter.SetButton(button, lg.IsPressed(button));
} }
} }
else else
@ -923,7 +923,7 @@ namespace BizHawk.Client.EmuHawk
double probability = _cachedControlProbabilities[button]; double probability = _cachedControlProbabilities[button];
bool pressed = !(rand.Next(100) < probability); bool pressed = !(rand.Next(100) < probability);
Global.ClickyVirtualPadController.SetBool(button, pressed); Global.InputManager.ClickyVirtualPadController.SetBool(button, pressed);
} }
_currentBotAttempt.Log.Add(_logGenerator.GenerateLogEntry()); _currentBotAttempt.Log.Add(_logGenerator.GenerateLogEntry());
@ -977,7 +977,7 @@ namespace BizHawk.Client.EmuHawk
MessageLabel.Text = "Running..."; MessageLabel.Text = "Running...";
_cachedControlProbabilities = ControlProbabilities; _cachedControlProbabilities = ControlProbabilities;
_logGenerator = Global.MovieSession.LogGeneratorInstance(); _logGenerator = Global.MovieSession.LogGeneratorInstance();
_logGenerator.SetSource(Global.ClickyVirtualPadController); _logGenerator.SetSource(Global.InputManager.ClickyVirtualPadController);
} }
private string CanStart() private string CanStart()

View File

@ -469,7 +469,7 @@ namespace BizHawk.Client.EmuHawk
} }
AutoPatternBool p = BoolPatterns[index]; AutoPatternBool p = BoolPatterns[index];
Global.AutofireStickyXORAdapter.SetSticky(button, isOn.Value, p); Global.InputManager.AutofireStickyXorAdapter.SetSticky(button, isOn.Value, p);
} }
else else
{ {
@ -489,7 +489,7 @@ namespace BizHawk.Client.EmuHawk
} }
AutoPatternFloat p = FloatPatterns[index]; AutoPatternFloat p = FloatPatterns[index];
Global.AutofireStickyXORAdapter.SetFloat(button, value, p); Global.InputManager.AutofireStickyXorAdapter.SetFloat(button, value, p);
} }
} }

View File

@ -811,7 +811,7 @@ namespace BizHawk.Client.EmuHawk
{ {
foreach (var column in TasView.VisibleColumns) foreach (var column in TasView.VisibleColumns)
{ {
if (Global.StickyXORAdapter.IsSticky(column.Name)) if (Global.InputManager.StickyXorAdapter.IsSticky(column.Name))
{ {
column.Emphasis = true; column.Emphasis = true;
} }

View File

@ -32,12 +32,12 @@ namespace BizHawk.Client.EmuHawk
foreach (var button in lg.Definition.BoolButtons) foreach (var button in lg.Definition.BoolButtons)
{ {
Global.ButtonOverrideAdapter.SetButton(button, lg.IsPressed(button)); Global.InputManager.ButtonOverrideAdapter.SetButton(button, lg.IsPressed(button));
} }
foreach (var floatButton in lg.Definition.FloatControls) foreach (var floatButton in lg.Definition.FloatControls)
{ {
Global.ButtonOverrideAdapter.SetFloat(floatButton, lg.GetFloat(floatButton)); Global.InputManager.ButtonOverrideAdapter.SetFloat(floatButton, lg.GetFloat(floatButton));
} }
return lg; return lg;

View File

@ -20,6 +20,8 @@ namespace BizHawk.Client.EmuHawk
[ConfigPersist] [ConfigPersist]
public bool TI83ToolTips { get; set; } = true; public bool TI83ToolTips { get; set; } = true;
private ClickyVirtualPadController ClickyVirtualPadController => Global.InputManager.ClickyVirtualPadController;
private void TI83KeyPad_Load(object sender, EventArgs e) private void TI83KeyPad_Load(object sender, EventArgs e)
{ {
if (TI83ToolTips) if (TI83ToolTips)
@ -147,252 +149,252 @@ namespace BizHawk.Client.EmuHawk
private void EnterButton_Click(object sender, EventArgs e) private void EnterButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("ENTER"); ClickyVirtualPadController.Click("ENTER");
} }
private void DashButton_Click(object sender, EventArgs e) private void DashButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("DASH"); ClickyVirtualPadController.Click("DASH");
} }
private void OneButton_Click(object sender, EventArgs e) private void OneButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("1"); ClickyVirtualPadController.Click("1");
} }
private void TwoButton_Click(object sender, EventArgs e) private void TwoButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("2"); ClickyVirtualPadController.Click("2");
} }
private void ThreeButton_Click(object sender, EventArgs e) private void ThreeButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("3"); ClickyVirtualPadController.Click("3");
} }
private void FourButton_Click(object sender, EventArgs e) private void FourButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("4"); ClickyVirtualPadController.Click("4");
} }
private void FiveButton_Click(object sender, EventArgs e) private void FiveButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("5"); ClickyVirtualPadController.Click("5");
} }
private void SixButton_Click(object sender, EventArgs e) private void SixButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("6"); ClickyVirtualPadController.Click("6");
} }
private void SevenButton_Click(object sender, EventArgs e) private void SevenButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("7"); ClickyVirtualPadController.Click("7");
} }
private void EightButton_Click(object sender, EventArgs e) private void EightButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("8"); ClickyVirtualPadController.Click("8");
} }
private void NineButton_Click(object sender, EventArgs e) private void NineButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("9"); ClickyVirtualPadController.Click("9");
} }
private void OnButton_Click(object sender, EventArgs e) private void OnButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("ON"); ClickyVirtualPadController.Click("ON");
} }
private void StoButton_Click(object sender, EventArgs e) private void StoButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("STO"); ClickyVirtualPadController.Click("STO");
} }
private void PlusButton_Click(object sender, EventArgs e) private void PlusButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("PLUS"); ClickyVirtualPadController.Click("PLUS");
} }
private void LnButton_Click(object sender, EventArgs e) private void LnButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("LN"); ClickyVirtualPadController.Click("LN");
} }
private void MinusButton_Click(object sender, EventArgs e) private void MinusButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("MINUS"); ClickyVirtualPadController.Click("MINUS");
} }
private void LogButton_Click(object sender, EventArgs e) private void LogButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("LOG"); ClickyVirtualPadController.Click("LOG");
} }
private void MultiplyButton_Click(object sender, EventArgs e) private void MultiplyButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("MULTIPLY"); ClickyVirtualPadController.Click("MULTIPLY");
} }
private void SquaredButton_Click(object sender, EventArgs e) private void SquaredButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("SQUARED"); ClickyVirtualPadController.Click("SQUARED");
} }
private void CommaButton_Click(object sender, EventArgs e) private void CommaButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("COMMA"); ClickyVirtualPadController.Click("COMMA");
} }
private void ParaOpenButton_Click(object sender, EventArgs e) private void ParaOpenButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("PARAOPEN"); ClickyVirtualPadController.Click("PARAOPEN");
} }
private void ParaCloseButton_Click(object sender, EventArgs e) private void ParaCloseButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("PARACLOSE"); ClickyVirtualPadController.Click("PARACLOSE");
} }
private void DivideButton_Click(object sender, EventArgs e) private void DivideButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("DIVIDE"); ClickyVirtualPadController.Click("DIVIDE");
} }
private void Neg1Button_Click(object sender, EventArgs e) private void Neg1Button_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("NEG1"); ClickyVirtualPadController.Click("NEG1");
} }
private void SinButton_Click(object sender, EventArgs e) private void SinButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("SIN"); ClickyVirtualPadController.Click("SIN");
} }
private void CosButton_Click(object sender, EventArgs e) private void CosButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("COS"); ClickyVirtualPadController.Click("COS");
} }
private void TanButton_Click(object sender, EventArgs e) private void TanButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("TAN"); ClickyVirtualPadController.Click("TAN");
} }
private void ExpButton_Click(object sender, EventArgs e) private void ExpButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("EXP"); ClickyVirtualPadController.Click("EXP");
} }
private void MathButton_Click(object sender, EventArgs e) private void MathButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("MATH"); ClickyVirtualPadController.Click("MATH");
} }
private void MaxtrixButton_Click(object sender, EventArgs e) private void MaxtrixButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("MATRIX"); ClickyVirtualPadController.Click("MATRIX");
} }
private void PrgmButton_Click(object sender, EventArgs e) private void PrgmButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("PRGM"); ClickyVirtualPadController.Click("PRGM");
} }
private void VarsButton_Click(object sender, EventArgs e) private void VarsButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("VARS"); ClickyVirtualPadController.Click("VARS");
} }
private void ClearButton_Click(object sender, EventArgs e) private void ClearButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("CLEAR"); ClickyVirtualPadController.Click("CLEAR");
} }
private void AlphaButton_Click(object sender, EventArgs e) private void AlphaButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("ALPHA"); ClickyVirtualPadController.Click("ALPHA");
} }
private void XButton_Click(object sender, EventArgs e) private void XButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("X"); ClickyVirtualPadController.Click("X");
} }
private void StatButton_Click(object sender, EventArgs e) private void StatButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("STAT"); ClickyVirtualPadController.Click("STAT");
} }
private void SecondButton_Click(object sender, EventArgs e) private void SecondButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("2ND"); ClickyVirtualPadController.Click("2ND");
} }
private void ModeButton_Click(object sender, EventArgs e) private void ModeButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("MODE"); ClickyVirtualPadController.Click("MODE");
} }
private void DelButton_Click(object sender, EventArgs e) private void DelButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("DEL"); ClickyVirtualPadController.Click("DEL");
} }
private void LeftButton_Click(object sender, EventArgs e) private void LeftButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("LEFT"); ClickyVirtualPadController.Click("LEFT");
} }
private void DownButton_Click(object sender, EventArgs e) private void DownButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("DOWN"); ClickyVirtualPadController.Click("DOWN");
} }
private void RightButton_Click(object sender, EventArgs e) private void RightButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("RIGHT"); ClickyVirtualPadController.Click("RIGHT");
} }
private void UpButton_Click(object sender, EventArgs e) private void UpButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("UP"); ClickyVirtualPadController.Click("UP");
} }
private void YButton_Click(object sender, EventArgs e) private void YButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("Y"); ClickyVirtualPadController.Click("Y");
} }
private void WindowButton_Click(object sender, EventArgs e) private void WindowButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("WINDOW"); ClickyVirtualPadController.Click("WINDOW");
} }
private void ZoomButton_Click(object sender, EventArgs e) private void ZoomButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("ZOOM"); ClickyVirtualPadController.Click("ZOOM");
} }
private void TraceButton_Click(object sender, EventArgs e) private void TraceButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("TRACE"); ClickyVirtualPadController.Click("TRACE");
} }
private void GraphButton_Click(object sender, EventArgs e) private void GraphButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("GRAPH"); ClickyVirtualPadController.Click("GRAPH");
} }
private void PeriodButton_Click(object sender, EventArgs e) private void PeriodButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("DOT"); ClickyVirtualPadController.Click("DOT");
} }
private void ZeroButton_Click(object sender, EventArgs e) private void ZeroButton_Click(object sender, EventArgs e)
{ {
Global.ClickyVirtualPadController.Click("0"); ClickyVirtualPadController.Click("0");
} }
#endregion #endregion

View File

@ -34,7 +34,7 @@ namespace BizHawk.Client.EmuHawk
public void UpdateValues() public void UpdateValues()
{ {
if (AnalogTrackBar.Value != (int)Global.StickyXORAdapter.GetFloat(Name)) if (AnalogTrackBar.Value != (int)Global.InputManager.StickyXorAdapter.GetFloat(Name))
{ {
RefreshWidgets(); RefreshWidgets();
} }
@ -42,7 +42,7 @@ namespace BizHawk.Client.EmuHawk
public void Clear() public void Clear()
{ {
Global.StickyXORAdapter.Unset(Name); Global.InputManager.StickyXorAdapter.Unset(Name);
IsSet = false; IsSet = false;
} }
@ -217,7 +217,7 @@ namespace BizHawk.Client.EmuHawk
if (!_programmaticallyChangingValue) if (!_programmaticallyChangingValue)
{ {
CurrentValue = AnalogTrackBar.Value; CurrentValue = AnalogTrackBar.Value;
Global.StickyXORAdapter.SetFloat(Name, AnalogTrackBar.Value); Global.InputManager.StickyXorAdapter.SetFloat(Name, AnalogTrackBar.Value);
} }
} }
@ -226,7 +226,7 @@ namespace BizHawk.Client.EmuHawk
if (!_isSet) if (!_isSet)
{ {
_programmaticallyChangingValue = true; _programmaticallyChangingValue = true;
AnalogTrackBar.Value = (int)Global.StickyXORAdapter.GetFloat(Name); AnalogTrackBar.Value = (int)Global.InputManager.StickyXorAdapter.GetFloat(Name);
ValueLabel.Text = AnalogTrackBar.Value.ToString(); ValueLabel.Text = AnalogTrackBar.Value.ToString();
_programmaticallyChangingValue = false; _programmaticallyChangingValue = false;
} }

View File

@ -78,10 +78,10 @@ namespace BizHawk.Client.EmuHawk
manualR.Value = 0; manualR.Value = 0;
manualTheta.Value = 0; manualTheta.Value = 0;
//see HOOMOO //see HOOMOO
Global.AutofireStickyXORAdapter.SetSticky(AnalogStick.XName, false); Global.InputManager.AutofireStickyXorAdapter.SetSticky(AnalogStick.XName, false);
Global.StickyXORAdapter.Unset(AnalogStick.XName); Global.InputManager.StickyXorAdapter.Unset(AnalogStick.XName);
Global.AutofireStickyXORAdapter.SetSticky(AnalogStick.YName, false); Global.InputManager.AutofireStickyXorAdapter.SetSticky(AnalogStick.YName, false);
Global.StickyXORAdapter.Unset(AnalogStick.YName); Global.InputManager.StickyXorAdapter.Unset(AnalogStick.YName);
AnalogStick.HasValue = false; AnalogStick.HasValue = false;
} }

View File

@ -32,8 +32,8 @@ namespace BizHawk.Client.EmuHawk
RightClicked = false; RightClicked = false;
Checked = false; Checked = false;
//HOOMOO //HOOMOO
Global.AutofireStickyXORAdapter.SetSticky(Name, false); Global.InputManager.AutofireStickyXorAdapter.SetSticky(Name, false);
Global.StickyXORAdapter.SetSticky(Name, false); Global.InputManager.StickyXorAdapter.SetSticky(Name, false);
} }
} }
@ -136,7 +136,7 @@ namespace BizHawk.Client.EmuHawk
{ {
if (RightClicked) if (RightClicked)
{ {
Global.AutofireStickyXORAdapter.SetSticky(Name, Checked); Global.InputManager.AutofireStickyXorAdapter.SetSticky(Name, Checked);
if (Checked == false) if (Checked == false)
{ {
@ -145,7 +145,7 @@ namespace BizHawk.Client.EmuHawk
} }
else else
{ {
Global.StickyXORAdapter.SetSticky(Name, Checked); Global.InputManager.StickyXorAdapter.SetSticky(Name, Checked);
if (Checked == false) if (Checked == false)
{ {

View File

@ -140,11 +140,11 @@ namespace BizHawk.Client.EmuHawk
{ {
#if false // not a valid way to fight unselection, it results in craptons of ping-ponging logic and eventual malfunction #if false // not a valid way to fight unselection, it results in craptons of ping-ponging logic and eventual malfunction
if (lvDiscs.SelectedIndices.Count == 0) lvDiscs.SelectedIndices.Add(0); if (lvDiscs.SelectedIndices.Count == 0) lvDiscs.SelectedIndices.Add(0);
Global.StickyXORAdapter.SetFloat(_discSelectName, lvDiscs.SelectedIndices[0]); Global.InputManager.StickyXORAdapter.SetFloat(_discSelectName, lvDiscs.SelectedIndices[0]);
#endif #endif
//emergency measure: if no selection, set no disc //emergency measure: if no selection, set no disc
Global.StickyXORAdapter.SetFloat(_discSelectName, lvDiscs.SelectedIndices.Count == 0 ? 0 : lvDiscs.SelectedIndices[0]); Global.InputManager.StickyXorAdapter.SetFloat(_discSelectName, lvDiscs.SelectedIndices.Count == 0 ? 0 : lvDiscs.SelectedIndices[0]);
} }
private void btnClose_Click(object sender, EventArgs e) private void btnClose_Click(object sender, EventArgs e)

View File

@ -41,8 +41,8 @@ namespace BizHawk.Client.EmuHawk
public void Clear() public void Clear()
{ {
Global.StickyXORAdapter.Unset(XName); Global.InputManager.StickyXorAdapter.Unset(XName);
Global.StickyXORAdapter.Unset(YName); Global.InputManager.StickyXorAdapter.Unset(YName);
_overrideX = null; _overrideX = null;
_overrideY = null; _overrideY = null;
_isSet = false; _isSet = false;
@ -164,7 +164,7 @@ namespace BizHawk.Client.EmuHawk
public int X public int X
{ {
get => _overrideX ?? (int)(Global.StickyXORAdapter.GetFloat(XName) / MultiplierX); get => _overrideX ?? (int)(Global.InputManager.StickyXorAdapter.GetFloat(XName) / MultiplierX);
set set
{ {
if (value < 0) if (value < 0)
@ -181,13 +181,13 @@ namespace BizHawk.Client.EmuHawk
XNumeric.Value = XNumeric.Maximum; XNumeric.Value = XNumeric.Maximum;
} }
Global.StickyXORAdapter.SetFloat(XName, (int)((float)XNumeric.Value * MultiplierX)); Global.InputManager.StickyXorAdapter.SetFloat(XName, (int)((float)XNumeric.Value * MultiplierX));
_isSet = true; _isSet = true;
} }
} }
public int Y public int Y
{ {
get => _overrideY ?? (int)(Global.StickyXORAdapter.GetFloat(YName) / MultiplierY); get => _overrideY ?? (int)(Global.InputManager.StickyXorAdapter.GetFloat(YName) / MultiplierY);
set set
{ {
if (value < 0) if (value < 0)
@ -203,7 +203,7 @@ namespace BizHawk.Client.EmuHawk
YNumeric.Value = YNumeric.Maximum; YNumeric.Value = YNumeric.Maximum;
} }
Global.StickyXORAdapter.SetFloat(YName, (int)((float)YNumeric.Value * MultiplierY)); Global.InputManager.StickyXorAdapter.SetFloat(YName, (int)((float)YNumeric.Value * MultiplierY));
_isSet = true; _isSet = true;
} }
} }

View File

@ -164,8 +164,8 @@ namespace BizHawk.Client.EmuHawk
private void SetAnalog() private void SetAnalog()
{ {
Global.StickyXORAdapter.SetFloat(XName, HasValue ? X : (int?)null); Global.InputManager.StickyXorAdapter.SetFloat(XName, HasValue ? X : (int?)null);
Global.StickyXORAdapter.SetFloat(YName, HasValue ? Y : (int?)null); Global.InputManager.StickyXorAdapter.SetFloat(YName, HasValue ? Y : (int?)null);
Refresh(); Refresh();
} }