Allow ApiManager to pass some extra globals to the 5 EmuHawk APIs
This commit is contained in:
parent
d2e20a7a1e
commit
52cc0050b8
|
@ -12,7 +12,9 @@ namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
public static class ApiManager
|
public static class ApiManager
|
||||||
{
|
{
|
||||||
private static readonly Type[] CtorParamTypes = { typeof(Action<string>) };
|
private static readonly Type[] CtorParamTypesA = { typeof(Action<string>), typeof(DisplayManager), typeof(InputManager), typeof(MainForm) };
|
||||||
|
|
||||||
|
private static readonly Type[] CtorParamTypesB = { typeof(Action<string>) };
|
||||||
|
|
||||||
/// <remarks>TODO do we need to keep references to these because of GC weirdness? --yoshi</remarks>
|
/// <remarks>TODO do we need to keep references to these because of GC weirdness? --yoshi</remarks>
|
||||||
private static ApiContainer? _container;
|
private static ApiContainer? _container;
|
||||||
|
@ -21,7 +23,6 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
private static ApiContainer Register(IEmulatorServiceProvider serviceProvider, Action<string> logCallback)
|
private static ApiContainer Register(IEmulatorServiceProvider serviceProvider, Action<string> logCallback)
|
||||||
{
|
{
|
||||||
var ctorParamTypes = CtorParamTypes;
|
|
||||||
var libDict = new Dictionary<Type, IExternalApi>();
|
var libDict = new Dictionary<Type, IExternalApi>();
|
||||||
foreach (var api in Assembly.GetAssembly(typeof(ApiSubsetContainer)).GetTypes()
|
foreach (var api in Assembly.GetAssembly(typeof(ApiSubsetContainer)).GetTypes()
|
||||||
.Concat(Assembly.GetAssembly(typeof(ApiContainer)).GetTypes())
|
.Concat(Assembly.GetAssembly(typeof(ApiContainer)).GetTypes())
|
||||||
|
@ -29,7 +30,8 @@ namespace BizHawk.Client.EmuHawk
|
||||||
&& typeof(IExternalApi).IsAssignableFrom(t)
|
&& typeof(IExternalApi).IsAssignableFrom(t)
|
||||||
&& ServiceInjector.IsAvailable(serviceProvider, t)))
|
&& ServiceInjector.IsAvailable(serviceProvider, t)))
|
||||||
{
|
{
|
||||||
var instance = api.GetConstructor(ctorParamTypes)?.Invoke(new object[] { logCallback })
|
var instance = api.GetConstructor(CtorParamTypesA)?.Invoke(new object[] { logCallback, GlobalWin.DisplayManager, GlobalWin.InputManager, GlobalWin.MainForm })
|
||||||
|
?? api.GetConstructor(CtorParamTypesB)?.Invoke(new object[] { logCallback })
|
||||||
?? Activator.CreateInstance(api);
|
?? Activator.CreateInstance(api);
|
||||||
ServiceInjector.UpdateServices(serviceProvider, instance);
|
ServiceInjector.UpdateServices(serviceProvider, instance);
|
||||||
libDict.Add(
|
libDict.Add(
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using System.Collections.Generic;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
@ -8,10 +9,23 @@ namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
public sealed class InputApi : IInput
|
public sealed class InputApi : IInput
|
||||||
{
|
{
|
||||||
|
private readonly DisplayManager _displayManager;
|
||||||
|
|
||||||
|
private readonly InputManager _inputManager;
|
||||||
|
|
||||||
|
private readonly MainForm _mainForm;
|
||||||
|
|
||||||
|
public InputApi(Action<string> logCallback, DisplayManager displayManager, InputManager inputManager, MainForm mainForm)
|
||||||
|
{
|
||||||
|
_displayManager = displayManager;
|
||||||
|
_inputManager = inputManager;
|
||||||
|
_mainForm = mainForm;
|
||||||
|
}
|
||||||
|
|
||||||
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 GlobalWin.InputManager.ControllerInputCoalescer.BoolButtons().Where(kvp => kvp.Value)) buttons[kvp.Key] = true;
|
foreach (var kvp in _inputManager.ControllerInputCoalescer.BoolButtons().Where(kvp => kvp.Value)) buttons[kvp.Key] = true;
|
||||||
return buttons;
|
return buttons;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +33,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
var buttons = new Dictionary<string, object>();
|
var buttons = new Dictionary<string, object>();
|
||||||
// TODO - need to specify whether in "emu" or "native" coordinate space.
|
// TODO - need to specify whether in "emu" or "native" coordinate space.
|
||||||
var p = GlobalWin.DisplayManager.UntransformPoint(Control.MousePosition);
|
var p = _displayManager.UntransformPoint(Control.MousePosition);
|
||||||
buttons["X"] = p.X;
|
buttons["X"] = p.X;
|
||||||
buttons["Y"] = p.Y;
|
buttons["Y"] = p.Y;
|
||||||
buttons[MouseButtons.Left.ToString()] = (Control.MouseButtons & MouseButtons.Left) != 0;
|
buttons[MouseButtons.Left.ToString()] = (Control.MouseButtons & MouseButtons.Left) != 0;
|
||||||
|
@ -27,7 +41,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
buttons[MouseButtons.Right.ToString()] = (Control.MouseButtons & MouseButtons.Right) != 0;
|
buttons[MouseButtons.Right.ToString()] = (Control.MouseButtons & MouseButtons.Right) != 0;
|
||||||
buttons[MouseButtons.XButton1.ToString()] = (Control.MouseButtons & MouseButtons.XButton1) != 0;
|
buttons[MouseButtons.XButton1.ToString()] = (Control.MouseButtons & MouseButtons.XButton1) != 0;
|
||||||
buttons[MouseButtons.XButton2.ToString()] = (Control.MouseButtons & MouseButtons.XButton2) != 0;
|
buttons[MouseButtons.XButton2.ToString()] = (Control.MouseButtons & MouseButtons.XButton2) != 0;
|
||||||
buttons["Wheel"] = GlobalWin.MainForm.MouseWheelTracker;
|
buttons["Wheel"] = _mainForm.MouseWheelTracker;
|
||||||
return buttons;
|
return buttons;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,15 +8,16 @@ namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
public sealed class SaveStateApi : ISaveState
|
public sealed class SaveStateApi : ISaveState
|
||||||
{
|
{
|
||||||
public SaveStateApi(Action<string> logCallback)
|
private readonly MainForm _mainForm;
|
||||||
{
|
|
||||||
LogCallback = logCallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
public SaveStateApi() : this(Console.WriteLine) {}
|
|
||||||
|
|
||||||
private readonly Action<string> LogCallback;
|
private readonly Action<string> LogCallback;
|
||||||
|
|
||||||
|
public SaveStateApi(Action<string> logCallback, DisplayManager displayManager, InputManager inputManager, MainForm mainForm)
|
||||||
|
{
|
||||||
|
LogCallback = logCallback;
|
||||||
|
_mainForm = mainForm;
|
||||||
|
}
|
||||||
|
|
||||||
public void Load(string path, bool suppressOSD)
|
public void Load(string path, bool suppressOSD)
|
||||||
{
|
{
|
||||||
if (!File.Exists(path))
|
if (!File.Exists(path))
|
||||||
|
@ -25,19 +26,19 @@ namespace BizHawk.Client.EmuHawk
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
GlobalWin.MainForm.LoadState(path, Path.GetFileName(path), suppressOSD);
|
_mainForm.LoadState(path, Path.GetFileName(path), suppressOSD);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadSlot(int slotNum, bool suppressOSD)
|
public void LoadSlot(int slotNum, bool suppressOSD)
|
||||||
{
|
{
|
||||||
if (0.RangeTo(9).Contains(slotNum)) GlobalWin.MainForm.LoadQuickSave($"QuickSave{slotNum}", suppressOSD);
|
if (0.RangeTo(9).Contains(slotNum)) _mainForm.LoadQuickSave($"QuickSave{slotNum}", suppressOSD);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Save(string path, bool suppressOSD) => GlobalWin.MainForm.SaveState(path, path, true, suppressOSD);
|
public void Save(string path, bool suppressOSD) => _mainForm.SaveState(path, path, true, suppressOSD);
|
||||||
|
|
||||||
public void SaveSlot(int slotNum, bool suppressOSD)
|
public void SaveSlot(int slotNum, bool suppressOSD)
|
||||||
{
|
{
|
||||||
if (0.RangeTo(9).Contains(slotNum)) GlobalWin.MainForm.SaveQuickSave($"QuickSave{slotNum}", true, suppressOSD);
|
if (0.RangeTo(9).Contains(slotNum)) _mainForm.SaveQuickSave($"QuickSave{slotNum}", true, suppressOSD);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue