From 6be11bdf42c53ce68fe508b7433b953a4dc7289f Mon Sep 17 00:00:00 2001 From: "ALIENJACK\\alien" Date: Tue, 6 May 2025 10:41:25 +0800 Subject: [PATCH] IEmuCore rename to EmuCore --- .../AppMain/{IEmuCore.cs => EmuCore.cs} | 57 +++++++++++++------ .../{IEmuCore.cs.meta => EmuCore.cs.meta} | 0 2 files changed, 41 insertions(+), 16 deletions(-) rename AxibugEmuOnline.Client/Assets/Script/AppMain/{IEmuCore.cs => EmuCore.cs} (73%) rename AxibugEmuOnline.Client/Assets/Script/AppMain/{IEmuCore.cs.meta => EmuCore.cs.meta} (100%) diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/IEmuCore.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/EmuCore.cs similarity index 73% rename from AxibugEmuOnline.Client/Assets/Script/AppMain/IEmuCore.cs rename to AxibugEmuOnline.Client/Assets/Script/AppMain/EmuCore.cs index 1be8dfe4..8ac2f053 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/IEmuCore.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/EmuCore.cs @@ -1,19 +1,14 @@ -#pragma warning disable CS0618 // 类型或成员已过时 - -using AxibugEmuOnline.Client.ClientCore; +using AxibugEmuOnline.Client.ClientCore; using AxibugProtobuf; using AxiReplay; using System; using UnityEngine; +using UnityEngine.SocialPlatforms.Impl; using UnityEngine.UI; namespace AxibugEmuOnline.Client -{ - /// - /// use instead - /// - [Obsolete("不可直接继承,需要继承EmuCore类型")] - public abstract class IEmuCore : MonoBehaviour +{ + public abstract class EmuCore : MonoBehaviour { /// 获得模拟器核心中的状态快照对象 public abstract object GetState(); @@ -43,17 +38,48 @@ namespace AxibugEmuOnline.Client /// 获取当前模拟器帧序号,在加载快照和Reset后,应当重置为0 public abstract uint Frame { get; } - public abstract bool PushEmulatorFrame(); + public abstract void PushEmulatorFrame(); /// 模拟器核心推帧结束 - public abstract void AfterPushFrame(); + protected abstract void AfterPushFrame(); public abstract void GetAudioParams(out int frequency, out int channels); public abstract Texture OutputPixel { get; } - public abstract RawImage DrawCanvas { get; } + public abstract RawImage DrawCanvas { get; } + + + /// 指示该游戏实例是否处于联机模式 + public bool IsNetPlay + { + get + { + if (!App.user.IsLoggedIn) return false; + if (App.roomMgr.mineRoomMiniInfo == null) return false; + if (App.roomMgr.RoomState <= RoomGameState.OnlyHost) return false; + + return true; + } + } } - public abstract class EmuCore : IEmuCore + public abstract class EmuCore : EmuCore { - public sealed override bool PushEmulatorFrame() + public sealed override void PushEmulatorFrame() + { + if (!TryPushEmulatorFrame()) return; + + if (IsNetPlay) //skip frame handle + { + var skipFrameCount = App.roomMgr.netReplay.GetSkipFrameCount(); + if (skipFrameCount > 0) App.log.Debug($"SKIP FRAME : {skipFrameCount} ,CF:{App.roomMgr.netReplay.mCurrClientFrameIdx},RFIdx:{App.roomMgr.netReplay.mRemoteFrameIdx},RForward:{App.roomMgr.netReplay.mRemoteForwardCount} ,queue:{App.roomMgr.netReplay.mNetReplayQueue.Count}"); + for (var i = 0; i < skipFrameCount; i++) + { + if (!TryPushEmulatorFrame()) break; + } + } + + AfterPushFrame(); + } + + bool TryPushEmulatorFrame() { if (SampleInputData(out var inputData)) { @@ -69,7 +95,7 @@ namespace AxibugEmuOnline.Client bool result = false; inputData = default(INPUTDATA); - if (InGameUI.Instance.IsNetPlay) + if (IsNetPlay) { ReplayStep replayData; int frameDiff; @@ -116,4 +142,3 @@ namespace AxibugEmuOnline.Client protected abstract bool OnPushEmulatorFrame(INPUTDATA InputData); } } -#pragma warning restore CS0618 // 类型或成员已过时 diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/IEmuCore.cs.meta b/AxibugEmuOnline.Client/Assets/Script/AppMain/EmuCore.cs.meta similarity index 100% rename from AxibugEmuOnline.Client/Assets/Script/AppMain/IEmuCore.cs.meta rename to AxibugEmuOnline.Client/Assets/Script/AppMain/EmuCore.cs.meta