Convert abstract class LuaLibraries to an interface

This commit is contained in:
YoshiRulz 2020-12-05 07:05:07 +10:00
parent e42a021215
commit ce7aa1ff64
No known key found for this signature in database
GPG Key ID: C4DE31C245353FB7
29 changed files with 100 additions and 85 deletions

View File

@ -26,7 +26,7 @@ namespace BizHawk.Client.Common
public IMainFormForApi MainForm { get; set; }
public ClientLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
public ClientLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
: base(luaLibsImpl, apiContainer, logOutputCallback) {}
public override string Name => "client";

View File

@ -10,7 +10,7 @@ namespace BizHawk.Client.Common
{
private readonly IDictionary<Guid, ClientWebSocketWrapper> _websockets = new Dictionary<Guid, ClientWebSocketWrapper>();
public CommLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
public CommLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
: base(luaLibsImpl, apiContainer, logOutputCallback) {}
public override string Name => "comm";

View File

@ -13,7 +13,7 @@ namespace BizHawk.Client.Common
public Action FrameAdvanceCallback { get; set; }
public Action YieldCallback { get; set; }
public EmulationLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
public EmulationLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
: base(luaLibsImpl, apiContainer, logOutputCallback) {}
public override string Name => "emu";

View File

@ -7,7 +7,7 @@ namespace BizHawk.Client.Common
{
public sealed class GameInfoLuaLibrary : LuaLibraryBase
{
public GameInfoLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
public GameInfoLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
: base(luaLibsImpl, apiContainer, logOutputCallback) {}
public override string Name => "gameinfo";

View File

@ -10,7 +10,7 @@ namespace BizHawk.Client.Common
{
public Func<int, int, int?, int?, LuaTable> CreateLuaCanvasCallback { get; set; }
public GuiLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
public GuiLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
: base(luaLibsImpl, apiContainer, logOutputCallback) {}
public override string Name => "gui";

View File

@ -6,7 +6,7 @@ namespace BizHawk.Client.Common
{
public sealed class InputLuaLibrary : LuaLibraryBase
{
public InputLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
public InputLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
: base(luaLibsImpl, apiContainer, logOutputCallback) {}
public override string Name => "input";

View File

@ -8,7 +8,7 @@ namespace BizHawk.Client.Common
{
public sealed class JoypadLuaLibrary : LuaLibraryBase
{
public JoypadLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
public JoypadLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
: base(luaLibsImpl, apiContainer, logOutputCallback) {}
public override string Name => "joypad";

View File

@ -9,7 +9,7 @@ namespace BizHawk.Client.Common
[Description("These functions behavior identically to the mainmemory functions but the user can set the memory domain to read and write from. The default domain is the system bus. Use getcurrentmemorydomain(), and usememorydomain() to control which domain is used. Each core has its own set of valid memory domains. Use getmemorydomainlist() to get a list of memory domains for the current core loaded.")]
public sealed class MemoryLuaLibrary : LuaLibraryBase
{
public MemoryLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
public MemoryLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
: base(luaLibsImpl, apiContainer, logOutputCallback) {}
public override string Name => "memory";

View File

@ -6,7 +6,7 @@ namespace BizHawk.Client.Common
{
public sealed class MemorySavestateLuaLibrary : LuaLibraryBase
{
public MemorySavestateLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
public MemorySavestateLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
: base(luaLibsImpl, apiContainer, logOutputCallback) {}
public override string Name => "memorysavestate";

View File

@ -7,7 +7,7 @@ namespace BizHawk.Client.Common
{
public sealed class MovieLuaLibrary : LuaLibraryBase
{
public MovieLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
public MovieLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
: base(luaLibsImpl, apiContainer, logOutputCallback) {}
public override string Name => "movie";

View File

@ -8,7 +8,7 @@ namespace BizHawk.Client.Common
[Description("A library for performing SQLite operations.")]
public sealed class SQLiteLuaLibrary : LuaLibraryBase
{
public SQLiteLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
public SQLiteLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
: base(luaLibsImpl, apiContainer, logOutputCallback) {}
public override string Name => "SQL";

View File

@ -4,7 +4,7 @@ namespace BizHawk.Client.Common
{
public sealed class SaveStateLuaLibrary : LuaLibraryBase
{
public SaveStateLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
public SaveStateLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
: base(luaLibsImpl, apiContainer, logOutputCallback) {}
public override string Name => "savestate";

View File

@ -7,7 +7,7 @@ namespace BizHawk.Client.Common
[Description("A library for setting and retrieving dynamic data that will be saved and loaded with savestates")]
public sealed class UserDataLuaLibrary : LuaLibraryBase
{
public UserDataLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
public UserDataLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
: base(luaLibsImpl, apiContainer, logOutputCallback) {}
public override string Name => "userdata";

View File

@ -0,0 +1,34 @@
using System;
using NLua;
namespace BizHawk.Client.Common
{
public interface IPlatformLuaLibEnv
{
LuaDocumentation Docs { get; }
string EngineName { get; }
/// <remarks>pretty hacky... we don't want a lua script to be able to restart itself by rebooting the core</remarks>
bool IsRebootingCore { get; set; }
bool IsUpdateSupressed { get; set; }
LuaFunctionList RegisteredFunctions { get; }
LuaFileList ScriptList { get; }
void CallLoadStateEvent(string name);
void CallSaveStateEvent(string name);
INamedLuaFunction CreateAndRegisterNamedFunction(LuaFunction function, string theEvent, Action<string> logCallback, LuaFile luaFile, string name = null);
NLuaTableHelper GetTableHelper();
bool RemoveNamedFunctionMatching(Func<INamedLuaFunction, bool> predicate);
void SpawnAndSetFileThread(string pathToLoad, LuaFile lf);
}
}

View File

@ -7,7 +7,7 @@ namespace BizHawk.Client.Common
[Description("A library for performing standard bitwise operations.")]
public sealed class BitLuaLibrary : LuaLibraryBase
{
public BitLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
public BitLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
: base(luaLibsImpl, apiContainer, logOutputCallback) {}
public override string Name => "bit";

View File

@ -24,7 +24,7 @@ namespace BizHawk.Client.Common
[OptionalService]
private IMemoryDomains Domains { get; set; }
public EventsLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
public EventsLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
: base(luaLibsImpl, apiContainer, logOutputCallback) {}
public override string Name => "event";

View File

@ -10,7 +10,7 @@ namespace BizHawk.Client.Common
[Description("Functions specific to GenesisHawk (functions may not run when an Genesis game is not loaded)")]
public sealed class GenesisLuaLibrary : LuaLibraryBase
{
public GenesisLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
public GenesisLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
: base(luaLibsImpl, apiContainer, logOutputCallback) {}
public override string Name => "genesis";

View File

@ -17,7 +17,7 @@ namespace BizHawk.Client.Common
[OptionalService]
private IMemoryDomains MemoryDomainCore { get; set; }
public MainMemoryLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
public MainMemoryLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
: base(luaLibsImpl, apiContainer, logOutputCallback) {}
public override string Name => "mainmemory";

View File

@ -19,7 +19,7 @@ namespace BizHawk.Client.Common
[OptionalService]
private IMemoryDomains MemoryDomains { get; set; }
public NESLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
public NESLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
: base(luaLibsImpl, apiContainer, logOutputCallback) {}
public override string Name => "nes";

View File

@ -10,7 +10,7 @@ namespace BizHawk.Client.Common
[Description("Functions specific to SNESHawk (functions may not run when an SNES game is not loaded)")]
public sealed class SNESLuaLibrary : LuaLibraryBase
{
public SNESLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
public SNESLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
: base(luaLibsImpl, apiContainer, logOutputCallback) {}
public override string Name => "snes";

View File

@ -11,7 +11,7 @@ namespace BizHawk.Client.Common
{
public override string Name => "bizstring";
public StringLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
public StringLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
: base(luaLibsImpl, apiContainer, logOutputCallback) {}
[LuaMethodExample("local stbizhex = bizstring.hex( -12345 );")]

View File

@ -1,31 +0,0 @@
using System;
using NLua;
namespace BizHawk.Client.Common
{
public abstract class LuaLibraries
{
public readonly LuaDocumentation Docs = new LuaDocumentation();
public abstract string EngineName { get; }
public abstract LuaFunctionList RegisteredFunctions { get; }
public readonly LuaFileList ScriptList = new LuaFileList();
public bool IsRebootingCore { get; set; } // pretty hacky.. we don't want a lua script to be able to restart itself by rebooting the core
public bool IsUpdateSupressed { get; set; }
public abstract void CallLoadStateEvent(string name);
public abstract void CallSaveStateEvent(string name);
public abstract INamedLuaFunction CreateAndRegisterNamedFunction(LuaFunction function, string theEvent, Action<string> logCallback, LuaFile luaFile, string name = null);
public abstract NLuaTableHelper GetTableHelper();
public abstract bool RemoveNamedFunctionMatching(Func<INamedLuaFunction, bool> predicate);
public abstract void SpawnAndSetFileThread(string pathToLoad, LuaFile lf);
}
}

View File

@ -6,7 +6,7 @@ namespace BizHawk.Client.Common
{
public abstract class LuaLibraryBase
{
protected LuaLibraryBase(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
protected LuaLibraryBase(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
{
LogOutputCallback = logOutputCallback;
_luaLibsImpl = luaLibsImpl;
@ -25,7 +25,7 @@ namespace BizHawk.Client.Common
protected readonly Action<string> LogOutputCallback;
protected readonly LuaLibraries _luaLibsImpl;
protected readonly IPlatformLuaLibEnv _luaLibsImpl;
protected readonly NLuaTableHelper _th;

View File

@ -11,7 +11,7 @@ namespace BizHawk.Client.EmuHawk
{
public ToolManager Tools { get; set; }
public ConsoleLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
public ConsoleLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
: base(luaLibsImpl, apiContainer, logOutputCallback) {}
public override string Name => "console";

View File

@ -14,7 +14,7 @@ namespace BizHawk.Client.EmuHawk
[Description("A library for creating and managing custom dialogs")]
public sealed class FormsLuaLibrary : LuaLibraryBase
{
public FormsLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
public FormsLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
: base(luaLibsImpl, apiContainer, logOutputCallback) {}
public override string Name => "forms";

View File

@ -18,7 +18,7 @@ namespace BizHawk.Client.EmuHawk
{
public ToolManager Tools { get; set; }
public TAStudioLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
public TAStudioLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action<string> logOutputCallback)
: base(luaLibsImpl, apiContainer, logOutputCallback) {}
public override string Name => "tastudio";

View File

@ -156,7 +156,7 @@ namespace BizHawk.Client.EmuHawk
_defaultSplitDistance = splitContainer1.SplitterDistance;
}
public LuaLibraries LuaImp { get; private set; }
public IPlatformLuaLibEnv LuaImp { get; private set; }
private IEnumerable<LuaFile> SelectedItems => LuaListView.SelectedRows.Select(index => LuaImp.ScriptList[index]);

View File

@ -9,28 +9,32 @@ namespace BizHawk.Client.EmuHawk
/// <summary>
/// Methods intentionally blank.
/// </summary>
public sealed class UnixLuaLibraries : LuaLibraries
public sealed class UnixLuaLibraries : IPlatformLuaLibEnv
{
public override string EngineName => null;
public override void CallLoadStateEvent(string name)
{
}
public override void CallSaveStateEvent(string name)
{
}
public override INamedLuaFunction CreateAndRegisterNamedFunction(LuaFunction function, string theEvent, Action<string> logCallback, LuaFile luaFile, string name = null) => null;
public override NLuaTableHelper GetTableHelper() => null;
private static readonly LuaFunctionList EmptyLuaFunList = new LuaFunctionList();
public override LuaFunctionList RegisteredFunctions => EmptyLuaFunList;
public override bool RemoveNamedFunctionMatching(Func<INamedLuaFunction, bool> predicate) => false;
public LuaDocumentation Docs { get; } = new LuaDocumentation();
public override void SpawnAndSetFileThread(string pathToLoad, LuaFile lf)
{
}
public string EngineName => null;
public bool IsRebootingCore { get; set; }
public bool IsUpdateSupressed { get; set; }
public LuaFunctionList RegisteredFunctions => EmptyLuaFunList;
public LuaFileList ScriptList { get; } = new LuaFileList();
public void CallLoadStateEvent(string name) {}
public void CallSaveStateEvent(string name) {}
public INamedLuaFunction CreateAndRegisterNamedFunction(LuaFunction function, string theEvent, Action<string> logCallback, LuaFile luaFile, string name = null) => null;
public NLuaTableHelper GetTableHelper() => null;
public bool RemoveNamedFunctionMatching(Func<INamedLuaFunction, bool> predicate) => false;
public void SpawnAndSetFileThread(string pathToLoad, LuaFile lf) {}
}
}

View File

@ -13,7 +13,7 @@ using BizHawk.Client.Common;
namespace BizHawk.Client.EmuHawk
{
public class Win32LuaLibraries : LuaLibraries
public class Win32LuaLibraries : IPlatformLuaLibEnv
{
public Win32LuaLibraries(
IEmulatorServiceProvider serviceProvider,
@ -115,19 +115,27 @@ namespace BizHawk.Client.EmuHawk
private EventsLuaLibrary EventsLibrary => (EventsLuaLibrary)Libraries[typeof(EventsLuaLibrary)];
public LuaDocumentation Docs { get; } = new LuaDocumentation();
private EmulationLuaLibrary EmulationLuaLibrary => (EmulationLuaLibrary)Libraries[typeof(EmulationLuaLibrary)];
public override string EngineName => Lua.WhichLua;
public string EngineName => Lua.WhichLua;
public GuiLuaLibrary GuiLibrary => (GuiLuaLibrary) Libraries[typeof(GuiLuaLibrary)];
public bool IsRebootingCore { get; set; }
public bool IsUpdateSupressed { get; set; }
private readonly IDictionary<Type, LuaLibraryBase> Libraries = new Dictionary<Type, LuaLibraryBase>();
private EventWaitHandle LuaWait;
public LuaFileList ScriptList { get; } = new LuaFileList();
private static void LogToLuaConsole(object outputs) => _logToLuaConsoleCallback(new[] { outputs });
public override NLuaTableHelper GetTableHelper() => _th;
public NLuaTableHelper GetTableHelper() => _th;
public void Restart(IEmulatorServiceProvider newServiceProvider)
{
@ -155,9 +163,9 @@ namespace BizHawk.Client.EmuHawk
public bool FrameAdvanceRequested { get; private set; }
public override LuaFunctionList RegisteredFunctions { get; } = new LuaFunctionList();
public LuaFunctionList RegisteredFunctions { get; } = new LuaFunctionList();
public override void CallSaveStateEvent(string name)
public void CallSaveStateEvent(string name)
{
try
{
@ -172,7 +180,7 @@ namespace BizHawk.Client.EmuHawk
}
}
public override void CallLoadStateEvent(string name)
public void CallLoadStateEvent(string name)
{
try
{
@ -237,14 +245,14 @@ namespace BizHawk.Client.EmuHawk
GuiLibrary.Dispose();
}
public override INamedLuaFunction CreateAndRegisterNamedFunction(LuaFunction function, string theEvent, Action<string> logCallback, LuaFile luaFile, string name = null)
public INamedLuaFunction CreateAndRegisterNamedFunction(LuaFunction function, string theEvent, Action<string> logCallback, LuaFile luaFile, string name = null)
{
var nlf = new NamedLuaFunction(function, theEvent, logCallback, luaFile, name);
RegisteredFunctions.Add(nlf);
return nlf;
}
public override bool RemoveNamedFunctionMatching(Func<INamedLuaFunction, bool> predicate)
public bool RemoveNamedFunctionMatching(Func<INamedLuaFunction, bool> predicate)
{
var nlf = (NamedLuaFunction) RegisteredFunctions.FirstOrDefault(predicate);
if (nlf == null) return false;
@ -267,7 +275,7 @@ namespace BizHawk.Client.EmuHawk
return lua;
}
public override void SpawnAndSetFileThread(string pathToLoad, LuaFile lf)
public void SpawnAndSetFileThread(string pathToLoad, LuaFile lf)
{
lf.Thread = SpawnCoroutine(pathToLoad);
}