Ryujinx/Ryujinx.UI/EmulationController.cs

73 lines
1.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Ryujinx.Graphics.Gal;
namespace Ryujinx.Core
{
public class EmutionController
{
private Thread EmulationThread;
private Switch Ns;
private IGalRenderer Renderer;
private bool IsPaused = false;
private bool IsShutDown = false;
public EmutionController(Switch Ns, IGalRenderer Renderer)
{
this.Ns = Ns;
this.Renderer = Renderer;
}
public void Start()
{
EmulationThread = new Thread(new ThreadStart(() =>
{
using (GLScreen Screen = new GLScreen(Ns, Renderer))
{
Ns.Finish += (Sender, Args) =>
{
Screen?.Exit();
};
Screen.Closed += (Sender, Args) =>
{
if(!IsShutDown)
Stop();
};
Screen.Run(60.0);
}
}));
EmulationThread.Start();
}
public void Stop()
{
IsPaused = false;
IsShutDown = true;
Ns.Os.ShutDown();
}
public async void Pause()
{
IsPaused = true;
lock (Ns)
{
while (IsPaused)
{
Thread.Sleep(1000);
}
}
}
public void Continue()
{
IsPaused = false;
}
}
}