Lua - Refactor how lua libraries are registered by searching assemblies and finding implementations and building a list of these
This commit is contained in:
parent
e7c2c40d79
commit
83ada011e8
|
@ -3,7 +3,7 @@ using LuaInterface;
|
|||
|
||||
namespace BizHawk.Client.Common
|
||||
{
|
||||
public class BitLuaLibrary : LuaLibraryBase
|
||||
public sealed class BitLuaLibrary : LuaLibraryBase
|
||||
{
|
||||
public BitLuaLibrary(Lua lua)
|
||||
: base(lua) { }
|
||||
|
|
|
@ -12,7 +12,7 @@ using LuaInterface;
|
|||
|
||||
namespace BizHawk.Client.Common
|
||||
{
|
||||
public class EmulatorLuaLibrary : LuaLibraryBase
|
||||
public sealed class EmulatorLuaLibrary : LuaLibraryBase
|
||||
{
|
||||
public Action FrameAdvanceCallback { get; set; }
|
||||
public Action YieldCallback { get; set; }
|
||||
|
|
|
@ -5,7 +5,7 @@ using LuaInterface;
|
|||
|
||||
namespace BizHawk.Client.Common
|
||||
{
|
||||
public class EventLuaLibrary : LuaLibraryBase
|
||||
public sealed class EventLuaLibrary : LuaLibraryBase
|
||||
{
|
||||
private readonly LuaFunctionList _luaFunctions = new LuaFunctionList();
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ using LuaInterface;
|
|||
|
||||
namespace BizHawk.Client.Common
|
||||
{
|
||||
public class GameInfoLuaLibrary : LuaLibraryBase
|
||||
public sealed class GameInfoLuaLibrary : LuaLibraryBase
|
||||
{
|
||||
public GameInfoLuaLibrary(Lua lua)
|
||||
: base(lua) { }
|
||||
|
|
|
@ -3,7 +3,7 @@ using LuaInterface;
|
|||
|
||||
namespace BizHawk.Client.Common
|
||||
{
|
||||
public class JoypadLuaLibrary : LuaLibraryBase
|
||||
public sealed class JoypadLuaLibrary : LuaLibraryBase
|
||||
{
|
||||
public JoypadLuaLibrary(Lua lua)
|
||||
: base(lua) { }
|
||||
|
|
|
@ -4,7 +4,7 @@ using BizHawk.Emulation.Common;
|
|||
|
||||
namespace BizHawk.Client.Common
|
||||
{
|
||||
public class MainMemoryLuaLibrary : LuaMemoryBase
|
||||
public sealed class MainMemoryLuaLibrary : LuaMemoryBase
|
||||
{
|
||||
public MainMemoryLuaLibrary(Lua lua)
|
||||
: base(lua) { }
|
||||
|
|
|
@ -4,7 +4,7 @@ using BizHawk.Emulation.Common;
|
|||
|
||||
namespace BizHawk.Client.Common
|
||||
{
|
||||
public class MemoryLuaLibrary : LuaMemoryBase
|
||||
public sealed class MemoryLuaLibrary : LuaMemoryBase
|
||||
{
|
||||
private int _currentMemoryDomain; // Main memory by default probably (index 0 is currently always main memory but may never be)
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ using LuaInterface;
|
|||
|
||||
namespace BizHawk.Client.Common
|
||||
{
|
||||
public class MovieLuaLibrary : LuaLibraryBase
|
||||
public sealed class MovieLuaLibrary : LuaLibraryBase
|
||||
{
|
||||
public MovieLuaLibrary(Lua lua)
|
||||
: base(lua) { }
|
||||
|
|
|
@ -8,7 +8,7 @@ using BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES;
|
|||
|
||||
namespace BizHawk.Client.Common
|
||||
{
|
||||
public class NesLuaLibrary : LuaLibraryBase
|
||||
public sealed class NesLuaLibrary : LuaLibraryBase
|
||||
{
|
||||
// TODO:
|
||||
// perhaps with the new core config system, one could
|
||||
|
|
|
@ -4,7 +4,7 @@ using BizHawk.Emulation.Cores.Nintendo.SNES;
|
|||
|
||||
namespace BizHawk.Client.Common
|
||||
{
|
||||
public class SnesLuaLibrary : LuaLibraryBase
|
||||
public sealed class SnesLuaLibrary : LuaLibraryBase
|
||||
{
|
||||
public SnesLuaLibrary(Lua lua)
|
||||
: base(lua) { }
|
||||
|
|
|
@ -5,7 +5,7 @@ using LuaInterface;
|
|||
|
||||
namespace BizHawk.Client.Common
|
||||
{
|
||||
public class StringLuaLibrary : LuaLibraryBase
|
||||
public sealed class StringLuaLibrary : LuaLibraryBase
|
||||
{
|
||||
public override string Name { get { return "bizstring"; } }
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ using BizHawk.Client.Common;
|
|||
|
||||
namespace BizHawk.Client.EmuHawk
|
||||
{
|
||||
public class EmuHawkLuaLibrary : LuaLibraryBase
|
||||
public sealed class EmuHawkLuaLibrary : LuaLibraryBase
|
||||
{
|
||||
private readonly Dictionary<int, string> _filterMappings = new Dictionary<int, string>
|
||||
{
|
||||
|
|
|
@ -8,7 +8,7 @@ using LuaInterface;
|
|||
|
||||
namespace BizHawk.Client.EmuHawk
|
||||
{
|
||||
public class ConsoleLuaLibrary : LuaLibraryBase
|
||||
public sealed class ConsoleLuaLibrary : LuaLibraryBase
|
||||
{
|
||||
public ConsoleLuaLibrary(Lua lua)
|
||||
: base(lua) { }
|
||||
|
|
|
@ -9,7 +9,7 @@ using LuaInterface;
|
|||
|
||||
namespace BizHawk.Client.EmuHawk
|
||||
{
|
||||
public class FormsLuaLibrary : LuaLibraryBase
|
||||
public sealed class FormsLuaLibrary : LuaLibraryBase
|
||||
{
|
||||
public FormsLuaLibrary(Lua lua)
|
||||
: base(lua) { }
|
||||
|
|
|
@ -8,7 +8,7 @@ using LuaInterface;
|
|||
|
||||
namespace BizHawk.Client.EmuHawk
|
||||
{
|
||||
public class GuiLuaLibrary : LuaLibraryBase
|
||||
public sealed class GuiLuaLibrary : LuaLibraryBase
|
||||
{
|
||||
public GuiLuaLibrary(Lua lua)
|
||||
: base(lua) { }
|
||||
|
|
|
@ -7,7 +7,7 @@ using LuaInterface;
|
|||
|
||||
namespace BizHawk.Client.EmuHawk
|
||||
{
|
||||
public class InputLuaLibrary : LuaLibraryBase
|
||||
public sealed class InputLuaLibrary : LuaLibraryBase
|
||||
{
|
||||
public InputLuaLibrary(Lua lua)
|
||||
: base(lua) { }
|
||||
|
|
|
@ -6,7 +6,7 @@ using BizHawk.Client.Common;
|
|||
|
||||
namespace BizHawk.Client.EmuHawk
|
||||
{
|
||||
public class SavestateLuaLibrary : LuaLibraryBase
|
||||
public sealed class SavestateLuaLibrary : LuaLibraryBase
|
||||
{
|
||||
public SavestateLuaLibrary(Lua lua)
|
||||
: base(lua) { }
|
||||
|
|
|
@ -1,16 +1,17 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
|
||||
using BizHawk.Client.Common;
|
||||
using LuaInterface;
|
||||
using System.Reflection;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace BizHawk.Client.EmuHawk
|
||||
{
|
||||
public class EmuLuaLibrary
|
||||
{
|
||||
private readonly FormsLuaLibrary _formsLibrary;
|
||||
private readonly EventLuaLibrary _eventLibrary;
|
||||
private readonly GuiLuaLibrary _guiLibrary;
|
||||
private readonly Dictionary<Type, LuaLibraryBase> Libraries = new Dictionary<Type, LuaLibraryBase>();
|
||||
private readonly LuaConsole _caller;
|
||||
|
||||
private Lua _lua = new Lua();
|
||||
|
@ -21,6 +22,26 @@ namespace BizHawk.Client.EmuHawk
|
|||
Docs = new LuaDocumentation();
|
||||
}
|
||||
|
||||
private FormsLuaLibrary FormsLibrary
|
||||
{
|
||||
get { return (FormsLuaLibrary)Libraries[typeof(FormsLuaLibrary)]; }
|
||||
}
|
||||
|
||||
private EventLuaLibrary EventsLibrary
|
||||
{
|
||||
get { return (EventLuaLibrary)Libraries[typeof(EventLuaLibrary)]; }
|
||||
}
|
||||
|
||||
private EmulatorLuaLibrary EmulatorLuaLibrary
|
||||
{
|
||||
get { return (EmulatorLuaLibrary)Libraries[typeof(EmulatorLuaLibrary)]; }
|
||||
}
|
||||
|
||||
public GuiLuaLibrary GuiLibrary
|
||||
{
|
||||
get { return (GuiLuaLibrary)Libraries[typeof(GuiLuaLibrary)]; }
|
||||
}
|
||||
|
||||
public EmuLuaLibrary(LuaConsole passed)
|
||||
: this()
|
||||
{
|
||||
|
@ -29,44 +50,32 @@ namespace BizHawk.Client.EmuHawk
|
|||
_caller = passed.Get();
|
||||
|
||||
// Register lua libraries
|
||||
|
||||
var libs = Assembly
|
||||
.Load("BizHawk.Client.Common")
|
||||
.GetTypes()
|
||||
.Where(t => typeof(LuaLibraryBase).IsAssignableFrom(t))
|
||||
.Where(t => t.IsSealed)
|
||||
.ToList();
|
||||
|
||||
libs.AddRange(
|
||||
Assembly
|
||||
.GetAssembly(typeof(EmuLuaLibrary))
|
||||
.GetTypes()
|
||||
.Where(t => typeof(LuaLibraryBase).IsAssignableFrom(t))
|
||||
.Where(t => t.IsSealed)
|
||||
);
|
||||
|
||||
foreach (var lib in libs)
|
||||
{
|
||||
var instance = (LuaLibraryBase)Activator.CreateInstance(lib, _lua);
|
||||
instance.LuaRegister(Docs);
|
||||
Libraries.Add(lib, instance);
|
||||
}
|
||||
|
||||
_lua.RegisterFunction("print", this, GetType().GetMethod("Print"));
|
||||
|
||||
// TODO: Search the assemblies for objects that inherit LuaBaseLibrary, and instantiate and register them and put them into an array,
|
||||
// rather than call them all by name here
|
||||
|
||||
_formsLibrary = new FormsLuaLibrary(_lua, ConsoleLuaLibrary.LogOutput);
|
||||
_formsLibrary.LuaRegister(Docs);
|
||||
|
||||
_eventLibrary = new EventLuaLibrary(_lua, ConsoleLuaLibrary.LogOutput);
|
||||
_eventLibrary.LuaRegister(Docs);
|
||||
|
||||
_guiLibrary = new GuiLuaLibrary(_lua, ConsoleLuaLibrary.LogOutput);
|
||||
_guiLibrary.LuaRegister(Docs);
|
||||
|
||||
new BitLuaLibrary(_lua, ConsoleLuaLibrary.LogOutput).LuaRegister(Docs);
|
||||
new EmuHawkLuaLibrary(_lua, ConsoleLuaLibrary.LogOutput).LuaRegister(Docs);
|
||||
new ConsoleLuaLibrary(_lua, ConsoleLuaLibrary.LogOutput).LuaRegister(Docs);
|
||||
|
||||
var emuLib = new EmulatorLuaLibrary(_lua, ConsoleLuaLibrary.LogOutput)
|
||||
{
|
||||
FrameAdvanceCallback = Frameadvance,
|
||||
YieldCallback = EmuYield
|
||||
};
|
||||
|
||||
emuLib.LuaRegister(Docs);
|
||||
|
||||
new InputLuaLibrary(_lua, ConsoleLuaLibrary.LogOutput).LuaRegister(Docs);
|
||||
new JoypadLuaLibrary(_lua, ConsoleLuaLibrary.LogOutput).LuaRegister(Docs);
|
||||
new MemoryLuaLibrary(_lua, ConsoleLuaLibrary.LogOutput).LuaRegister(Docs);
|
||||
new MainMemoryLuaLibrary(_lua, ConsoleLuaLibrary.LogOutput).LuaRegister(Docs);
|
||||
|
||||
new MovieLuaLibrary(_lua, ConsoleLuaLibrary.LogOutput).LuaRegister(Docs);
|
||||
new NesLuaLibrary(_lua, ConsoleLuaLibrary.LogOutput).LuaRegister(Docs);
|
||||
new SavestateLuaLibrary(_lua, ConsoleLuaLibrary.LogOutput).LuaRegister(Docs);
|
||||
new SnesLuaLibrary(_lua, ConsoleLuaLibrary.LogOutput).LuaRegister(Docs);
|
||||
new StringLuaLibrary(_lua, ConsoleLuaLibrary.LogOutput).LuaRegister(Docs);
|
||||
new GameInfoLuaLibrary(_lua, ConsoleLuaLibrary.LogOutput).LuaRegister(Docs);
|
||||
EmulatorLuaLibrary.FrameAdvanceCallback = Frameadvance;
|
||||
EmulatorLuaLibrary.YieldCallback = EmuYield;
|
||||
|
||||
Docs.Sort();
|
||||
}
|
||||
|
@ -76,50 +85,45 @@ namespace BizHawk.Client.EmuHawk
|
|||
public EventWaitHandle LuaWait { get; private set; }
|
||||
public bool FrameAdvanceRequested { get; private set; }
|
||||
|
||||
public GuiLuaLibrary GuiLibrary
|
||||
{
|
||||
get { return _guiLibrary; }
|
||||
}
|
||||
|
||||
public LuaFunctionList RegisteredFunctions
|
||||
{
|
||||
get { return _eventLibrary.RegisteredFunctions; }
|
||||
get { return EventsLibrary.RegisteredFunctions; }
|
||||
}
|
||||
|
||||
public void WindowClosed(IntPtr handle)
|
||||
{
|
||||
_formsLibrary.WindowClosed(handle);
|
||||
FormsLibrary.WindowClosed(handle);
|
||||
}
|
||||
|
||||
public void CallSaveStateEvent(string name)
|
||||
{
|
||||
_eventLibrary.CallSaveStateEvent(name);
|
||||
EventsLibrary.CallSaveStateEvent(name);
|
||||
}
|
||||
|
||||
public void CallLoadStateEvent(string name)
|
||||
{
|
||||
_eventLibrary.CallLoadStateEvent(name);
|
||||
EventsLibrary.CallLoadStateEvent(name);
|
||||
}
|
||||
|
||||
public void CallFrameBeforeEvent()
|
||||
{
|
||||
_eventLibrary.CallFrameBeforeEvent();
|
||||
EventsLibrary.CallFrameBeforeEvent();
|
||||
}
|
||||
|
||||
public void CallFrameAfterEvent()
|
||||
{
|
||||
_eventLibrary.CallFrameAfterEvent();
|
||||
EventsLibrary.CallFrameAfterEvent();
|
||||
}
|
||||
|
||||
public void CallExitEvent(Lua thread)
|
||||
{
|
||||
_eventLibrary.CallExitEvent(thread);
|
||||
EventsLibrary.CallExitEvent(thread);
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
_lua = new Lua();
|
||||
_guiLibrary.Dispose();
|
||||
GuiLibrary.Dispose();
|
||||
}
|
||||
|
||||
public Lua SpawnCoroutine(string file)
|
||||
|
@ -132,7 +136,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
public ResumeResult ResumeScript(Lua script)
|
||||
{
|
||||
_eventLibrary.CurrentThread = script;
|
||||
EventsLibrary.CurrentThread = script;
|
||||
_currThread = script;
|
||||
var execResult = script.Resume(0);
|
||||
_currThread = null;
|
||||
|
|
Loading…
Reference in New Issue