Compare commits

..

No commits in common. "45539f3b924c95b018c5a638535bd8cc09ea93b9" and "9c4d57bdefd18fd7149f0dce586e5154d07d309f" have entirely different histories.

10 changed files with 67 additions and 65 deletions

View File

@ -4,66 +4,87 @@ namespace AxiReplay
{ {
public class NetReplay public class NetReplay
{ {
/// <summary> public int mCurrPlayFrame = -1;
/// 客户端当前帧 Queue<ReplayStep> mQueueReplay;
/// </summary> ReplayStep mNextReplay;
public int mCurrClientFrameIdx => mCurrReplay.FrameStartID; ReplayStep mCurrReplay;
//public int mCurrClientFrameIdx int byFrameIdx = 0;
/// <summary> /// <summary>
/// 服务器远端当前帧 /// 服务器远端当前帧
/// </summary> /// </summary>
public int mRemoteFrameIdx { get; private set; } = -1; public int mRemoteFrameIdx { get; private set; }
/// <summary> /// <summary>
/// 网络数据队列 /// 当前帧和服务器帧相差数量
/// </summary> /// </summary>
Queue<ReplayStep> mNetReplayQueue = new Queue<ReplayStep>(); public int remoteFrameDiff => mRemoteFrameIdx - mCurrPlayFrame;
/// <summary>
/// 当前数据
/// </summary>
ReplayStep mCurrReplay;
/// <summary>
/// 下一个数据数据
/// </summary>
ReplayStep mNextReplay;
public NetReplay() public NetReplay()
{ {
ResetData(); mQueueReplay = new Queue<ReplayStep>();
} }
public void ResetData() public void ResetData()
{ {
mNetReplayQueue.Clear(); mQueueReplay.Clear();
mRemoteFrameIdx = 0; mRemoteFrameIdx = 0;
mCurrReplay = default(ReplayStep); byFrameIdx = 0;
mCurrReplay.FrameStartID = 0;
mNextReplay = default(ReplayStep); mNextReplay = default(ReplayStep);
mNextReplay.FrameStartID = -1; mCurrReplay = default(ReplayStep);
} }
public void InData(ReplayStep inputData,int ServerFrameIdx) public void InData(ReplayStep inputData,int ServerFrameIdx)
{ {
mNetReplayQueue.Enqueue(inputData); mQueueReplay.Enqueue(inputData);
mRemoteFrameIdx = inputData.FrameStartID; mRemoteFrameIdx = inputData.FrameStartID;
} }
public bool TryGetNextFrame(out ReplayStep data, out int frameDiff, out bool inputDiff) public bool NextFrame(out ReplayStep data, out int FrameDiff)
{ {
TakeFrame(1, out data, out frameDiff, out inputDiff); return TakeFrame(0, out data, out FrameDiff);
return frameDiff > 0;
} }
void TakeFrame(int addFrame, out ReplayStep data, out int bFrameDiff, out bool inputDiff) /// <summary>
/// 往前推进帧的,指定帧下标
/// </summary>
public bool NextFramebyFrameIdx(int FrameID, out ReplayStep data, out int FrameDiff)
{ {
inputDiff = false; bool res = TakeFrame(FrameID - byFrameIdx, out data, out FrameDiff);
int targetFrame = mCurrClientFrameIdx + addFrame; byFrameIdx = FrameID;
if (targetFrame >= mNextReplay.FrameStartID && targetFrame <= mRemoteFrameIdx && mNetReplayQueue.Count > 0) return res;
}
public bool TakeFrame(int addFrame, out ReplayStep data, out int FrameDiff)
{ {
//当前帧追加 bool Changed = false;
//mCurrClientFrameIdx = targetFrame; mCurrPlayFrame += addFrame;
ulong oldInput = mCurrReplay.InPut; if (mCurrPlayFrame >= mNextReplay.FrameStartID)
{
Changed = mCurrReplay.InPut != mNextReplay.InPut;
mCurrReplay = mNextReplay; mCurrReplay = mNextReplay;
if (oldInput != mCurrReplay.InPut)
inputDiff = true;
mNextReplay = mNetReplayQueue.Dequeue();
}
bFrameDiff = mRemoteFrameIdx - mCurrClientFrameIdx;
data = mCurrReplay; data = mCurrReplay;
UpdateNextFrame(mCurrPlayFrame, out FrameDiff);
}
else
{
data = mCurrReplay;
FrameDiff = mRemoteFrameIdx - mCurrPlayFrame;
}
return Changed;
}
void UpdateNextFrame(int targetFrame,out int FrameDiff)
{
FrameDiff = mRemoteFrameIdx - targetFrame;
//如果已经超过
while (targetFrame > mNextReplay.FrameStartID)
{
if (mNextReplay.FrameStartID >= mRemoteFrameIdx)
{
//TODO
//bEnd = true;
break;
}
if (mQueueReplay.Count > 0)
{
mNextReplay = mQueueReplay.Dequeue();
}
targetFrame++;
}
} }
} }
} }

View File

@ -826,7 +826,7 @@ GameObject:
- component: {fileID: 6055880809428073973} - component: {fileID: 6055880809428073973}
- component: {fileID: 1286529697012677180} - component: {fileID: 1286529697012677180}
m_Layer: 5 m_Layer: 5
m_Name: RoomGroup m_Name: RomGroup
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0

