diff --git a/AxibugEmuOnline.Client/Assets/Plugins/AxiReplay/NetReplay.cs b/AxibugEmuOnline.Client/Assets/Plugins/AxiReplay/NetReplay.cs index 086e06a..162d5b9 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/AxiReplay/NetReplay.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/AxiReplay/NetReplay.cs @@ -11,7 +11,7 @@ namespace AxiReplay /// /// 服务器远端当前帧 /// - public int mRemoteFrameIdx { get; private set; } = int.MinValue; + public int mRemoteFrameIdx { get; private set; } /// /// Remote 2 Client Frame Gap /// @@ -40,6 +40,7 @@ namespace AxiReplay mCurrReplay.FrameStartID = int.MinValue; mNextReplay = default(ReplayStep); mNextReplay.FrameStartID = 0; + mRemoteFrameIdx = 0; } public void InData(ReplayStep inputData, int ServerFrameIdx) { @@ -51,10 +52,22 @@ namespace AxiReplay 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; + } + void TakeFrame(int addFrame, out ReplayStep data, out int bFrameDiff, out bool inputDiff) { - inputDiff = false; int targetFrame = mCurrClientFrameIdx + addFrame; + TakeFrameToTargetFrame(targetFrame, out data, out bFrameDiff, out inputDiff); + } + + void TakeFrameToTargetFrame(int targetFrame, out ReplayStep data, out int bFrameDiff, out bool inputDiff) + { + inputDiff = false; if (targetFrame <= mNextReplay.FrameStartID + 1 && targetFrame <= mRemoteFrameIdx && mNetReplayQueue.Count > 0) { //当前帧追加