diff --git a/AxibugEmuOnline.Client/Assets/Plugins/AxiReplay/NetReplay.cs b/AxibugEmuOnline.Client/Assets/Plugins/AxiReplay/NetReplay.cs index 162d5b9..132f97b 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/AxiReplay/NetReplay.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/AxiReplay/NetReplay.cs @@ -7,7 +7,7 @@ namespace AxiReplay /// /// 客户端当前帧 /// - public int mCurrClientFrameIdx => mCurrReplay.FrameStartID; + public int mCurrClientFrameIdx = int.MinValue; /// /// 服务器远端当前帧 /// @@ -28,6 +28,8 @@ namespace AxiReplay /// 下一个数据数据 /// ReplayStep mNextReplay; + + bool bNetInit = false; public NetReplay() { ResetData(); @@ -35,28 +37,43 @@ namespace AxiReplay public void ResetData() { mNetReplayQueue.Clear(); - mRemoteFrameIdx = 0; mCurrReplay = default(ReplayStep); mCurrReplay.FrameStartID = int.MinValue; - mNextReplay = default(ReplayStep); - mNextReplay.FrameStartID = 0; - mRemoteFrameIdx = 0; + bNetInit = false; } public void InData(ReplayStep inputData, int ServerFrameIdx) { mNetReplayQueue.Enqueue(inputData); mRemoteFrameIdx = inputData.FrameStartID; + if (!bNetInit) + { + bNetInit = true; + mNextReplay = mNetReplayQueue.Dequeue(); + } } public bool TryGetNextFrame(out ReplayStep data, out int frameDiff, out bool inputDiff) { + if (!bNetInit) + { + data = default(ReplayStep); + frameDiff = default; + inputDiff = false; + return false; + } TakeFrame(1, out data, out frameDiff, out inputDiff); return frameDiff > 0; } public bool TryGetNextFrame(int targetFrame, out ReplayStep data, out int frameDiff, out bool inputDiff) { - TakeFrameToTargetFrame(targetFrame, out data, out frameDiff, out inputDiff); - return frameDiff > 0; + if (!bNetInit) + { + data = default(ReplayStep); + frameDiff = default; + inputDiff = false; + return false; + } + return TakeFrameToTargetFrame(targetFrame, out data, out frameDiff, out inputDiff); } void TakeFrame(int addFrame, out ReplayStep data, out int bFrameDiff, out bool inputDiff) @@ -65,21 +82,28 @@ namespace AxiReplay TakeFrameToTargetFrame(targetFrame, out data, out bFrameDiff, out inputDiff); } - void TakeFrameToTargetFrame(int targetFrame, out ReplayStep data, out int bFrameDiff, out bool inputDiff) + bool TakeFrameToTargetFrame(int targetFrame, out ReplayStep data, out int bFrameDiff, out bool inputDiff) { + bool result; inputDiff = false; - if (targetFrame <= mNextReplay.FrameStartID + 1 && targetFrame <= mRemoteFrameIdx && mNetReplayQueue.Count > 0) + if (targetFrame == mNextReplay.FrameStartID && targetFrame <= mRemoteFrameIdx && mNetReplayQueue.Count > 0) { //当前帧追加 + mCurrClientFrameIdx = targetFrame; ulong oldInput = mCurrReplay.InPut; mCurrReplay = mNextReplay; if (oldInput != mCurrReplay.InPut) inputDiff = true; mNextReplay = mNetReplayQueue.Dequeue(); + result = true; } + else + result = false; bFrameDiff = mRemoteFrameIdx - mCurrClientFrameIdx; data = mCurrReplay; + + return result; } } } diff --git a/AxibugEmuOnline.Client/Assets/Script/MonoCom/TickLoop.cs.meta b/AxibugEmuOnline.Client/Assets/Script/MonoCom/TickLoop.cs.meta index 5af3fb8..efd55af 100644 --- a/AxibugEmuOnline.Client/Assets/Script/MonoCom/TickLoop.cs.meta +++ b/AxibugEmuOnline.Client/Assets/Script/MonoCom/TickLoop.cs.meta @@ -4,7 +4,7 @@ MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] - executionOrder: 0 + executionOrder: -80 icon: {instanceID: 0} userData: assetBundleName: diff --git a/AxibugEmuOnline.Client/Assets/Script/NesEmulator/CoreSupporter.cs b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/CoreSupporter.cs index dfb882b..1a1ef83 100644 --- a/AxibugEmuOnline.Client/Assets/Script/NesEmulator/CoreSupporter.cs +++ b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/CoreSupporter.cs @@ -103,10 +103,10 @@ namespace AxibugEmuOnline.Client { if (InGameUI.Instance.IsNetPlay) { - if (App.roomMgr.netReplay.TryGetNextFrame(out var replayData, out int frameDiff, out bool inputDiff)) + if (App.roomMgr.netReplay.TryGetNextFrame((int)frameIndex, out var replayData, out int frameDiff, out bool inputDiff)) { if (inputDiff) - { + { App.log.Debug($"{DateTime.Now.ToString("hh:mm:ss.fff")} TryGetNextFrame remoteFrame->{App.roomMgr.netReplay.mRemoteFrameIdx} diff->{frameDiff} " + $"frame=>{replayData.FrameStartID} InPut=>{replayData.InPut}"); } diff --git a/AxibugEmuOnline.Client/Assets/Script/NesEmulator/NesEmulator.cs b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/NesEmulator.cs index fd937a9..bda2299 100644 --- a/AxibugEmuOnline.Client/Assets/Script/NesEmulator/NesEmulator.cs +++ b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/NesEmulator.cs @@ -93,10 +93,12 @@ namespace AxibugEmuOnline.Client //δյInput,֡ƽ if (!controlState.valid) return false; +#if UNITY_EDITOR if (controlState != lastState) { App.log.Info($"[LOCALDEBUG]{NesCore.FrameCount}-->{controlState}"); } +#endif NesCore.pad.Sync(controlState); NesCore.EmulateFrame(true); diff --git a/AxibugEmuOnline.Client/Packages/manifest.json b/AxibugEmuOnline.Client/Packages/manifest.json index 4698ff2..0ab1aef 100644 --- a/AxibugEmuOnline.Client/Packages/manifest.json +++ b/AxibugEmuOnline.Client/Packages/manifest.json @@ -1,16 +1,21 @@ { "dependencies": { "com.unity.2d.sprite": "1.0.0", + "com.unity.2d.tilemap": "1.0.0", + "com.unity.ads": "3.7.5", + "com.unity.analytics": "3.6.12", "com.unity.collab-proxy": "1.15.15", "com.unity.editorcoroutines": "1.0.0", "com.unity.ide.rider": "3.0.13", "com.unity.ide.visualstudio": "2.0.14", "com.unity.ide.vscode": "1.2.5", + "com.unity.purchasing": "4.1.3", "com.unity.test-framework": "1.1.31", "com.unity.textmeshpro": "3.0.6", "com.unity.timeline": "1.6.4", "com.unity.ugui": "1.0.0", "com.unity.visualscripting": "1.7.6", + "com.unity.xr.legacyinputhelpers": "2.1.9", "com.unity.modules.ai": "1.0.0", "com.unity.modules.androidjni": "1.0.0", "com.unity.modules.animation": "1.0.0", diff --git a/AxibugEmuOnline.Client/Packages/packages-lock.json b/AxibugEmuOnline.Client/Packages/packages-lock.json index 1a9fd7f..1eb5656 100644 --- a/AxibugEmuOnline.Client/Packages/packages-lock.json +++ b/AxibugEmuOnline.Client/Packages/packages-lock.json @@ -6,6 +6,30 @@ "source": "builtin", "dependencies": {} }, + "com.unity.2d.tilemap": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.ads": { + "version": "3.7.5", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0" + }, + "url": "https://packages.unity.cn" + }, + "com.unity.analytics": { + "version": "3.6.12", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0" + }, + "url": "https://packages.unity.cn" + }, "com.unity.collab-proxy": { "version": "1.15.15", "depth": 0, @@ -54,6 +78,20 @@ "dependencies": {}, "url": "https://packages.unity.cn" }, + "com.unity.purchasing": { + "version": "4.1.3", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0", + "com.unity.modules.unityanalytics": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.androidjni": "1.0.0", + "com.unity.services.core": "1.0.1" + }, + "url": "https://packages.unity.cn" + }, "com.unity.services.core": { "version": "1.0.1", "depth": 1, @@ -114,6 +152,16 @@ }, "url": "https://packages.unity.cn" }, + "com.unity.xr.legacyinputhelpers": { + "version": "2.1.9", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.modules.vr": "1.0.0", + "com.unity.modules.xr": "1.0.0" + }, + "url": "https://packages.unity.cn" + }, "com.unity.modules.ai": { "version": "1.0.0", "depth": 0,