1
0

IEmuCore从接口修改为抽象类

This commit is contained in:
ALIENJACK\alien 2025-04-29 16:19:09 +08:00
parent e5f497a163
commit 902dc95d19
12 changed files with 129 additions and 141 deletions
AxibugEmuOnline.Client/Assets/Script/AppMain

View File

@ -1,4 +1,4 @@
using AxibugEmuOnline.Client;
using AxibugEmuOnline.Client;
using AxibugEmuOnline.Client.ClientCore;
using AxibugProtobuf;
using Essgee;
@ -17,19 +17,19 @@ using System.Text;
using UnityEngine;
using UnityEngine.UI;
public class UEssgee : MonoBehaviour, IEmuCore
public class UEssgee : IEmuCore
{
public static UEssgee instance;
public static System.Diagnostics.Stopwatch sw = System.Diagnostics.Stopwatch.StartNew();
public static bool bInGame => instance?.emulatorHandler?.IsRunning == true ? true : false;
public RomPlatformType Platform => mPlatform;
public override RomPlatformType Platform => mPlatform;
public uint Frame => (uint)emulatorHandler.AxiEmuRunFrame;
public override uint Frame => (uint)emulatorHandler.AxiEmuRunFrame;
public Texture OutputPixel => graphicsHandler.rawBufferWarper;
public override Texture OutputPixel => graphicsHandler.rawBufferWarper;
public RawImage DrawCanvas => graphicsHandler.DrawCanvas;
public override RawImage DrawCanvas => graphicsHandler.DrawCanvas;
public static bool bLogicUpdatePause { get; private set; }
#region
@ -71,38 +71,38 @@ public class UEssgee : MonoBehaviour, IEmuCore
}
#region EmuCore接入实现
#region EmuCore接入实现
public object GetState()
public override object GetState()
{
return emulatorHandler.GetStateData();
}
public byte[] GetStateBytes()
public override byte[] GetStateBytes()
{
return emulatorHandler.GetStateData();
}
public void LoadState(object state)
public override void LoadState(object state)
{
emulatorHandler.SetStateData((byte[])state);
}
public void LoadStateFromBytes(byte[] data)
public override void LoadStateFromBytes(byte[] data)
{
emulatorHandler.SetStateData(data);
}
public void Pause()
public override void Pause()
{
bLogicUpdatePause = false;
}
public void Resume()
public override void Resume()
{
bLogicUpdatePause = true;
}
public MsgBool StartGame(RomFile romFile)
public override MsgBool StartGame(RomFile romFile)
{
mPlatform = romFile.Platform;
@ -110,7 +110,7 @@ public class UEssgee : MonoBehaviour, IEmuCore
bLogicUpdatePause = true;
//保存当前正在进行的游戏存档
//保存当前正在进行的游戏存档
if (emulatorHandler != null && !emulatorHandler.IsRunning)
{
emulatorHandler.SaveCartridge();
@ -119,10 +119,10 @@ public class UEssgee : MonoBehaviour, IEmuCore
if (LoadAndRunCartridge(romFile.LocalFilePath))
return true;
else
return "Rom加载失败";
return "Rom加载失败";
}
public void Dispose()
public override void Dispose()
{
if (!emulatorHandler.IsRunning)
{
@ -131,36 +131,36 @@ public class UEssgee : MonoBehaviour, IEmuCore
ShutdownEmulation();
}
public void DoReset()
public override void DoReset()
{
emulatorHandler.SaveCartridge();
emulatorHandler.Reset();
}
public IControllerSetuper GetControllerSetuper()
public override IControllerSetuper GetControllerSetuper()
{
return mUniKeyboard.ControllerMapper;
}
public bool PushEmulatorFrame()
public override bool PushEmulatorFrame()
{
if (!emulatorHandler.IsRunning) return false;
if (!bLogicUpdatePause) return false;
//采集本帧Input
//采集本帧Input
bool bhadNext = mUniKeyboard.SampleInput();
//如果未收到Input数据,核心帧不推进
//如果未收到Input数据,核心帧不推进
if (!bhadNext) return false;
emulatorHandler.Update_Frame();
return true;
}
public void AfterPushFrame()
public override void AfterPushFrame()
{
}
public void GetAudioParams(out int frequency, out int channels)
public override void GetAudioParams(out int frequency, out int channels)
{
frequency = soundHandler.sampleRate;
channels = soundHandler.channle;
@ -169,10 +169,10 @@ public class UEssgee : MonoBehaviour, IEmuCore
void InitAll(IGameMetaReources metaresources, IEssgeeIOSupport uegIO, string CustonDataDir)
{
//初始化配置
//初始化配置
InitAppEnvironment(CustonDataDir, uegIO);
InitEmu();
//细节初始化
//细节初始化
InitializeHandlers(metaresources);
}
@ -218,7 +218,7 @@ public class UEssgee : MonoBehaviour, IEmuCore
if (AppEnvironment.EnableLogger)
{
//TODO 关闭Debug
//TODO 关闭Debug
//Logger.Flush();
//Logger.Close();
}
@ -229,7 +229,7 @@ public class UEssgee : MonoBehaviour, IEmuCore
//keysDown = new List<MotionKey>();
}
#region
#region
private void InitializeHandlers(IGameMetaReources metaresources)
{
@ -277,7 +277,7 @@ public class UEssgee : MonoBehaviour, IEmuCore
#endregion
void Dispose(bool disposing)
{
//TODO 释放时
//TODO 释放时
//if (disposing)
//{
// if (components != null) components.Dispose();
@ -289,10 +289,10 @@ public class UEssgee : MonoBehaviour, IEmuCore
//base.Dispose(disposing);
}
#region
#region
private static void LoadConfiguration()
{
//TODO 暂时跳过这里的配置加载
//TODO 暂时跳过这里的配置加载
//Directory.CreateDirectory(EmuStandInfo.programDataDirectory);
//if (!File.Exists(EmuStandInfo.programConfigPath) || (EmuStandInfo.Configuration = EmuStandInfo.programConfigPath.DeserializeFromFile<Configuration>()) == null)
//{
@ -397,12 +397,12 @@ public class UEssgee : MonoBehaviour, IEmuCore
}
public static void SaveConfiguration()
{
//不用保存这个配置
//不用保存这个配置
//EmuStandInfo.Configuration.SerializeToFile(EmuStandInfo.programConfigPath);
}
#endregion
#region
#region
public void SetEmuFpsLimit(bool bOpen)
{
@ -427,12 +427,12 @@ public class UEssgee : MonoBehaviour, IEmuCore
}
#endregion
#region
#region
private void PowerOnWithoutCartridge(Type machineType)
{
//TODO IsRecording?? 可能需要实现
//TODO IsRecording?? 可能需要实现
//if (soundHandler.IsRecording)
// soundHandler.CancelRecording();
@ -456,7 +456,7 @@ public class UEssgee : MonoBehaviour, IEmuCore
var (machineType, romData) = CartridgeLoader.Load(fileName, "ROM image");
//TODO IsRecording?? 可能需要实现
//TODO IsRecording?? 可能需要实现
//if (soundHandler.IsRecording)
// soundHandler.CancelRecording();
@ -481,13 +481,13 @@ public class UEssgee : MonoBehaviour, IEmuCore
//toggleLayersToolStripMenuItem.Enabled = enableChannelsToolStripMenuItem.Enabled = true;
//初始化不同平台的按钮
//初始化不同平台的按钮
mUniKeyboard.Init(emulatorHandler.emulator);
emulatorHandler.Startup();
//初始化音频
//初始化音频
soundHandler.Initialize();
//SizeAndPositionWindow();
@ -549,7 +549,7 @@ public class UEssgee : MonoBehaviour, IEmuCore
//{
if (!AppEnvironment.TemporaryDisableCustomExceptionForm)
{
//TODO debug窗口
//TODO debug窗口
//(_, ExceptionResult result, string prefix, string postfix) = ExceptionForm.GetExceptionInfo(ex);
//if (result == ExceptionResult.Continue)
@ -661,7 +661,7 @@ public class UEssgee : MonoBehaviour, IEmuCore
}
#endregion
#region
#region
private void EmulatorHandler_SendLogMessage(object sender, SendLogMessageEventArgs e)
{
@ -699,7 +699,7 @@ public class UEssgee : MonoBehaviour, IEmuCore
private void EmulatorHandler_SizeScreen(object sender, SizeScreenEventArgs e)
{
//TODO 待实现 屏幕大小
//TODO 待实现 屏幕大小
//this.CheckInvokeMethod(delegate ()
//{
@ -710,7 +710,7 @@ public class UEssgee : MonoBehaviour, IEmuCore
private void EmulatorHandler_ChangeViewport(object sender, ChangeViewportEventArgs e)
{
//TODO 待实现
//TODO 待实现
//this.CheckInvokeMethod(delegate ()
//{
@ -721,7 +721,7 @@ public class UEssgee : MonoBehaviour, IEmuCore
private void EmulatorHandler_PollInput(object sender, PollInputEventArgs e)
{
//TODO Input实现
//TODO Input实现
//e.Keyboard = mUniKeyboard.mKeyCodeCore.GetPressedKeys();
e.Keyboard.AddRange(mUniKeyboard.GetPressedKeys());
@ -775,7 +775,7 @@ public class UEssgee : MonoBehaviour, IEmuCore
/* Images, ex. GB Printer printouts */
//image.Save(filePath);
//TODO 图像存储
//TODO 图像存储
}
else if (e.Data is byte[] raw)
{
@ -801,7 +801,7 @@ public class UEssgee : MonoBehaviour, IEmuCore
if (emulatorHandler.IsPaused)
{
//TODO 音频暂停?
//TODO 音频暂停?
//soundHandler?.ClearSampleBuffer();
}
}
@ -825,7 +825,7 @@ public class UEssgee : MonoBehaviour, IEmuCore
// waveHeader.FileLength += (uint)e.MixedSamples.Length;
//}
//TODO 音频处理
//TODO 音频处理
//soundHandler.SubmitSamples(e.MixedSamples, e.ChannelSamples, e.MixedSamples.Length);
soundHandler.SubmitSamples(e.MixedSamples, e.ChannelSamples, e.MixedSamplesLength);
}

View File

@ -9,7 +9,7 @@ using System.Text;
using UnityEngine;
using UnityEngine.UI;
public class UMAME : MonoBehaviour, IEmuCore
public class UMAME : IEmuCore
{
public static UMAME instance { get; private set; }
public MAMEEmu emu { get; private set; }
@ -38,9 +38,9 @@ public class UMAME : MonoBehaviour, IEmuCore
public string EmuDataPath { get { return App.PersistentDataPath(Platform); } }
public string RomPath => EmuDataPath + "/RemoteRoms/";
public string SavePath => EmuDataPath + "/sav/";
public RomPlatformType Platform { get { return mPlatform; } }
public override RomPlatformType Platform { get { return mPlatform; } }
RomPlatformType mPlatform = RomPlatformType.Cps1;
public uint Frame => (uint)emu.currEmuFrame;
public override uint Frame => (uint)emu.currEmuFrame;
void Awake()
{
instance = this;
@ -67,31 +67,31 @@ public class UMAME : MonoBehaviour, IEmuCore
StopGame();
}
#region
public object GetState()
public override object GetState()
{
return SaveState();
}
public byte[] GetStateBytes()
public override byte[] GetStateBytes()
{
return SaveState();
}
public void LoadState(object state)
public override void LoadState(object state)
{
LoadState((byte[])state);
}
public void LoadStateFromBytes(byte[] data)
public override void LoadStateFromBytes(byte[] data)
{
LoadState(data);
}
public void Pause()
public override void Pause()
{
bLogicUpdatePause = false;
}
public void Resume()
public override void Resume()
{
bLogicUpdatePause = true;
}
public MsgBool StartGame(RomFile romFile)
public override MsgBool StartGame(RomFile romFile)
{
mPlatform = romFile.Platform;
mTimeSpan.InitStandTime();
@ -100,22 +100,22 @@ public class UMAME : MonoBehaviour, IEmuCore
else
return "Rom加载失败";
}
public void Dispose()
public override void Dispose()
{
StopGame();
}
public void DoReset()
public override void DoReset()
{
StopGame();
LoadGame(mChangeRomName, false);
}
public IControllerSetuper GetControllerSetuper()
public override IControllerSetuper GetControllerSetuper()
{
return mUniKeyboard.ControllerMapper;
}
public void GetAudioParams(out int frequency, out int channels)
public override void GetAudioParams(out int frequency, out int channels)
{
mUniSoundPlayer.GetAudioParams(out frequency, out channels);
}
@ -160,7 +160,7 @@ public class UMAME : MonoBehaviour, IEmuCore
}
}
public bool PushEmulatorFrame()
public override bool PushEmulatorFrame()
{
if (!bInGame) return false;
if (!bLogicUpdatePause) return false;
@ -175,7 +175,7 @@ public class UMAME : MonoBehaviour, IEmuCore
emu.UpdateFrame();
return true;
}
public void AfterPushFrame()
public override void AfterPushFrame()
{
mFPS.text = ($"fpsv {mUniVideoPlayer.videoFPS.ToString("F2")} fpsa {mUniSoundPlayer.audioFPS.ToString("F2")} ,Idx:{App.roomMgr.netReplay?.mCurrClientFrameIdx},RIdx:{App.roomMgr.netReplay?.mRemoteFrameIdx},RForward:{App.roomMgr.netReplay?.mRemoteForwardCount} ,RD:{App.roomMgr.netReplay?.mRemoteForwardCount} ,D:{App.roomMgr.netReplay?.mDiffFrameCount} ,Q:{App.roomMgr.netReplay?.mNetReplayQueue.Count}");
}
@ -227,9 +227,9 @@ public class UMAME : MonoBehaviour, IEmuCore
}
public Texture OutputPixel => mUniVideoPlayer.rawBufferWarper;
public override Texture OutputPixel => mUniVideoPlayer.rawBufferWarper;
public RawImage DrawCanvas => mUniVideoPlayer.DrawCanvas;
public override RawImage DrawCanvas => mUniVideoPlayer.DrawCanvas;
}

View File

@ -11,7 +11,7 @@ using VirtualNes.Core.Debug;
namespace AxibugEmuOnline.Client
{
public class NesEmulator : MonoBehaviour, IEmuCore
public class NesEmulator : IEmuCore
{
public VideoProvider VideoProvider;
public AudioProvider AudioProvider;
@ -35,12 +35,12 @@ namespace AxibugEmuOnline.Client
AudioProvider.NesEmu = this;
}
public RomPlatformType Platform => RomPlatformType.Nes;
public override RomPlatformType Platform => RomPlatformType.Nes;
private CoreSupporter m_coreSupporter;
/// <summary>
/// 指定ROM开始游戏
/// </summary>
public MsgBool StartGame(RomFile rom)
public override MsgBool StartGame(RomFile rom)
{
StopGame();
@ -63,28 +63,28 @@ namespace AxibugEmuOnline.Client
}
}
public void Pause()
public override void Pause()
{
IsPause = true;
}
public void Resume()
public override void Resume()
{
IsPause = false;
}
public void DoReset()
public override void DoReset()
{
NesCore.Reset();
}
public void LoadState(object state)
public override void LoadState(object state)
{
NesCore.LoadState((State)state);
}
public object GetState()
public override object GetState()
{
return NesCore.GetState();
}
@ -93,7 +93,7 @@ namespace AxibugEmuOnline.Client
/// 获取即时存档
/// </summary>
/// <returns></returns>
public byte[] GetStateBytes()
public override byte[] GetStateBytes()
{
return NesCore.GetState().ToBytes();
}
@ -104,14 +104,14 @@ namespace AxibugEmuOnline.Client
/// <param
/// name="data">
/// </param>
public void LoadStateFromBytes(byte[] data)
public override void LoadStateFromBytes(byte[] data)
{
var st = new State();
st.FromByte(data);
NesCore.LoadState(st);
}
public uint Frame => NesCore.FrameCount;
public override uint Frame => NesCore.FrameCount;
/// <summary>
/// 停止游戏
@ -127,7 +127,7 @@ namespace AxibugEmuOnline.Client
private ControllerState m_lastState;
#endif
//推进帧
public bool PushEmulatorFrame()
public override bool PushEmulatorFrame()
{
if (NesCore == null || IsPause) return false;
@ -145,23 +145,22 @@ namespace AxibugEmuOnline.Client
NesCore.pad.Sync(controlState);
NesCore.EmulateFrame(true);
return true;
}
public unsafe void AfterPushFrame()
public override unsafe void AfterPushFrame()
{
var screenBuffer = NesCore.ppu.GetScreenPtr();
VideoProvider.SetDrawData(screenBuffer);
}
public IControllerSetuper GetControllerSetuper()
public override IControllerSetuper GetControllerSetuper()
{
return ControllerMapper;
}
public void Dispose()
public override void Dispose()
{
StopGame();
}
@ -197,9 +196,9 @@ namespace AxibugEmuOnline.Client
}
#endif
public Texture OutputPixel => VideoProvider.OutputPixel;
public RawImage DrawCanvas => VideoProvider.Drawer;
public void GetAudioParams(out int frequency, out int channels)
public override Texture OutputPixel => VideoProvider.OutputPixel;
public override RawImage DrawCanvas => VideoProvider.Drawer;
public override void GetAudioParams(out int frequency, out int channels)
{
AudioProvider.GetAudioParams(out frequency, out channels);
}

View File

@ -11,7 +11,7 @@ using UnityEngine;
using UnityEngine.UI;
using CartridgeMetadata = StoicGoose.Core.Cartridges.Metadata;
public class UStoicGoose : MonoBehaviour, IEmuCore
public class UStoicGoose : IEmuCore
{
public static UStoicGoose instance;
public static System.Diagnostics.Stopwatch sw = System.Diagnostics.Stopwatch.StartNew();
@ -49,44 +49,44 @@ public class UStoicGoose : MonoBehaviour, IEmuCore
public string CurrRomName { get; private set; }
#region IEmuCore
public RomPlatformType Platform => mPlatform;
public override RomPlatformType Platform => mPlatform;
public uint Frame => (uint)emulatorHandler.AxiEmuRunFrame;
public override uint Frame => (uint)emulatorHandler.AxiEmuRunFrame;
public Texture OutputPixel => graphicsHandler.rawBufferWarper;
public override Texture OutputPixel => graphicsHandler.rawBufferWarper;
public RawImage DrawCanvas => graphicsHandler.DrawCanvas;
public object GetState()
public override RawImage DrawCanvas => graphicsHandler.DrawCanvas;
public override object GetState()
{
throw new NotImplementedException();
}
public byte[] GetStateBytes()
public override byte[] GetStateBytes()
{
throw new NotImplementedException();
}
public void LoadState(object state)
public override void LoadState(object state)
{
throw new NotImplementedException();
}
public void LoadStateFromBytes(byte[] data)
public override void LoadStateFromBytes(byte[] data)
{
throw new NotImplementedException();
}
public void Pause()
public override void Pause()
{
PauseEmulation();
}
public void Resume()
public override void Resume()
{
UnpauseEmulation();
}
public MsgBool StartGame(RomFile romFile)
public override MsgBool StartGame(RomFile romFile)
{
mPlatform = romFile.Platform;
@ -105,7 +105,7 @@ public class UStoicGoose : MonoBehaviour, IEmuCore
return "Rom加载失败";
}
public void Dispose()
public override void Dispose()
{
//保存当前正在进行的游戏存档
if (emulatorHandler != null && !emulatorHandler.IsRunning)
@ -115,27 +115,27 @@ public class UStoicGoose : MonoBehaviour, IEmuCore
EmuClose();
}
public void DoReset()
public override void DoReset()
{
ResetEmulation();
}
public IControllerSetuper GetControllerSetuper()
public override IControllerSetuper GetControllerSetuper()
{
throw new NotImplementedException();
}
public bool PushEmulatorFrame()
public override bool PushEmulatorFrame()
{
throw new NotImplementedException();
}
public void AfterPushFrame()
public override void AfterPushFrame()
{
throw new NotImplementedException();
}
public void GetAudioParams(out int frequency, out int channels)
public override void GetAudioParams(out int frequency, out int channels)
{
throw new NotImplementedException();
}

View File

@ -4,52 +4,41 @@ using UnityEngine.UI;
namespace AxibugEmuOnline.Client
{
public interface IEmuCore
public abstract class IEmuCore : MonoBehaviour
{
GameObject gameObject { get; }
/// <summary> 获得模拟器核心中的状态快照对象 </summary>
object GetState();
public abstract object GetState();
/// <summary> 获得模拟器核心中的状态快照字节数据 </summary>
byte[] GetStateBytes();
public abstract byte[] GetStateBytes();
/// <summary> 加载状态快照 </summary>
/// <param name="state">该对象应该来自核心的<see cref="GetState"/>方法的返回值,或是从<see cref="GetStateBytes"/>返回的byte数组构建</param>
void LoadState(object state);
public abstract void LoadState(object state);
/// <summary> 加载状态快照 </summary>
/// <param name="data">该对象应该来自核心的<see cref="GetStateBytes"/>返回的byte数组</param>
void LoadStateFromBytes(byte[] data);
public abstract void LoadStateFromBytes(byte[] data);
/// <summary> 暂停核心推帧 </summary>
void Pause();
public abstract void Pause();
/// <summary> 恢复核心推帧(从Pause状态恢复) </summary>
void Resume();
public abstract void Resume();
/// <summary> 启动模拟器逻辑 </summary>
MsgBool StartGame(RomFile romFile);
public abstract MsgBool StartGame(RomFile romFile);
/// <summary> 释放模拟器核心 </summary>
void Dispose();
public abstract void Dispose();
/// <summary> 重置核心,通常由模拟器核心提供的功能 </summary>
void DoReset();
public abstract void DoReset();
/// <summary> 获得模拟器核心的控制器设置器 </summary>
/// <returns></returns>
IControllerSetuper GetControllerSetuper();
public abstract IControllerSetuper GetControllerSetuper();
/// <summary> 核心所属平台 </summary>
RomPlatformType Platform { get; }
public abstract RomPlatformType Platform { get; }
/// <summary> 获取当前模拟器帧序号,在加载快照和Reset后,应当重置为0 </summary>
uint Frame { get; }
public abstract uint Frame { get; }
/// <summary> 模拟器核心推帧 </summary>
bool PushEmulatorFrame();
public abstract bool PushEmulatorFrame();
/// <summary> 模拟器核心推帧结束 </summary>
void AfterPushFrame();
public void GetAudioParams(out int frequency, out int channels);
Texture OutputPixel { get; }
RawImage DrawCanvas { get; }
}
public static class IEnumCoreTool
{
public static bool IsNull(this IEmuCore core)
{
if (core == null) return true;
return core.Equals(null);
}
public abstract void AfterPushFrame();
public abstract void GetAudioParams(out int frequency, out int channels);
public abstract Texture OutputPixel { get; }
public abstract RawImage DrawCanvas { get; }
}
}

View File

@ -29,7 +29,7 @@ namespace AxibugEmuOnline.Client.Manager
private void OnSelfJoinRoom()
{
//如果当前正在游戏中,就先结束游戏
if (!m_emuCore.IsNull()) StopGame();
if (m_emuCore != null) StopGame();
var roomInfo = App.roomMgr.mineRoomMiniInfo;
roomInfo.FetchRomFileInRoomInfo((_, romFile) =>
@ -48,7 +48,7 @@ namespace AxibugEmuOnline.Client.Manager
public void BeginGame(RomFile romFile)
{
if (!m_emuCore.IsNull()) return;
if (m_emuCore != null) return;
switch (romFile.Platform)
{
@ -120,7 +120,7 @@ namespace AxibugEmuOnline.Client.Manager
public void StopGame()
{
if (m_emuCore.IsNull()) return;
if (m_emuCore == null) return;
m_emuCore.Dispose();
GameObject.Destroy(m_emuCore.gameObject);
m_emuCore = null;
@ -133,7 +133,7 @@ namespace AxibugEmuOnline.Client.Manager
public void ResetGame()
{
if (m_emuCore.IsNull()) return;
if (m_emuCore == null) return;
m_emuCore.DoReset();
}

View File

@ -65,7 +65,7 @@ namespace AxibugEmuOnline.Client
void PushCoreFrame()
{
if (Core.IsNull()) return;
if (Core == null) return;
//fluash netMsg
NetMsg.Instance.DequeueNesMsg();

View File

@ -32,7 +32,7 @@ namespace AxibugEmuOnline.Client
{
get
{
if (m_gameUI.Core.IsNull()) return false;
if (m_gameUI.Core == null) return false;
var isSetMode = App.settings.ScreenScaler.IsSetMode(m_gameUI.Core.Platform);

View File

@ -49,7 +49,7 @@ namespace AxibugEmuOnline.Client
private void Update()
{
if (CommandDispatcher.Instance.Mode == CommandListener.ScheduleType.Gaming && App.emu.Core.IsNull())
if (CommandDispatcher.Instance.Mode == CommandListener.ScheduleType.Gaming && App.emu.Core == null)
CommandDispatcher.Instance.Mode = CommandListener.ScheduleType.Normal;
}

View File

@ -90,7 +90,7 @@ public class ControllerInfo : MonoBehaviour
}
else
{
if (App.emu.Core.IsNull())
if (App.emu.Core == null)
{
SetDisconnect();
return;

View File

@ -35,7 +35,7 @@ public class ControllerInfoPanel : MonoBehaviour
}
else //不在房间中,直接设置
{
if (App.emu.Core.IsNull()) return;
if (App.emu.Core == null) return;
var setuper = App.emu.Core.GetControllerSetuper();
if (setuper == null) return;

View File

@ -24,7 +24,7 @@ public class XMBInfoBar : MonoBehaviour
private void Update()
{
ControlSlotInfoNode.SetActiveEx(!App.emu.Core.IsNull());
ControlSlotInfoNode.SetActiveEx(App.emu.Core != null);
}
void OnDisable()
@ -46,7 +46,7 @@ public class XMBInfoBar : MonoBehaviour
ValueTuple<uint, float> m_lastFrameInfo;
private void RefreshFps()
{
if (App.emu.Core.IsNull())
if (App.emu.Core == null)
FPS.gameObject.SetActiveEx(false);
else
{