Lua - move threading code into the frame loops, now emu.frameadvance works per frame not per emulator loop
This commit is contained in:
parent
33ca14a344
commit
41708a8579
|
@ -13,25 +13,25 @@ namespace BizHawk.MultiClient
|
||||||
{
|
{
|
||||||
public class LuaImplementation
|
public class LuaImplementation
|
||||||
{
|
{
|
||||||
Lua lua = new Lua();
|
Lua lua = new Lua();
|
||||||
LuaConsole Caller;
|
LuaConsole Caller;
|
||||||
public String LuaLibraryList = "";
|
public String LuaLibraryList = "";
|
||||||
public EventWaitHandle LuaWait;
|
public EventWaitHandle LuaWait;
|
||||||
public bool isRunning;
|
public bool isRunning;
|
||||||
private Thread LuaThread;
|
private Thread LuaThread;
|
||||||
private int CurrentMemoryDomain = 0; //Main memory by default
|
private int CurrentMemoryDomain = 0; //Main memory by default
|
||||||
|
|
||||||
public LuaImplementation(LuaConsole passed)
|
public LuaImplementation(LuaConsole passed)
|
||||||
{
|
{
|
||||||
LuaWait = new AutoResetEvent(false);
|
LuaWait = new AutoResetEvent(false);
|
||||||
LuaLibraryList = "";
|
LuaLibraryList = "";
|
||||||
Caller = passed.get();
|
Caller = passed.get();
|
||||||
LuaRegister(lua);
|
LuaRegister(lua);
|
||||||
}
|
}
|
||||||
public void LuaRegister(Lua lua)
|
public void LuaRegister(Lua lua)
|
||||||
{
|
{
|
||||||
lua.RegisterFunction("print", this, this.GetType().GetMethod("print"));
|
lua.RegisterFunction("print", this, this.GetType().GetMethod("print"));
|
||||||
|
|
||||||
//Register libraries
|
//Register libraries
|
||||||
lua.NewTable("console");
|
lua.NewTable("console");
|
||||||
for (int i = 0; i < ConsoleFunctions.Length; i++)
|
for (int i = 0; i < ConsoleFunctions.Length; i++)
|
||||||
|
@ -82,29 +82,29 @@ namespace BizHawk.MultiClient
|
||||||
LuaLibraryList += "client." + MultiClientFunctions[i] + "\n";
|
LuaLibraryList += "client." + MultiClientFunctions[i] + "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void LuaThreadFunction(object File)
|
private void LuaThreadFunction(object File)
|
||||||
{
|
{
|
||||||
string F = File.ToString();
|
string F = File.ToString();
|
||||||
isRunning = true;
|
isRunning = true;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
lua.DoFile(F);
|
lua.DoFile(F);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
MessageBox.Show("Exception caught. " + e.ToString());
|
MessageBox.Show("Exception caught. " + e.ToString());
|
||||||
}
|
}
|
||||||
isRunning = false;
|
isRunning = false;
|
||||||
LuaWait.Set();
|
LuaWait.Set();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DoLuaFile(string File)
|
public void DoLuaFile(string File)
|
||||||
{
|
{
|
||||||
LuaThread = new Thread(new ParameterizedThreadStart(LuaThreadFunction));
|
LuaThread = new Thread(new ParameterizedThreadStart(LuaThreadFunction));
|
||||||
LuaThread.Start(File);
|
LuaThread.Start(File);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void print(string s)
|
public void print(string s)
|
||||||
{
|
{
|
||||||
Caller.AddText(string.Format(s));
|
Caller.AddText(string.Format(s));
|
||||||
|
@ -207,8 +207,8 @@ namespace BizHawk.MultiClient
|
||||||
//----------------------------------------------------
|
//----------------------------------------------------
|
||||||
public void emu_frameadvance()
|
public void emu_frameadvance()
|
||||||
{
|
{
|
||||||
LuaWait.Set();
|
LuaWait.Set();
|
||||||
Global.MainForm.MainWait.WaitOne();
|
Global.MainForm.MainWait.WaitOne();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void emu_pause()
|
public void emu_pause()
|
||||||
|
@ -249,7 +249,7 @@ namespace BizHawk.MultiClient
|
||||||
//----------------------------------------------------
|
//----------------------------------------------------
|
||||||
//Memory library
|
//Memory library
|
||||||
//----------------------------------------------------
|
//----------------------------------------------------
|
||||||
|
|
||||||
public string memory_readbyte(object lua_input)
|
public string memory_readbyte(object lua_input)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -319,7 +319,7 @@ namespace BizHawk.MultiClient
|
||||||
{
|
{
|
||||||
return Global.GetOutputControllersAsMnemonic();
|
return Global.GetOutputControllersAsMnemonic();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void joypad_set(object lua_input)
|
public void joypad_set(object lua_input)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ namespace BizHawk.MultiClient
|
||||||
bool runloop_frameProgress;
|
bool runloop_frameProgress;
|
||||||
DateTime FrameAdvanceTimestamp = DateTime.MinValue;
|
DateTime FrameAdvanceTimestamp = DateTime.MinValue;
|
||||||
public bool EmulatorPaused;
|
public bool EmulatorPaused;
|
||||||
public EventWaitHandle MainWait;
|
public EventWaitHandle MainWait;
|
||||||
int runloop_fps;
|
int runloop_fps;
|
||||||
int runloop_last_fps;
|
int runloop_last_fps;
|
||||||
bool runloop_frameadvance;
|
bool runloop_frameadvance;
|
||||||
|
@ -68,7 +68,7 @@ namespace BizHawk.MultiClient
|
||||||
{
|
{
|
||||||
Global.MovieSession = new MovieSession();
|
Global.MovieSession = new MovieSession();
|
||||||
Global.MovieSession.Movie = new Movie();
|
Global.MovieSession.Movie = new Movie();
|
||||||
MainWait = new AutoResetEvent(false);
|
MainWait = new AutoResetEvent(false);
|
||||||
Icon = BizHawk.MultiClient.Properties.Resources.logo;
|
Icon = BizHawk.MultiClient.Properties.Resources.logo;
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
Global.Game = GameInfo.GetNullGame();
|
Global.Game = GameInfo.GetNullGame();
|
||||||
|
@ -332,11 +332,7 @@ namespace BizHawk.MultiClient
|
||||||
{
|
{
|
||||||
for (; ; )
|
for (; ; )
|
||||||
{
|
{
|
||||||
//client input-related duties
|
|
||||||
if (LuaConsole1.LuaImp.isRunning)
|
|
||||||
{
|
|
||||||
LuaConsole1.LuaImp.LuaWait.WaitOne();
|
|
||||||
}
|
|
||||||
|
|
||||||
Input.Instance.Update();
|
Input.Instance.Update();
|
||||||
//handle events and dispatch as a hotkey action, or a hotkey button, or an input button
|
//handle events and dispatch as a hotkey action, or a hotkey button, or an input button
|
||||||
|
@ -346,16 +342,13 @@ namespace BizHawk.MultiClient
|
||||||
Global.ActiveController.OR_FromLogical(Global.ClickyVirtualPadController);
|
Global.ActiveController.OR_FromLogical(Global.ClickyVirtualPadController);
|
||||||
Global.AutoFireController.LatchFromPhysical(Global.ControllerInputCoalescer);
|
Global.AutoFireController.LatchFromPhysical(Global.ControllerInputCoalescer);
|
||||||
Global.ClickyVirtualPadController.FrameTick();
|
Global.ClickyVirtualPadController.FrameTick();
|
||||||
|
|
||||||
StepRunLoop_Core();
|
StepRunLoop_Core();
|
||||||
//if(!IsNullEmulator())
|
//if(!IsNullEmulator())
|
||||||
StepRunLoop_Throttle();
|
StepRunLoop_Throttle();
|
||||||
|
|
||||||
Render();
|
Render();
|
||||||
if (LuaConsole1.LuaImp.isRunning)
|
|
||||||
{
|
|
||||||
Global.MainForm.MainWait.Set();
|
|
||||||
}
|
|
||||||
CheckMessages();
|
CheckMessages();
|
||||||
if (exit)
|
if (exit)
|
||||||
break;
|
break;
|
||||||
|
@ -656,8 +649,8 @@ namespace BizHawk.MultiClient
|
||||||
genControls.BindMulti("P1 Start", Global.Config.GenesisController[0].Start);
|
genControls.BindMulti("P1 Start", Global.Config.GenesisController[0].Start);
|
||||||
Global.GenControls = genControls;
|
Global.GenControls = genControls;
|
||||||
|
|
||||||
var agenControls = new AutofireController(Genesis.GenesisController);
|
var agenControls = new AutofireController(Genesis.GenesisController);
|
||||||
agbControls.Autofire = true;
|
agbControls.Autofire = true;
|
||||||
genControls.BindMulti("P1 Up", Global.Config.GenesisAutoController[0].Up);
|
genControls.BindMulti("P1 Up", Global.Config.GenesisAutoController[0].Up);
|
||||||
genControls.BindMulti("P1 Left", Global.Config.GenesisAutoController[0].Left);
|
genControls.BindMulti("P1 Left", Global.Config.GenesisAutoController[0].Left);
|
||||||
genControls.BindMulti("P1 Right", Global.Config.GenesisAutoController[0].Right);
|
genControls.BindMulti("P1 Right", Global.Config.GenesisAutoController[0].Right);
|
||||||
|
@ -666,8 +659,8 @@ namespace BizHawk.MultiClient
|
||||||
genControls.BindMulti("P1 B", Global.Config.GenesisAutoController[0].B);
|
genControls.BindMulti("P1 B", Global.Config.GenesisAutoController[0].B);
|
||||||
genControls.BindMulti("P1 C", Global.Config.GenesisAutoController[0].C);
|
genControls.BindMulti("P1 C", Global.Config.GenesisAutoController[0].C);
|
||||||
genControls.BindMulti("P1 Start", Global.Config.GenesisAutoController[0].Start);
|
genControls.BindMulti("P1 Start", Global.Config.GenesisAutoController[0].Start);
|
||||||
Global.AutofireGenControls = agenControls;
|
Global.AutofireGenControls = agenControls;
|
||||||
|
|
||||||
var TI83Controls = new Controller(TI83.TI83Controller);
|
var TI83Controls = new Controller(TI83.TI83Controller);
|
||||||
TI83Controls.BindMulti("0", Global.Config.TI83Controller[0]._0);
|
TI83Controls.BindMulti("0", Global.Config.TI83Controller[0]._0);
|
||||||
TI83Controls.BindMulti("1", Global.Config.TI83Controller[0]._1);
|
TI83Controls.BindMulti("1", Global.Config.TI83Controller[0]._1);
|
||||||
|
@ -1226,9 +1219,9 @@ namespace BizHawk.MultiClient
|
||||||
|
|
||||||
private void CloseGame()
|
private void CloseGame()
|
||||||
{
|
{
|
||||||
if (Global.Config.AutoSavestates && Global.Emulator is NullEmulator == false)
|
if (Global.Config.AutoSavestates && Global.Emulator is NullEmulator == false)
|
||||||
SaveState("Auto");
|
SaveState("Auto");
|
||||||
if (Global.Emulator.SaveRamModified)
|
if (Global.Emulator.SaveRamModified)
|
||||||
SaveRam();
|
SaveRam();
|
||||||
Global.Emulator.Dispose();
|
Global.Emulator.Dispose();
|
||||||
Global.Emulator = new NullEmulator();
|
Global.Emulator = new NullEmulator();
|
||||||
|
@ -1381,14 +1374,14 @@ namespace BizHawk.MultiClient
|
||||||
Global.RenderPanel.AddMessage("Unthrottled: " + unthrottled);
|
Global.RenderPanel.AddMessage("Unthrottled: " + unthrottled);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "Hard Reset":
|
case "Hard Reset":
|
||||||
{
|
{
|
||||||
bool autoSaveState = Global.Config.AutoSavestates;
|
bool autoSaveState = Global.Config.AutoSavestates;
|
||||||
Global.Config.AutoSavestates = false;
|
Global.Config.AutoSavestates = false;
|
||||||
LoadRom(CurrentlyOpenRom);
|
LoadRom(CurrentlyOpenRom);
|
||||||
Global.Config.AutoSavestates = autoSaveState;
|
Global.Config.AutoSavestates = autoSaveState;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case "Screenshot":
|
case "Screenshot":
|
||||||
TakeScreenshot();
|
TakeScreenshot();
|
||||||
|
@ -1626,6 +1619,17 @@ namespace BizHawk.MultiClient
|
||||||
bool genSound = false;
|
bool genSound = false;
|
||||||
if (runFrame)
|
if (runFrame)
|
||||||
{
|
{
|
||||||
|
//client input-related duties
|
||||||
|
if (LuaConsole1.LuaImp.isRunning)
|
||||||
|
{
|
||||||
|
LuaConsole1.LuaImp.LuaWait.WaitOne();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (LuaConsole1.LuaImp.isRunning)
|
||||||
|
{
|
||||||
|
Global.MainForm.MainWait.Set();
|
||||||
|
}
|
||||||
|
|
||||||
runloop_fps++;
|
runloop_fps++;
|
||||||
bool ff = Global.ClientControls["Fast Forward"];
|
bool ff = Global.ClientControls["Fast Forward"];
|
||||||
bool updateFpsString = (runloop_last_ff != ff);
|
bool updateFpsString = (runloop_last_ff != ff);
|
||||||
|
|
Loading…
Reference in New Issue