From ce7aa1ff641ab9397eb303758cf88120b1c292a6 Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Sat, 5 Dec 2020 07:05:07 +1000 Subject: [PATCH] Convert abstract class LuaLibraries to an interface --- .../lua/CommonLibs/ClientLuaLibrary.cs | 2 +- .../lua/CommonLibs/CommLuaLibrary.cs | 2 +- .../lua/CommonLibs/EmulationLuaLibrary.cs | 2 +- .../lua/CommonLibs/GameInfoLuaLibrary.cs | 2 +- .../lua/CommonLibs/GuiLuaLibrary.cs | 2 +- .../lua/CommonLibs/InputLuaLibrary.cs | 2 +- .../lua/CommonLibs/JoypadLuaLibrary.cs | 2 +- .../lua/CommonLibs/MemoryLuaLibrary.cs | 2 +- .../CommonLibs/MemorySavestateLuaLibrary.cs | 2 +- .../lua/CommonLibs/MovieLuaLibrary.cs | 2 +- .../lua/CommonLibs/SQLiteLuaLibrary.cs | 2 +- .../lua/CommonLibs/SaveStateLuaLibrary.cs | 2 +- .../lua/CommonLibs/UserDataLuaLibrary.cs | 2 +- .../lua/IPlatformLuaLibEnv.cs | 34 +++++++++++++++ .../lua/LuaHelperLibs/BitLuaLibrary.cs | 2 +- .../lua/LuaHelperLibs/EventsLuaLibrary.cs | 2 +- .../lua/LuaHelperLibs/GenesisLuaLibrary.cs | 2 +- .../lua/LuaHelperLibs/MainMemoryLuaLibrary.cs | 2 +- .../lua/LuaHelperLibs/NESLuaLibrary.cs | 2 +- .../lua/LuaHelperLibs/SNESLuaLibrary.cs | 2 +- .../lua/LuaHelperLibs/StringLuaLibrary.cs | 2 +- src/BizHawk.Client.Common/lua/LuaLibraries.cs | 31 -------------- .../lua/LuaLibraryBase.cs | 4 +- .../tools/Lua/Libraries/ConsoleLuaLibrary.cs | 2 +- .../tools/Lua/Libraries/FormsLuaLibrary.cs | 2 +- .../tools/Lua/Libraries/TAStudioLuaLibrary.cs | 2 +- .../tools/Lua/LuaConsole.cs | 2 +- .../tools/Lua/UnixLuaLibraries.cs | 42 ++++++++++--------- .../tools/Lua/Win32LuaLibraries.cs | 26 ++++++++---- 29 files changed, 100 insertions(+), 85 deletions(-) create mode 100644 src/BizHawk.Client.Common/lua/IPlatformLuaLibEnv.cs delete mode 100644 src/BizHawk.Client.Common/lua/LuaLibraries.cs diff --git a/src/BizHawk.Client.Common/lua/CommonLibs/ClientLuaLibrary.cs b/src/BizHawk.Client.Common/lua/CommonLibs/ClientLuaLibrary.cs index 6b57320eeb..47a6fabb8f 100644 --- a/src/BizHawk.Client.Common/lua/CommonLibs/ClientLuaLibrary.cs +++ b/src/BizHawk.Client.Common/lua/CommonLibs/ClientLuaLibrary.cs @@ -26,7 +26,7 @@ namespace BizHawk.Client.Common public IMainFormForApi MainForm { get; set; } - public ClientLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) + public ClientLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) : base(luaLibsImpl, apiContainer, logOutputCallback) {} public override string Name => "client"; diff --git a/src/BizHawk.Client.Common/lua/CommonLibs/CommLuaLibrary.cs b/src/BizHawk.Client.Common/lua/CommonLibs/CommLuaLibrary.cs index ce605cb614..d81d9767b6 100644 --- a/src/BizHawk.Client.Common/lua/CommonLibs/CommLuaLibrary.cs +++ b/src/BizHawk.Client.Common/lua/CommonLibs/CommLuaLibrary.cs @@ -10,7 +10,7 @@ namespace BizHawk.Client.Common { private readonly IDictionary _websockets = new Dictionary(); - public CommLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) + public CommLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) : base(luaLibsImpl, apiContainer, logOutputCallback) {} public override string Name => "comm"; diff --git a/src/BizHawk.Client.Common/lua/CommonLibs/EmulationLuaLibrary.cs b/src/BizHawk.Client.Common/lua/CommonLibs/EmulationLuaLibrary.cs index 367da6fb38..20b5fabe14 100644 --- a/src/BizHawk.Client.Common/lua/CommonLibs/EmulationLuaLibrary.cs +++ b/src/BizHawk.Client.Common/lua/CommonLibs/EmulationLuaLibrary.cs @@ -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 logOutputCallback) + public EmulationLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) : base(luaLibsImpl, apiContainer, logOutputCallback) {} public override string Name => "emu"; diff --git a/src/BizHawk.Client.Common/lua/CommonLibs/GameInfoLuaLibrary.cs b/src/BizHawk.Client.Common/lua/CommonLibs/GameInfoLuaLibrary.cs index ab3988bb5c..b02a0110d4 100644 --- a/src/BizHawk.Client.Common/lua/CommonLibs/GameInfoLuaLibrary.cs +++ b/src/BizHawk.Client.Common/lua/CommonLibs/GameInfoLuaLibrary.cs @@ -7,7 +7,7 @@ namespace BizHawk.Client.Common { public sealed class GameInfoLuaLibrary : LuaLibraryBase { - public GameInfoLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) + public GameInfoLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) : base(luaLibsImpl, apiContainer, logOutputCallback) {} public override string Name => "gameinfo"; diff --git a/src/BizHawk.Client.Common/lua/CommonLibs/GuiLuaLibrary.cs b/src/BizHawk.Client.Common/lua/CommonLibs/GuiLuaLibrary.cs index 0f8a395603..7dfd78bc17 100644 --- a/src/BizHawk.Client.Common/lua/CommonLibs/GuiLuaLibrary.cs +++ b/src/BizHawk.Client.Common/lua/CommonLibs/GuiLuaLibrary.cs @@ -10,7 +10,7 @@ namespace BizHawk.Client.Common { public Func CreateLuaCanvasCallback { get; set; } - public GuiLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) + public GuiLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) : base(luaLibsImpl, apiContainer, logOutputCallback) {} public override string Name => "gui"; diff --git a/src/BizHawk.Client.Common/lua/CommonLibs/InputLuaLibrary.cs b/src/BizHawk.Client.Common/lua/CommonLibs/InputLuaLibrary.cs index 8409590fc9..585079e3ea 100644 --- a/src/BizHawk.Client.Common/lua/CommonLibs/InputLuaLibrary.cs +++ b/src/BizHawk.Client.Common/lua/CommonLibs/InputLuaLibrary.cs @@ -6,7 +6,7 @@ namespace BizHawk.Client.Common { public sealed class InputLuaLibrary : LuaLibraryBase { - public InputLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) + public InputLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) : base(luaLibsImpl, apiContainer, logOutputCallback) {} public override string Name => "input"; diff --git a/src/BizHawk.Client.Common/lua/CommonLibs/JoypadLuaLibrary.cs b/src/BizHawk.Client.Common/lua/CommonLibs/JoypadLuaLibrary.cs index d1aeac408c..7a515effc0 100644 --- a/src/BizHawk.Client.Common/lua/CommonLibs/JoypadLuaLibrary.cs +++ b/src/BizHawk.Client.Common/lua/CommonLibs/JoypadLuaLibrary.cs @@ -8,7 +8,7 @@ namespace BizHawk.Client.Common { public sealed class JoypadLuaLibrary : LuaLibraryBase { - public JoypadLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) + public JoypadLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) : base(luaLibsImpl, apiContainer, logOutputCallback) {} public override string Name => "joypad"; diff --git a/src/BizHawk.Client.Common/lua/CommonLibs/MemoryLuaLibrary.cs b/src/BizHawk.Client.Common/lua/CommonLibs/MemoryLuaLibrary.cs index 6b2f535928..f4b7ad15e2 100644 --- a/src/BizHawk.Client.Common/lua/CommonLibs/MemoryLuaLibrary.cs +++ b/src/BizHawk.Client.Common/lua/CommonLibs/MemoryLuaLibrary.cs @@ -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 logOutputCallback) + public MemoryLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) : base(luaLibsImpl, apiContainer, logOutputCallback) {} public override string Name => "memory"; diff --git a/src/BizHawk.Client.Common/lua/CommonLibs/MemorySavestateLuaLibrary.cs b/src/BizHawk.Client.Common/lua/CommonLibs/MemorySavestateLuaLibrary.cs index 8608e609b6..4a22aa9cbf 100644 --- a/src/BizHawk.Client.Common/lua/CommonLibs/MemorySavestateLuaLibrary.cs +++ b/src/BizHawk.Client.Common/lua/CommonLibs/MemorySavestateLuaLibrary.cs @@ -6,7 +6,7 @@ namespace BizHawk.Client.Common { public sealed class MemorySavestateLuaLibrary : LuaLibraryBase { - public MemorySavestateLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) + public MemorySavestateLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) : base(luaLibsImpl, apiContainer, logOutputCallback) {} public override string Name => "memorysavestate"; diff --git a/src/BizHawk.Client.Common/lua/CommonLibs/MovieLuaLibrary.cs b/src/BizHawk.Client.Common/lua/CommonLibs/MovieLuaLibrary.cs index 45652f3ad4..5dda21ba6c 100644 --- a/src/BizHawk.Client.Common/lua/CommonLibs/MovieLuaLibrary.cs +++ b/src/BizHawk.Client.Common/lua/CommonLibs/MovieLuaLibrary.cs @@ -7,7 +7,7 @@ namespace BizHawk.Client.Common { public sealed class MovieLuaLibrary : LuaLibraryBase { - public MovieLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) + public MovieLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) : base(luaLibsImpl, apiContainer, logOutputCallback) {} public override string Name => "movie"; diff --git a/src/BizHawk.Client.Common/lua/CommonLibs/SQLiteLuaLibrary.cs b/src/BizHawk.Client.Common/lua/CommonLibs/SQLiteLuaLibrary.cs index 5305651653..03ad1ddc03 100644 --- a/src/BizHawk.Client.Common/lua/CommonLibs/SQLiteLuaLibrary.cs +++ b/src/BizHawk.Client.Common/lua/CommonLibs/SQLiteLuaLibrary.cs @@ -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 logOutputCallback) + public SQLiteLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) : base(luaLibsImpl, apiContainer, logOutputCallback) {} public override string Name => "SQL"; diff --git a/src/BizHawk.Client.Common/lua/CommonLibs/SaveStateLuaLibrary.cs b/src/BizHawk.Client.Common/lua/CommonLibs/SaveStateLuaLibrary.cs index 0845b16808..68fafa1c17 100644 --- a/src/BizHawk.Client.Common/lua/CommonLibs/SaveStateLuaLibrary.cs +++ b/src/BizHawk.Client.Common/lua/CommonLibs/SaveStateLuaLibrary.cs @@ -4,7 +4,7 @@ namespace BizHawk.Client.Common { public sealed class SaveStateLuaLibrary : LuaLibraryBase { - public SaveStateLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) + public SaveStateLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) : base(luaLibsImpl, apiContainer, logOutputCallback) {} public override string Name => "savestate"; diff --git a/src/BizHawk.Client.Common/lua/CommonLibs/UserDataLuaLibrary.cs b/src/BizHawk.Client.Common/lua/CommonLibs/UserDataLuaLibrary.cs index 91a2926177..002a468875 100644 --- a/src/BizHawk.Client.Common/lua/CommonLibs/UserDataLuaLibrary.cs +++ b/src/BizHawk.Client.Common/lua/CommonLibs/UserDataLuaLibrary.cs @@ -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 logOutputCallback) + public UserDataLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) : base(luaLibsImpl, apiContainer, logOutputCallback) {} public override string Name => "userdata"; diff --git a/src/BizHawk.Client.Common/lua/IPlatformLuaLibEnv.cs b/src/BizHawk.Client.Common/lua/IPlatformLuaLibEnv.cs new file mode 100644 index 0000000000..0afca8ed86 --- /dev/null +++ b/src/BizHawk.Client.Common/lua/IPlatformLuaLibEnv.cs @@ -0,0 +1,34 @@ +using System; + +using NLua; + +namespace BizHawk.Client.Common +{ + public interface IPlatformLuaLibEnv + { + LuaDocumentation Docs { get; } + + string EngineName { get; } + + /// pretty hacky... we don't want a lua script to be able to restart itself by rebooting the core + 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 logCallback, LuaFile luaFile, string name = null); + + NLuaTableHelper GetTableHelper(); + + bool RemoveNamedFunctionMatching(Func predicate); + + void SpawnAndSetFileThread(string pathToLoad, LuaFile lf); + } +} \ No newline at end of file diff --git a/src/BizHawk.Client.Common/lua/LuaHelperLibs/BitLuaLibrary.cs b/src/BizHawk.Client.Common/lua/LuaHelperLibs/BitLuaLibrary.cs index 31b6a78266..76bf02cd12 100644 --- a/src/BizHawk.Client.Common/lua/LuaHelperLibs/BitLuaLibrary.cs +++ b/src/BizHawk.Client.Common/lua/LuaHelperLibs/BitLuaLibrary.cs @@ -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 logOutputCallback) + public BitLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) : base(luaLibsImpl, apiContainer, logOutputCallback) {} public override string Name => "bit"; diff --git a/src/BizHawk.Client.Common/lua/LuaHelperLibs/EventsLuaLibrary.cs b/src/BizHawk.Client.Common/lua/LuaHelperLibs/EventsLuaLibrary.cs index d0d5b3862a..1f548c3c27 100644 --- a/src/BizHawk.Client.Common/lua/LuaHelperLibs/EventsLuaLibrary.cs +++ b/src/BizHawk.Client.Common/lua/LuaHelperLibs/EventsLuaLibrary.cs @@ -24,7 +24,7 @@ namespace BizHawk.Client.Common [OptionalService] private IMemoryDomains Domains { get; set; } - public EventsLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) + public EventsLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) : base(luaLibsImpl, apiContainer, logOutputCallback) {} public override string Name => "event"; diff --git a/src/BizHawk.Client.Common/lua/LuaHelperLibs/GenesisLuaLibrary.cs b/src/BizHawk.Client.Common/lua/LuaHelperLibs/GenesisLuaLibrary.cs index 42bec69041..f3871c3202 100644 --- a/src/BizHawk.Client.Common/lua/LuaHelperLibs/GenesisLuaLibrary.cs +++ b/src/BizHawk.Client.Common/lua/LuaHelperLibs/GenesisLuaLibrary.cs @@ -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 logOutputCallback) + public GenesisLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) : base(luaLibsImpl, apiContainer, logOutputCallback) {} public override string Name => "genesis"; diff --git a/src/BizHawk.Client.Common/lua/LuaHelperLibs/MainMemoryLuaLibrary.cs b/src/BizHawk.Client.Common/lua/LuaHelperLibs/MainMemoryLuaLibrary.cs index fe3f018761..9ba109acc3 100644 --- a/src/BizHawk.Client.Common/lua/LuaHelperLibs/MainMemoryLuaLibrary.cs +++ b/src/BizHawk.Client.Common/lua/LuaHelperLibs/MainMemoryLuaLibrary.cs @@ -17,7 +17,7 @@ namespace BizHawk.Client.Common [OptionalService] private IMemoryDomains MemoryDomainCore { get; set; } - public MainMemoryLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) + public MainMemoryLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) : base(luaLibsImpl, apiContainer, logOutputCallback) {} public override string Name => "mainmemory"; diff --git a/src/BizHawk.Client.Common/lua/LuaHelperLibs/NESLuaLibrary.cs b/src/BizHawk.Client.Common/lua/LuaHelperLibs/NESLuaLibrary.cs index 3b14272155..e2df3a761e 100644 --- a/src/BizHawk.Client.Common/lua/LuaHelperLibs/NESLuaLibrary.cs +++ b/src/BizHawk.Client.Common/lua/LuaHelperLibs/NESLuaLibrary.cs @@ -19,7 +19,7 @@ namespace BizHawk.Client.Common [OptionalService] private IMemoryDomains MemoryDomains { get; set; } - public NESLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) + public NESLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) : base(luaLibsImpl, apiContainer, logOutputCallback) {} public override string Name => "nes"; diff --git a/src/BizHawk.Client.Common/lua/LuaHelperLibs/SNESLuaLibrary.cs b/src/BizHawk.Client.Common/lua/LuaHelperLibs/SNESLuaLibrary.cs index 8cc9bbe51c..51a7a0e44b 100644 --- a/src/BizHawk.Client.Common/lua/LuaHelperLibs/SNESLuaLibrary.cs +++ b/src/BizHawk.Client.Common/lua/LuaHelperLibs/SNESLuaLibrary.cs @@ -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 logOutputCallback) + public SNESLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) : base(luaLibsImpl, apiContainer, logOutputCallback) {} public override string Name => "snes"; diff --git a/src/BizHawk.Client.Common/lua/LuaHelperLibs/StringLuaLibrary.cs b/src/BizHawk.Client.Common/lua/LuaHelperLibs/StringLuaLibrary.cs index 6c6777d3c3..6fc5040551 100644 --- a/src/BizHawk.Client.Common/lua/LuaHelperLibs/StringLuaLibrary.cs +++ b/src/BizHawk.Client.Common/lua/LuaHelperLibs/StringLuaLibrary.cs @@ -11,7 +11,7 @@ namespace BizHawk.Client.Common { public override string Name => "bizstring"; - public StringLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) + public StringLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) : base(luaLibsImpl, apiContainer, logOutputCallback) {} [LuaMethodExample("local stbizhex = bizstring.hex( -12345 );")] diff --git a/src/BizHawk.Client.Common/lua/LuaLibraries.cs b/src/BizHawk.Client.Common/lua/LuaLibraries.cs deleted file mode 100644 index 36b8246f18..0000000000 --- a/src/BizHawk.Client.Common/lua/LuaLibraries.cs +++ /dev/null @@ -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 logCallback, LuaFile luaFile, string name = null); - - public abstract NLuaTableHelper GetTableHelper(); - - public abstract bool RemoveNamedFunctionMatching(Func predicate); - - public abstract void SpawnAndSetFileThread(string pathToLoad, LuaFile lf); - } -} \ No newline at end of file diff --git a/src/BizHawk.Client.Common/lua/LuaLibraryBase.cs b/src/BizHawk.Client.Common/lua/LuaLibraryBase.cs index 58c196cfd2..9810f29b1a 100644 --- a/src/BizHawk.Client.Common/lua/LuaLibraryBase.cs +++ b/src/BizHawk.Client.Common/lua/LuaLibraryBase.cs @@ -6,7 +6,7 @@ namespace BizHawk.Client.Common { public abstract class LuaLibraryBase { - protected LuaLibraryBase(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) + protected LuaLibraryBase(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) { LogOutputCallback = logOutputCallback; _luaLibsImpl = luaLibsImpl; @@ -25,7 +25,7 @@ namespace BizHawk.Client.Common protected readonly Action LogOutputCallback; - protected readonly LuaLibraries _luaLibsImpl; + protected readonly IPlatformLuaLibEnv _luaLibsImpl; protected readonly NLuaTableHelper _th; diff --git a/src/BizHawk.Client.EmuHawk/tools/Lua/Libraries/ConsoleLuaLibrary.cs b/src/BizHawk.Client.EmuHawk/tools/Lua/Libraries/ConsoleLuaLibrary.cs index 3d59bba8ac..98cafb92fa 100644 --- a/src/BizHawk.Client.EmuHawk/tools/Lua/Libraries/ConsoleLuaLibrary.cs +++ b/src/BizHawk.Client.EmuHawk/tools/Lua/Libraries/ConsoleLuaLibrary.cs @@ -11,7 +11,7 @@ namespace BizHawk.Client.EmuHawk { public ToolManager Tools { get; set; } - public ConsoleLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) + public ConsoleLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) : base(luaLibsImpl, apiContainer, logOutputCallback) {} public override string Name => "console"; diff --git a/src/BizHawk.Client.EmuHawk/tools/Lua/Libraries/FormsLuaLibrary.cs b/src/BizHawk.Client.EmuHawk/tools/Lua/Libraries/FormsLuaLibrary.cs index 368a91bf37..2acc337092 100644 --- a/src/BizHawk.Client.EmuHawk/tools/Lua/Libraries/FormsLuaLibrary.cs +++ b/src/BizHawk.Client.EmuHawk/tools/Lua/Libraries/FormsLuaLibrary.cs @@ -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 logOutputCallback) + public FormsLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) : base(luaLibsImpl, apiContainer, logOutputCallback) {} public override string Name => "forms"; diff --git a/src/BizHawk.Client.EmuHawk/tools/Lua/Libraries/TAStudioLuaLibrary.cs b/src/BizHawk.Client.EmuHawk/tools/Lua/Libraries/TAStudioLuaLibrary.cs index aa5a4dbf13..bb422f7a68 100644 --- a/src/BizHawk.Client.EmuHawk/tools/Lua/Libraries/TAStudioLuaLibrary.cs +++ b/src/BizHawk.Client.EmuHawk/tools/Lua/Libraries/TAStudioLuaLibrary.cs @@ -18,7 +18,7 @@ namespace BizHawk.Client.EmuHawk { public ToolManager Tools { get; set; } - public TAStudioLuaLibrary(LuaLibraries luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) + public TAStudioLuaLibrary(IPlatformLuaLibEnv luaLibsImpl, ApiContainer apiContainer, Action logOutputCallback) : base(luaLibsImpl, apiContainer, logOutputCallback) {} public override string Name => "tastudio"; diff --git a/src/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs b/src/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs index 9dd2549e8b..8b9306f15b 100644 --- a/src/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs +++ b/src/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs @@ -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 SelectedItems => LuaListView.SelectedRows.Select(index => LuaImp.ScriptList[index]); diff --git a/src/BizHawk.Client.EmuHawk/tools/Lua/UnixLuaLibraries.cs b/src/BizHawk.Client.EmuHawk/tools/Lua/UnixLuaLibraries.cs index 139cbb1223..91b2af748c 100644 --- a/src/BizHawk.Client.EmuHawk/tools/Lua/UnixLuaLibraries.cs +++ b/src/BizHawk.Client.EmuHawk/tools/Lua/UnixLuaLibraries.cs @@ -9,28 +9,32 @@ namespace BizHawk.Client.EmuHawk /// /// Methods intentionally blank. /// - 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 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 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 logCallback, LuaFile luaFile, string name = null) => null; + + public NLuaTableHelper GetTableHelper() => null; + + public bool RemoveNamedFunctionMatching(Func predicate) => false; + + public void SpawnAndSetFileThread(string pathToLoad, LuaFile lf) {} } } \ No newline at end of file diff --git a/src/BizHawk.Client.EmuHawk/tools/Lua/Win32LuaLibraries.cs b/src/BizHawk.Client.EmuHawk/tools/Lua/Win32LuaLibraries.cs index f2215204fb..bffaf6e263 100644 --- a/src/BizHawk.Client.EmuHawk/tools/Lua/Win32LuaLibraries.cs +++ b/src/BizHawk.Client.EmuHawk/tools/Lua/Win32LuaLibraries.cs @@ -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 Libraries = new Dictionary(); 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 logCallback, LuaFile luaFile, string name = null) + public INamedLuaFunction CreateAndRegisterNamedFunction(LuaFunction function, string theEvent, Action 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 predicate) + public bool RemoveNamedFunctionMatching(Func 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); }