Compare commits
5 Commits
43a7cca091
...
5863a6798f
Author | SHA1 | Date | |
---|---|---|---|
5863a6798f | |||
|
814cc5ed5e | ||
|
46a62ca9f7 | ||
|
323f7a44df | ||
|
7b85fd8ce8 |
@ -1,5 +1,3 @@
|
|||||||
using System.Collections;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace AxibugEmuOnline.Client
|
namespace AxibugEmuOnline.Client
|
||||||
@ -17,4 +15,13 @@ namespace AxibugEmuOnline.Client
|
|||||||
void SetupScheme();
|
void SetupScheme();
|
||||||
void StartGame(RomFile romFile);
|
void StartGame(RomFile romFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class IEnumCoreTool
|
||||||
|
{
|
||||||
|
public static bool IsNull(this IEmuCore core)
|
||||||
|
{
|
||||||
|
if (core == null) return true;
|
||||||
|
return core.Equals(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,47 @@
|
|||||||
using AxibugEmuOnline.Client.ClientCore;
|
using AxibugEmuOnline.Client.ClientCore;
|
||||||
|
using AxibugEmuOnline.Client.Event;
|
||||||
using MyNes.Core;
|
using MyNes.Core;
|
||||||
|
using System;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace AxibugEmuOnline.Client.Manager
|
namespace AxibugEmuOnline.Client.Manager
|
||||||
{
|
{
|
||||||
public class AppEmu
|
public class AppEmu
|
||||||
{
|
{
|
||||||
private GameObject m_emuInstance;
|
/// <summary>
|
||||||
|
/// unity的c#实现有bug,以接口类型保存的monobehaviour引用,!=和==运算符没有调用到monobehaviour重写过的运算符
|
||||||
|
/// 但是Equals方法可以,所以,这个接口判断为空请使用Equals
|
||||||
|
/// </summary>
|
||||||
private IEmuCore m_emuCore;
|
private IEmuCore m_emuCore;
|
||||||
|
|
||||||
|
public AppEmu()
|
||||||
|
{
|
||||||
|
Eventer.Instance.RegisterEvent(EEvent.OnMineJoinRoom, OnSelfJoinRoom);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnSelfJoinRoom()
|
||||||
|
{
|
||||||
|
//如果当前正在游戏中,就先结束游戏
|
||||||
|
if (!m_emuCore.IsNull()) StopGame();
|
||||||
|
|
||||||
|
var roomInfo = App.roomMgr.mineRoomMiniInfo;
|
||||||
|
roomInfo.FetchRomFileInRoomInfo(EnumPlatform.NES, (room, romFile) =>
|
||||||
|
{
|
||||||
|
if (!romFile.RomReady) //这个rom并没有下载,所以取消进入房间
|
||||||
|
{
|
||||||
|
App.roomMgr.SendLeavnRoom();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BeginGame(romFile);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void BeginGame(RomFile romFile)
|
public void BeginGame(RomFile romFile)
|
||||||
{
|
{
|
||||||
if (m_emuInstance != null) return;
|
if (!m_emuCore.Equals(null)) return;
|
||||||
|
|
||||||
switch (romFile.Platform)
|
switch (romFile.Platform)
|
||||||
{
|
{
|
||||||
@ -20,8 +50,6 @@ namespace AxibugEmuOnline.Client.Manager
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_emuInstance = m_emuCore.gameObject;
|
|
||||||
|
|
||||||
m_emuCore.StartGame(romFile);
|
m_emuCore.StartGame(romFile);
|
||||||
LaunchUI.Instance.HideMainMenu();
|
LaunchUI.Instance.HideMainMenu();
|
||||||
InGameUI.Instance.Show(romFile, m_emuCore);
|
InGameUI.Instance.Show(romFile, m_emuCore);
|
||||||
@ -31,9 +59,9 @@ namespace AxibugEmuOnline.Client.Manager
|
|||||||
|
|
||||||
public void StopGame()
|
public void StopGame()
|
||||||
{
|
{
|
||||||
if (m_emuInstance == null) return;
|
if (m_emuCore.IsNull()) return;
|
||||||
GameObject.Destroy(m_emuInstance);
|
GameObject.Destroy(m_emuCore.gameObject);
|
||||||
m_emuInstance = null;
|
m_emuCore = null;
|
||||||
|
|
||||||
InGameUI.Instance.Hide();
|
InGameUI.Instance.Hide();
|
||||||
LaunchUI.Instance.ShowMainMenu();
|
LaunchUI.Instance.ShowMainMenu();
|
||||||
|
@ -48,7 +48,7 @@ namespace AxibugEmuOnline.Client
|
|||||||
public int Page { get; private set; }
|
public int Page { get; private set; }
|
||||||
public string Hash => webData != null ? webData.hash : string.Empty;
|
public string Hash => webData != null ? webData.hash : string.Empty;
|
||||||
|
|
||||||
public event Action OnDownloadOver;
|
public event Action<RomFile> OnDownloadOver;
|
||||||
public event Action OnInfoFilled;
|
public event Action OnInfoFilled;
|
||||||
|
|
||||||
public RomFile(EnumPlatform platform, int index, int insidePage)
|
public RomFile(EnumPlatform platform, int index, int insidePage)
|
||||||
@ -73,7 +73,7 @@ namespace AxibugEmuOnline.Client
|
|||||||
File.WriteAllBytes(LocalFilePath, bytes);
|
File.WriteAllBytes(LocalFilePath, bytes);
|
||||||
hasLocalFile = true;
|
hasLocalFile = true;
|
||||||
}
|
}
|
||||||
OnDownloadOver?.Invoke();
|
OnDownloadOver?.Invoke(this);
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,13 +115,16 @@ namespace AxibugEmuOnline.Client
|
|||||||
downloadRequest = UnityWebRequest.Get($"{App.httpAPI.WebHost}/{webData.url}");
|
downloadRequest = UnityWebRequest.Get($"{App.httpAPI.WebHost}/{webData.url}");
|
||||||
yield return downloadRequest.SendWebRequest();
|
yield return downloadRequest.SendWebRequest();
|
||||||
|
|
||||||
if (downloadRequest.result != UnityWebRequest.Result.Success)
|
var request = downloadRequest;
|
||||||
|
downloadRequest = null;
|
||||||
|
|
||||||
|
if (request.result != UnityWebRequest.Result.Success)
|
||||||
{
|
{
|
||||||
callback(null);
|
callback(null);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
callback(downloadRequest.downloadHandler.data);
|
callback(request.downloadHandler.data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,7 +69,6 @@ namespace AxibugEmuOnline.Client
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void Pause()
|
public void Pause()
|
||||||
{
|
{
|
||||||
m_bPause = true;
|
m_bPause = true;
|
||||||
|
@ -18,7 +18,6 @@ namespace AxibugEmuOnline.Client
|
|||||||
{
|
{
|
||||||
m_step = step;
|
m_step = step;
|
||||||
|
|
||||||
|
|
||||||
switch (m_step)
|
switch (m_step)
|
||||||
{
|
{
|
||||||
//等待主机上报快照
|
//等待主机上报快照
|
||||||
|
@ -2,6 +2,7 @@ using AxibugEmuOnline.Client.ClientCore;
|
|||||||
using AxibugEmuOnline.Client.Event;
|
using AxibugEmuOnline.Client.Event;
|
||||||
using AxibugEmuOnline.Client.UI;
|
using AxibugEmuOnline.Client.UI;
|
||||||
using AxibugProtobuf;
|
using AxibugProtobuf;
|
||||||
|
using System;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.UI;
|
using UnityEngine.UI;
|
||||||
|
|
||||||
@ -27,23 +28,16 @@ namespace AxibugEmuOnline.Client
|
|||||||
{
|
{
|
||||||
base.Awake();
|
base.Awake();
|
||||||
|
|
||||||
Eventer.Instance.RegisterEvent<int>(EEvent.OnRoomListSingleUpdate, OnRoomSingleUpdate);
|
Eventer.Instance.RegisterEvent<int>(EEvent.OnRoomListSingleUpdate, OnRoomSignelUpdate);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnDestroy()
|
private void OnRoomSignelUpdate(int roomID)
|
||||||
{
|
{
|
||||||
Eventer.Instance.UnregisterEvent<int>(EEvent.OnRoomListSingleUpdate, OnRoomSingleUpdate);
|
if (this.roomID != roomID) return;
|
||||||
}
|
|
||||||
|
|
||||||
private void OnRoomSingleUpdate(int roomId)
|
if (App.roomMgr.GetRoomListMiniInfo(roomID, out var roomInfo))
|
||||||
{
|
|
||||||
if (roomId != roomID) return;
|
|
||||||
|
|
||||||
if (App.roomMgr.GetRoomListMiniInfo(roomId, out var roomInfo))
|
|
||||||
{
|
|
||||||
UpdateUI(roomInfo);
|
UpdateUI(roomInfo);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void SetData(object data)
|
public void SetData(object data)
|
||||||
{
|
{
|
||||||
@ -53,6 +47,20 @@ namespace AxibugEmuOnline.Client
|
|||||||
UpdateUI(roomInfo);
|
UpdateUI(roomInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override bool OnEnterItem()
|
||||||
|
{
|
||||||
|
if (!m_romFile.RomReady)
|
||||||
|
{
|
||||||
|
m_romFile.BeginDownload();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
App.roomMgr.SendJoinRoom(roomID, 1);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void UpdateUI(Protobuf_Room_MiniInfo roomInfo)
|
private void UpdateUI(Protobuf_Room_MiniInfo roomInfo)
|
||||||
{
|
{
|
||||||
var hostNick = roomInfo.GetHostNickName();
|
var hostNick = roomInfo.GetHostNickName();
|
||||||
@ -60,11 +68,11 @@ namespace AxibugEmuOnline.Client
|
|||||||
SetBaseInfo(string.Empty, $"<b>{hostNick}</b>µÄ·¿¼ä - {cur}/{max}");
|
SetBaseInfo(string.Empty, $"<b>{hostNick}</b>µÄ·¿¼ä - {cur}/{max}");
|
||||||
SetIcon(null);
|
SetIcon(null);
|
||||||
|
|
||||||
roomInfo.FetchRomFileInRoomInfo(EnumPlatform.NES, (romFile) =>
|
roomInfo.FetchRomFileInRoomInfo(EnumPlatform.NES, (room, romFile) =>
|
||||||
{
|
{
|
||||||
m_romFile = romFile;
|
if (room.RoomID != roomID) return;
|
||||||
|
|
||||||
if (romFile.ID == roomInfo.GameRomID)
|
m_romFile = romFile;
|
||||||
Txt.text = romFile.Alias;
|
Txt.text = romFile.Alias;
|
||||||
|
|
||||||
UpdateRomInfoView();
|
UpdateRomInfoView();
|
||||||
|
@ -12,6 +12,7 @@ namespace AxibugEmuOnline.Client
|
|||||||
{
|
{
|
||||||
Eventer.Instance.RegisterEvent<int>(EEvent.OnRoomListAllUpdate, OnRoomListUpdateAll);
|
Eventer.Instance.RegisterEvent<int>(EEvent.OnRoomListAllUpdate, OnRoomListUpdateAll);
|
||||||
Eventer.Instance.RegisterEvent<int>(EEvent.OnRoomListSingleClose, OnRoomClosed);
|
Eventer.Instance.RegisterEvent<int>(EEvent.OnRoomListSingleClose, OnRoomClosed);
|
||||||
|
Eventer.Instance.RegisterEvent<int>(EEvent.OnRoomListSingleAdd, OnRoomSingleAdd);
|
||||||
base.Awake();
|
base.Awake();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -19,6 +20,7 @@ namespace AxibugEmuOnline.Client
|
|||||||
protected override void OnDestroy()
|
protected override void OnDestroy()
|
||||||
{
|
{
|
||||||
Eventer.Instance.UnregisterEvent<int>(EEvent.OnRoomListAllUpdate, OnRoomListUpdateAll);
|
Eventer.Instance.UnregisterEvent<int>(EEvent.OnRoomListAllUpdate, OnRoomListUpdateAll);
|
||||||
|
Eventer.Instance.UnregisterEvent<int>(EEvent.OnRoomListSingleUpdate, OnRoomSingleAdd);
|
||||||
Eventer.Instance.UnregisterEvent<int>(EEvent.OnRoomListSingleClose, OnRoomClosed);
|
Eventer.Instance.UnregisterEvent<int>(EEvent.OnRoomListSingleClose, OnRoomClosed);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,6 +38,14 @@ namespace AxibugEmuOnline.Client
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnRoomSingleAdd(int obj)
|
||||||
|
{
|
||||||
|
if (m_entering)
|
||||||
|
{
|
||||||
|
RefreshUI();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void OnRoomListUpdateAll(int obj)
|
private void OnRoomListUpdateAll(int obj)
|
||||||
{
|
{
|
||||||
if (m_entering)
|
if (m_entering)
|
||||||
|
@ -38,11 +38,11 @@ namespace AxibugEmuOnline.Client
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static Dictionary<int, RomFile> s_RomFileCahcesInRoomInfo = new Dictionary<int, RomFile>();
|
private static Dictionary<int, RomFile> s_RomFileCahcesInRoomInfo = new Dictionary<int, RomFile>();
|
||||||
public static void FetchRomFileInRoomInfo(this Protobuf_Room_MiniInfo roomInfo, EnumPlatform platform, Action<RomFile> callback)
|
public static void FetchRomFileInRoomInfo(this Protobuf_Room_MiniInfo roomInfo, EnumPlatform platform, Action<Protobuf_Room_MiniInfo, RomFile> callback)
|
||||||
{
|
{
|
||||||
if (s_RomFileCahcesInRoomInfo.TryGetValue(roomInfo.GameRomID, out RomFile romFile))
|
if (s_RomFileCahcesInRoomInfo.TryGetValue(roomInfo.GameRomID, out RomFile romFile))
|
||||||
{
|
{
|
||||||
callback.Invoke(romFile);
|
callback.Invoke(roomInfo,romFile);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
switch (platform)
|
switch (platform)
|
||||||
@ -52,9 +52,9 @@ namespace AxibugEmuOnline.Client
|
|||||||
{
|
{
|
||||||
RomFile romFile = new RomFile(EnumPlatform.NES, 0, 0);
|
RomFile romFile = new RomFile(EnumPlatform.NES, 0, 0);
|
||||||
romFile.SetWebData(romWebData);
|
romFile.SetWebData(romWebData);
|
||||||
callback.Invoke(romFile);
|
|
||||||
|
|
||||||
s_RomFileCahcesInRoomInfo[roomInfo.GameRomID] = romFile;
|
s_RomFileCahcesInRoomInfo[roomInfo.GameRomID] = romFile;
|
||||||
|
|
||||||
|
callback.Invoke(roomInfo,romFile);
|
||||||
}));
|
}));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user