Merge pull request '修复一些拉取rom列表的bug' (#80) from Alienjack/AxibugEmuOnline:master into master

Reviewed-on: #80
This commit is contained in:
sin365 2025-01-06 20:31:44 +08:00
commit 12f8f0eea5
10 changed files with 254 additions and 230 deletions

View File

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

View File

@ -56,7 +56,9 @@ namespace AxibugEmuOnline.Client.Manager
break; break;
} }
m_emuCore.StartGame(romFile); var result = m_emuCore.StartGame(romFile);
if (result)
{
LaunchUI.Instance.HideMainMenu(); LaunchUI.Instance.HideMainMenu();
InGameUI.Instance.Show(romFile, m_emuCore); InGameUI.Instance.Show(romFile, m_emuCore);
@ -70,6 +72,12 @@ namespace AxibugEmuOnline.Client.Manager
Eventer.Instance.RegisterEvent(EEvent.OnRoomSlotDataChanged, OnSlotDataChanged); Eventer.Instance.RegisterEvent(EEvent.OnRoomSlotDataChanged, OnSlotDataChanged);
} }
else
{
StopGame();
OverlayManager.PopTip(result);
}
}
private void OnSlotDataChanged() private void OnSlotDataChanged()
{ {

View File

@ -1,4 +1,4 @@
using AxibugEmuOnline.Client.ClientCore; using AxibugEmuOnline.Client.ClientCore;
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
@ -12,21 +12,20 @@ namespace AxibugEmuOnline.Client
public string WebHost = "http://emu.axibug.com"; public string WebHost = "http://emu.axibug.com";
public string WebSiteApi => WebHost + "/api"; public string WebSiteApi => WebHost + "/api";
public delegate void GetRomListAPI(Action<Resp_GameList> callback, int page, int pageSize = 10); public delegate void GetRomListAPI(Action<int, Resp_GameList> callback, int page, int pageSize = 10);
public delegate void SearchRomListAPI(Action<Resp_GameList> callback, string searchKey, int page, int pageSize = 10); public delegate void SearchRomListAPI(Action<int, Resp_GameList> callback, string searchKey, int page, int pageSize = 10);
public void GetNesRomList(Action<Resp_GameList> callback, int page, int pageSize = 10) public void GetNesRomList(Action<int, Resp_GameList> callback, int page, int pageSize = 10)
{ {
App.StartCoroutine(GetNesRomListFlow(page, pageSize, callback)); App.StartCoroutine(GetNesRomListFlow(page, pageSize, callback));
} }
public void SearchNesRomList(Action<Resp_GameList> callback, string searchKey, int page, int pageSize = 10) public void SearchNesRomList(Action<int, Resp_GameList> callback, string searchKey, int page, int pageSize = 10)
{ {
App.StartCoroutine(SearchNesRomListFlow(searchKey, page, pageSize, callback)); App.StartCoroutine(SearchNesRomListFlow(searchKey, page, pageSize, callback));
} }
private IEnumerator SearchNesRomListFlow(string searchKey, int page, int pageSize, Action<Resp_GameList> callback) private IEnumerator SearchNesRomListFlow(string searchKey, int page, int pageSize, Action<int, Resp_GameList> callback)
{ {
if (!string.IsNullOrEmpty(searchKey)) if (!string.IsNullOrEmpty(searchKey))
{ {
string oldsearch = searchKey; string oldsearch = searchKey;
@ -48,19 +47,19 @@ namespace AxibugEmuOnline.Client
yield return request.SendWebRequest; yield return request.SendWebRequest;
if (!request.downloadHandler.isDone) if (!request.downloadHandler.isDone)
{ {
callback.Invoke(null); callback.Invoke(page, null);
yield break; yield break;
} }
if (!request.downloadHandler.bHadErr) if (!request.downloadHandler.bHadErr)
{ {
var resp = JsonUtility.FromJson<Resp_GameList>(request.downloadHandler.text); var resp = JsonUtility.FromJson<Resp_GameList>(request.downloadHandler.text);
callback.Invoke(resp); callback.Invoke(page, resp);
yield break; yield break;
} }
App.log.Error(request.downloadHandler.ErrInfo); App.log.Error(request.downloadHandler.ErrInfo);
callback.Invoke(null); callback.Invoke(page, null);
/* /*
UnityWebRequest request = UnityWebRequest.Get($"{WebSiteApi}/NesRomList?Page={page}&PageSize={pageSize}&SearchKey={searchKey}"); UnityWebRequest request = UnityWebRequest.Get($"{WebSiteApi}/NesRomList?Page={page}&PageSize={pageSize}&SearchKey={searchKey}");
@ -73,7 +72,7 @@ namespace AxibugEmuOnline.Client
}*/ }*/
} }
private IEnumerator GetNesRomListFlow(int page, int pageSize, Action<Resp_GameList> callback) private IEnumerator GetNesRomListFlow(int page, int pageSize, Action<int, Resp_GameList> callback)
{ {
string url = $"{WebSiteApi}/NesRomList?Page={page}&PageSize={pageSize}"; string url = $"{WebSiteApi}/NesRomList?Page={page}&PageSize={pageSize}";
App.log.Info($"GetRomList=>{url}"); App.log.Info($"GetRomList=>{url}");
@ -81,7 +80,7 @@ namespace AxibugEmuOnline.Client
yield return request.SendWebRequest; yield return request.SendWebRequest;
if (!request.downloadHandler.isDone) if (!request.downloadHandler.isDone)
{ {
callback.Invoke(null); callback.Invoke(page, null);
yield break; yield break;
} }
@ -89,12 +88,12 @@ namespace AxibugEmuOnline.Client
if (!request.downloadHandler.bHadErr) if (!request.downloadHandler.bHadErr)
{ {
var resp = JsonUtility.FromJson<Resp_GameList>(request.downloadHandler.text); var resp = JsonUtility.FromJson<Resp_GameList>(request.downloadHandler.text);
callback.Invoke(resp); callback.Invoke(page, resp);
yield break; yield break;
} }
App.log.Error(request.downloadHandler.ErrInfo); App.log.Error(request.downloadHandler.ErrInfo);
callback.Invoke(null); callback.Invoke(page, null);
/* /*
UnityWebRequest request = UnityWebRequest.Get($"{WebSiteApi}/NesRomList?Page={page}&PageSize={pageSize}"); UnityWebRequest request = UnityWebRequest.Get($"{WebSiteApi}/NesRomList?Page={page}&PageSize={pageSize}");
yield return request.SendWebRequest(); yield return request.SendWebRequest();

View File

@ -96,11 +96,12 @@ namespace AxibugEmuOnline.Client
if (Path.GetExtension(LocalFilePath).ToLower() == ".zip") if (Path.GetExtension(LocalFilePath).ToLower() == ".zip")
{ {
var zip = new ZipInputStream(new MemoryStream(bytes)); var zip = new ZipInputStream(new MemoryStream(bytes));
var entry = zip.GetNextEntry() as ZipEntry; while (true)
while (entry != null)
{ {
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]; var buffer = new byte[1024];
MemoryStream output = new MemoryStream(); MemoryStream output = new MemoryStream();

View File

@ -75,14 +75,17 @@ namespace AxibugEmuOnline.Client
lastSearchKey = searchKey; lastSearchKey = searchKey;
if (string.IsNullOrWhiteSpace(searchKey)) if (string.IsNullOrWhiteSpace(searchKey))
{ {
m_romGetFunc((romList) => m_romGetFunc((page, romList) =>
{ {
//TODO 请求失败对于romList为空时的处理
FetchPageCmd.Clear(); FetchPageCmd.Clear();
nesRomFileIdMapper.Clear(); nesRomFileIdMapper.Clear();
nesRomFileNameMapper.Clear(); nesRomFileNameMapper.Clear();
if (romList != null)
nesRomFetchList = new RomFile[romList.resultAllCount]; nesRomFetchList = new RomFile[romList.resultAllCount];
else
nesRomFetchList = new RomFile[0];
for (int i = 0; i < nesRomFetchList.Length; i++) for (int i = 0; i < nesRomFetchList.Length; i++)
{ {
//以后考虑用对象池实例化RomFile //以后考虑用对象池实例化RomFile
@ -95,14 +98,17 @@ namespace AxibugEmuOnline.Client
} }
else else
{ {
m_romSearchFunc((romList) => m_romSearchFunc((page, romList) =>
{ {
//TODO 请求失败对于romList为空时的处理
FetchPageCmd.Clear(); FetchPageCmd.Clear();
nesRomFileIdMapper.Clear(); nesRomFileIdMapper.Clear();
nesRomFileNameMapper.Clear(); nesRomFileNameMapper.Clear();
if (romList != null)
nesRomFetchList = new RomFile[romList.resultAllCount]; nesRomFetchList = new RomFile[romList.resultAllCount];
else
nesRomFetchList = new RomFile[0];
for (int i = 0; i < nesRomFetchList.Length; i++) for (int i = 0; i < nesRomFetchList.Length; i++)
{ {
//以后考虑用对象池实例化RomFile //以后考虑用对象池实例化RomFile
@ -115,33 +121,47 @@ namespace AxibugEmuOnline.Client
} }
} }
bool m_needFetch = false;
public void BeginFetchRomInfo(RomFile romFile) public void BeginFetchRomInfo(RomFile romFile)
{ {
if (romFile.InfoReady) return; if (romFile.InfoReady) return;
FetchPageCmd.Add(romFile.Page); if (FetchPageCmd.Add(romFile.Page))
m_needFetch = true;
} }
public void ExecuteFetchRomInfo() public void ExecuteFetchRomInfo()
{ {
if (FetchPageCmd.Count == 0) return; if (FetchPageCmd.Count == 0) return;
if (!m_needFetch) return;
foreach (var pageNo in FetchPageCmd) foreach (var pageNo in FetchPageCmd)
{ {
if (!string.IsNullOrEmpty(lastSearchKey)) if (!string.IsNullOrEmpty(lastSearchKey))
{ {
m_romSearchFunc(SaveRomInfoFromWeb, lastSearchKey, pageNo, PAGE_SIZE); m_romSearchFunc((page, resp) =>
{
FetchPageCmd.Remove(page);
SaveRomInfoFromWeb(resp);
}, lastSearchKey, pageNo, PAGE_SIZE);
} }
else else
{ {
m_romGetFunc(SaveRomInfoFromWeb, pageNo, PAGE_SIZE); m_romGetFunc((page, resp) =>
{
FetchPageCmd.Remove(page);
SaveRomInfoFromWeb(resp);
}, pageNo, PAGE_SIZE);
} }
} }
FetchPageCmd.Clear();
m_needFetch = false;
} }
private void SaveRomInfoFromWeb(Resp_GameList resp) private void SaveRomInfoFromWeb(Resp_GameList resp)
{ {
if (resp == null) return;
for (int i = 0; i < resp.gameList.Count; i++) for (int i = 0; i < resp.gameList.Count; i++)
{ {
var webData = resp.gameList[i]; var webData = resp.gameList[i];

View File

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

View File

@ -32,8 +32,6 @@
_Power2("Power",Float)=50.0 _Power2("Power",Float)=50.0
_Frequency2("Frequency",Float)=2.1 _Frequency2("Frequency",Float)=2.1
_Speed2("Speed",Float)=0.3 _Speed2("Speed",Float)=0.3
_Gamma("GAMMA",float) = 2.2
} }
SubShader SubShader
@ -154,8 +152,6 @@
float _Frequency2; float _Frequency2;
float _Speed2; float _Speed2;
float _Gamma;
fixed4 frag(v2f IN) : SV_Target fixed4 frag(v2f IN) : SV_Target
{ {
float2 uv= IN.texcoord; float2 uv= IN.texcoord;
@ -200,8 +196,6 @@
clip (fragColor.a - 0.001); clip (fragColor.a - 0.001);
#endif #endif
fragColor = pow(fragColor,1/_Gamma);
return fragColor; return fragColor;
} }

View File

@ -207,7 +207,7 @@ namespace VirtualNes
{ {
for (byte i = 0; i < 8; i++) for (byte i = 0; i < 8; i++)
{ {
SetCRAM_1K_Bank(i, bank * 8 + 1); SetCRAM_1K_Bank(i, bank * 8 + i);
} }
} }

View File

@ -40,7 +40,7 @@ namespace VirtualNes.Core
irq_latch = 0; irq_latch = 0;
irq_clock = 0; irq_clock = 0;
reg[9] = 1; //reg[9] = 1;
SetPROM_32K_Bank(0, 1, PROM_8K_SIZE - 2, PROM_8K_SIZE - 1); SetPROM_32K_Bank(0, 1, PROM_8K_SIZE - 2, PROM_8K_SIZE - 1);
SetVROM_8K_Bank(0); SetVROM_8K_Bank(0);