View File

@ -407,8 +407,7 @@ namespace AxibugEmuOnline.Client.Manager
void RecvHostSyn_RoomFrameAllInputData(byte[] reqData) void RecvHostSyn_RoomFrameAllInputData(byte[] reqData)
{ {
Protobuf_Room_Syn_RoomFrameAllInputData msg = ProtoBufHelper.DeSerizlize<Protobuf_Room_Syn_RoomFrameAllInputData>(reqData); Protobuf_Room_Syn_RoomFrameAllInputData msg = ProtoBufHelper.DeSerizlize<Protobuf_Room_Syn_RoomFrameAllInputData>(reqData);
App.log.Debug($"ServerFrameID->{msg.ServerFrameID} FrameID->{msg.FrameID} ClientFrame->{netReplay.mCurrClientFrameIdx} InputData->{msg.InputData}"); //netReplay.InData(new ReplayStep() { FrameStartID = (int)msg.FrameID, InPut = msg.InputData }, (int)msg.ServerFrameID);
netReplay.InData(new ReplayStep() { FrameStartID = (int)msg.FrameID, InPut = msg.InputData }, (int)msg.ServerFrameID);
} }
public void SendScreen(byte[] RenderBuffer) public void SendScreen(byte[] RenderBuffer)

View File

@ -6,6 +6,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Net.Sockets;
using UnityEngine; using UnityEngine;
namespace AxibugEmuOnline.Client namespace AxibugEmuOnline.Client

View File

@ -102,12 +102,12 @@ namespace AxibugEmuOnline.Client
{ {
if (InGameUI.Instance.IsNetPlay) if (InGameUI.Instance.IsNetPlay)
{ {
if (App.roomMgr.netReplay.TryGetNextFrame(out var replayData, out int frameDiff, out bool inputDiff)) if (App.roomMgr.netReplay.NextFrame(out var replayData, out int _))
{ {
m_sampledState = FromNet(replayData); m_sampledState = FromNet(replayData);
var localState = NesControllerMapper.Get().CreateState(); var localState = NesControllerMapper.Get().CreateState();
var rawData = ToNet(localState); var rawData = ToNet(localState);
App.roomMgr.SendRoomSingelPlayerInput((uint)App.roomMgr.netReplay.mCurrClientFrameIdx, rawData); App.roomMgr.SendRoomSingelPlayerInput((uint)App.roomMgr.netReplay.mCurrPlayFrame, rawData);
} }
else else
{ {

View File

@ -36,14 +36,6 @@ namespace AxibugEmuOnline.Client
m_pulsInvoker_Down.Update(Time.deltaTime); m_pulsInvoker_Down.Update(Time.deltaTime);
} }
public void ResetPulsInvoker()
{
m_pulsInvoker_Left.DisActive();
m_pulsInvoker_Right.DisActive();
m_pulsInvoker_Up.DisActive();
m_pulsInvoker_Down.DisActive();
}
public void ExecuteCommand(EnumCommand cmd, bool cancel) public void ExecuteCommand(EnumCommand cmd, bool cancel)
{ {
if (!cancel) if (!cancel)

View File

@ -9,6 +9,7 @@ namespace AxibugEmuOnline.Client
[SerializeField] [SerializeField]
protected Transform m_menuItemRoot; protected Transform m_menuItemRoot;
protected List<MenuItem> m_runtimeMenuUI = new List<MenuItem>(); protected List<MenuItem> m_runtimeMenuUI = new List<MenuItem>();
public override bool Enable => enabled;
protected MenuItem m_enteredItem = null; protected MenuItem m_enteredItem = null;
@ -77,8 +78,6 @@ namespace AxibugEmuOnline.Client
public abstract class MenuItemController<T> : MenuItemController public abstract class MenuItemController<T> : MenuItemController
{ {
public override bool Enable => enabled && ListenControlAction;
private bool m_listenControlAction; private bool m_listenControlAction;
public bool ListenControlAction public bool ListenControlAction
{ {
@ -91,9 +90,6 @@ namespace AxibugEmuOnline.Client
CommandDispatcher.Instance.RegistController(this); CommandDispatcher.Instance.RegistController(this);
else else
CommandDispatcher.Instance.UnRegistController(this); CommandDispatcher.Instance.UnRegistController(this);
if(!value)
ResetPulsInvoker();
} }
} }

View File

@ -119,12 +119,6 @@ namespace AxibugEmuOnline.Client
ListenControlAction = m_selected; ListenControlAction = m_selected;
} }
protected override void OnCmdSelectItemLeft()
{
base.OnCmdSelectItemLeft();
OnCmdBack();
}
protected override void OnSelectMenuChanged() protected override void OnSelectMenuChanged()
{ {

View File

@ -87,7 +87,6 @@ namespace AxibugEmuOnline.Client
void RollToIndex(int index, bool useAnim = false) void RollToIndex(int index, bool useAnim = false)
{ {
SyncRectToLaunchUI();
Vector2 itemPos = itemGroup.GetItemAnchorePos(index); Vector2 itemPos = itemGroup.GetItemAnchorePos(index);
Vector2 targetPos = itemGroup.transform.InverseTransformPoint(m_selectArrow.position); Vector2 targetPos = itemGroup.transform.InverseTransformPoint(m_selectArrow.position);