Lua - implement input.get()

This commit is contained in:
adelikat 2012-03-24 15:55:22 +00:00
parent d0995970fc
commit 96fc783107
2 changed files with 44 additions and 19 deletions

View File

@ -90,6 +90,13 @@ namespace BizHawk.MultiClient
LuaLibraryList += "movie." + MovieFunctions[i] + "\n";
}
lua.NewTable("input");
for (int i = 0; i < InputFunctions.Length; i++)
{
lua.RegisterFunction("input." + InputFunctions[i], this, this.GetType().GetMethod("input_" + InputFunctions[i]));
LuaLibraryList += "input." + InputFunctions[i] + "\n";
}
lua.NewTable("joypad");
for (int i = 0; i < JoypadFunctions.Length; i++)
{
@ -291,6 +298,10 @@ namespace BizHawk.MultiClient
//"rerecordcounting",
};
public static string[] InputFunctions = new string[] {
"get",
};
public static string[] JoypadFunctions = new string[] {
"set",
"get",
@ -1093,6 +1104,26 @@ namespace BizHawk.MultiClient
Global.MainForm.SetReadOnly(false);
}
//----------------------------------------------------
//Input library
//----------------------------------------------------
public LuaTable input_get()
{
LuaTable keys = new LuaTable(1, lua);
string[] keystrings = Global.MainForm.lastKeyboard.Split(' ');
foreach (string keypress in keystrings)
{
if (keypress.Contains("Press:"))
{
string key = keypress.Replace("Press:", "");
keys[key] = key;
}
}
return keys;
}
//----------------------------------------------------
//Joypad library
//----------------------------------------------------

View File

@ -1334,20 +1334,24 @@ namespace BizHawk.MultiClient
}
}
public string lastKeyboard = "";
public void ProcessInput()
{
for (; ; )
{
//loop through all available events
var ie = Input.Instance.DequeueEvent();
if (ie == null) break;
if (ie == null) { break; }
//useful debugging:
//Console.WriteLine(ie);
//TODO - wonder what happens if we pop up something interactive as a response to one of these hotkeys? may need to purge further processing
//look for client control bindings for this key
lastKeyboard += " " + ie.ToString();
//look for client cntrol bindings for this key
var triggers = Global.ClientControls.SearchBindings(ie.LogicalButton.ToString());
if (triggers.Count == 0)
{
@ -1423,7 +1427,7 @@ namespace BizHawk.MultiClient
case "Quick Save State":
if (!IsNullEmulator())
SaveState("QuickSave" + Global.Config.SaveSlot.ToString());
SaveState("QuickSave" + Global.Config.SaveSlot.ToString());
break;
case "Quick Load State":
@ -1469,21 +1473,11 @@ namespace BizHawk.MultiClient
case "LoadSlot7": if (!IsNullEmulator()) LoadState("QuickSave7"); break;
case "LoadSlot8": if (!IsNullEmulator()) LoadState("QuickSave8"); break;
case "LoadSlot9": if (!IsNullEmulator()) LoadState("QuickSave9"); break;
case "SelectSlot0":
OnSelectSlot(0);
break;
case "SelectSlot1":
OnSelectSlot(1);
break;
case "SelectSlot2":
OnSelectSlot(2);
break;
case "SelectSlot3":
OnSelectSlot(3);
break;
case "SelectSlot4":
OnSelectSlot(4);
break;
case "SelectSlot0": OnSelectSlot(0); break;
case "SelectSlot1": OnSelectSlot(1); break;
case "SelectSlot2": OnSelectSlot(2); break;
case "SelectSlot3": OnSelectSlot(3); break;
case "SelectSlot4": OnSelectSlot(4); break;
case "SelectSlot5": OnSelectSlot(5); break;
case "SelectSlot6": OnSelectSlot(6); break;
case "SelectSlot7": OnSelectSlot(7); break;
@ -1774,7 +1768,7 @@ namespace BizHawk.MultiClient
Global.Emulator.FrameAdvance(!throttle.skipnextframe);
MemoryPulse.Pulse();
//=======================================
lastKeyboard = "";
if (CurrAviWriter != null)
{
//TODO - this will stray over time! have AviWriter keep an accumulation!