Add event.availableScopes(), fix LogWithSeparator, cleanup

This commit is contained in:
adelikat 2019-12-15 12:25:49 -06:00
parent 71aaf349b5
commit ad8f321ea1
3 changed files with 26 additions and 8 deletions

View File

@ -363,6 +363,15 @@ namespace BizHawk.Client.Common
return false; return false;
} }
[LuaMethodExample("local scopes = event.availableScopes();")]
[LuaMethod("availableScopes", "Lists the available scopes that can be passed into memory events")]
public LuaTable AvailableScopes()
{
return DebuggableCore?.MemoryCallbacksAvailable() == true
? DebuggableCore.MemoryCallbacks.AvailableScopes.ToLuaTable(Lua)
: Lua.NewTable();
}
private string ProcessScope(string scope) private string ProcessScope(string scope)
{ {
if (string.IsNullOrWhiteSpace(scope)) if (string.IsNullOrWhiteSpace(scope))

View File

@ -71,23 +71,31 @@ namespace BizHawk.Client.EmuHawk
// Outputs the given object to the output box on the Lua Console dialog. Note: Can accept a LuaTable // Outputs the given object to the output box on the Lua Console dialog. Note: Can accept a LuaTable
private static void LogWithSeparator(string separator, string terminator, params object[] outputs) private static void LogWithSeparator(string separator, string terminator, params object[] outputs)
{ {
static string SerialiseTable(LuaTable lti) static string SerializeTable(LuaTable lti)
{ {
var keyObjs = lti.Keys; var keyObjs = lti.Keys;
var valueObjs = lti.Values; var valueObjs = lti.Values;
if (keyObjs.Count != valueObjs.Count) throw new IndexOutOfRangeException("each value must be paired with one key, they differ in number"); if (keyObjs.Count != valueObjs.Count)
var values = new List<object>(keyObjs.Count); {
throw new IndexOutOfRangeException("each value must be paired with one key, they differ in number");
}
var values = new object[keyObjs.Count];
var kvpIndex = 0; var kvpIndex = 0;
foreach (var valueObj in valueObjs) values[kvpIndex++] = valueObj; foreach (var valueObj in valueObjs)
{
values[kvpIndex++] = valueObj;
}
return string.Concat(keyObjs.Cast<object>() return string.Concat(keyObjs.Cast<object>()
.Select((kObj, i) => $"\"{kObj}\": \"{values[i]}\"\n") .Select((kObj, i) => $"\"{kObj}\": \"{values[i]}\"\n")
.OrderBy(s => s) .OrderBy(s => s)
); );
} }
static void SerialiseAndWrite(object output) => GlobalWin.Tools.LuaConsole.WriteToOutputWindow( static void SerializeAndWrite(object output) => GlobalWin.Tools.LuaConsole.WriteToOutputWindow(
output is LuaTable table output is LuaTable table
? SerialiseTable(table) ? SerializeTable(table)
: output?.ToString() ?? "nil" : output?.ToString() ?? "nil"
); );
@ -102,11 +110,11 @@ namespace BizHawk.Client.EmuHawk
return; return;
} }
SerialiseAndWrite(outputs[0]); SerializeAndWrite(outputs[0]);
for (int outIndex = 1, indexAfterLast = outputs.Length; outIndex != indexAfterLast; outIndex++) for (int outIndex = 1, indexAfterLast = outputs.Length; outIndex != indexAfterLast; outIndex++)
{ {
GlobalWin.Tools.LuaConsole.WriteToOutputWindow(separator); GlobalWin.Tools.LuaConsole.WriteToOutputWindow(separator);
SerialiseAndWrite(outputs[outIndex]); SerializeAndWrite(outputs[outIndex]);
} }
if (!string.IsNullOrEmpty(terminator)) if (!string.IsNullOrEmpty(terminator))

View File

@ -277,6 +277,7 @@
<s:Boolean x:Key="/Default/UserDictionary/Words/=nsamp/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=nsamp/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Numerics/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=Numerics/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=nvidia/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=nvidia/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Objs/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=opcode/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=opcode/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=opengl/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=opengl/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Overdump/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=Overdump/@EntryIndexedValue">True</s:Boolean>