IEmuCore接口变更,StartGame会返回初始化失败的情况

This commit is contained in:
ALIENJACK\alien 2025-01-06 16:48:48 +08:00
parent ef0ab9ccb1
commit ef1c43d3fc
5 changed files with 61 additions and 50 deletions

View File

@ -13,7 +13,7 @@ namespace AxibugEmuOnline.Client
void Pause();
void Resume();
void SetupScheme();
void StartGame(RomFile romFile);
MsgBool StartGame(RomFile romFile);
void DoReset();
IControllerSetuper GetControllerSetuper();

View File

@ -56,19 +56,27 @@ namespace AxibugEmuOnline.Client.Manager
break;
}
m_emuCore.StartGame(romFile);
LaunchUI.Instance.HideMainMenu();
InGameUI.Instance.Show(romFile, m_emuCore);
m_emuCore.SetupScheme();
m_controllerSetuper = m_emuCore.GetControllerSetuper();
var result = m_emuCore.StartGame(romFile);
if (result)
{
LaunchUI.Instance.HideMainMenu();
InGameUI.Instance.Show(romFile, m_emuCore);
//自动分配0号手柄到0号手柄位
m_controllerSetuper.SetConnect(con0ToSlot: 0);
Eventer.Instance.PostEvent(EEvent.OnControllerConnectChanged);
Eventer.Instance.RegisterEvent(EEvent.OnRoomSlotDataChanged, OnSlotDataChanged);
m_emuCore.SetupScheme();
m_controllerSetuper = m_emuCore.GetControllerSetuper();
//自动分配0号手柄到0号手柄位
m_controllerSetuper.SetConnect(con0ToSlot: 0);
Eventer.Instance.PostEvent(EEvent.OnControllerConnectChanged);
Eventer.Instance.RegisterEvent(EEvent.OnRoomSlotDataChanged, OnSlotDataChanged);
}
else
{
StopGame();
OverlayManager.PopTip(result);
}
}
private void OnSlotDataChanged()

View File

@ -95,12 +95,13 @@ namespace AxibugEmuOnline.Client
var bytes = File.ReadAllBytes(LocalFilePath);
if (Path.GetExtension(LocalFilePath).ToLower() == ".zip")
{
var zip = new ZipInputStream(new MemoryStream(bytes));
var entry = zip.GetNextEntry() as ZipEntry;
while (entry != null)
var zip = new ZipInputStream(new MemoryStream(bytes));
while (true)
{
if (!entry.Name.ToLower().EndsWith(".nes")) continue;
var currentEntry = zip.GetNextEntry();
if (currentEntry == null) break;
if (!currentEntry.Name.ToLower().EndsWith(".nes")) continue;
var buffer = new byte[1024];
MemoryStream output = new MemoryStream();
@ -124,38 +125,38 @@ namespace AxibugEmuOnline.Client
private IEnumerator DownloadRemoteRom(Action<byte[]> callback)
{
downloadRequest = AxiHttpProxy.GetDownLoad($"{App.httpAPI.WebHost}/{webData.url}");
while (!downloadRequest.downloadHandler.isDone)
{
yield return null;
Debug.Log($"下载进度:{downloadRequest.downloadHandler.DownLoadPr} ->{downloadRequest.downloadHandler.loadedLenght}/{downloadRequest.downloadHandler.NeedloadedLenght}");
}
AxiHttpProxy.ShowAxiHttpDebugInfo(downloadRequest.downloadHandler);
downloadRequest = AxiHttpProxy.GetDownLoad($"{App.httpAPI.WebHost}/{webData.url}");
while (!downloadRequest.downloadHandler.isDone)
{
yield return null;
Debug.Log($"下载进度:{downloadRequest.downloadHandler.DownLoadPr} ->{downloadRequest.downloadHandler.loadedLenght}/{downloadRequest.downloadHandler.NeedloadedLenght}");
}
AxiHttpProxy.ShowAxiHttpDebugInfo(downloadRequest.downloadHandler);
var request = downloadRequest;
downloadRequest = null;
if (!request.downloadHandler.bHadErr)
callback(request.downloadHandler.data);
else
callback(null);
//downloadRequest = UnityWebRequest.Get($"{App.httpAPI.WebHost}/{webData.url}");
//yield return downloadRequest.SendWebRequest();
//var request = downloadRequest;
//downloadRequest = null;
//if (request.result != UnityWebRequest.Result.Success)
//{
// callback(null);
//}
//else
//{
// callback(request.downloadHandler.data);
//}
}
downloadRequest = null;
if (!request.downloadHandler.bHadErr)
callback(request.downloadHandler.data);
else
callback(null);
//downloadRequest = UnityWebRequest.Get($"{App.httpAPI.WebHost}/{webData.url}");
//yield return downloadRequest.SendWebRequest();
//var request = downloadRequest;
//downloadRequest = null;
//if (request.result != UnityWebRequest.Result.Success)
//{
// callback(null);
//}
//else
//{
// callback(request.downloadHandler.data);
//}
}
public void SetWebData(HttpAPI.Resp_RomInfo resp_RomInfo)
{

View File

@ -63,7 +63,7 @@ namespace AxibugEmuOnline.Client
/// <summary>
/// 指定ROM开始游戏
/// </summary>
public void StartGame(RomFile rom)
public MsgBool StartGame(RomFile rom)
{
StopGame();
@ -76,11 +76,13 @@ namespace AxibugEmuOnline.Client
try
{
NesCore = new NES(rom.FileName);
return true;
}
catch (Exception ex)
{
NesCore = null;
App.log.Error(ex.ToString());
return ex.Message;
}
}

View File

@ -19,7 +19,7 @@ namespace VirtualNes.Core
raw3 = (uint)states[3];
valid = true;
}
public bool HasButton(int player, EnumButtonType button)
{
uint raw = player switch