forked from sin365/AxibugEmuOnline
Compare commits
No commits in common. "45539f3b924c95b018c5a638535bd8cc09ea93b9" and "9c4d57bdefd18fd7149f0dce586e5154d07d309f" have entirely different histories.
45539f3b92
...
9c4d57bdef
@ -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;
|
||||||
|
mCurrPlayFrame += addFrame;
|
||||||
|
if (mCurrPlayFrame >= mNextReplay.FrameStartID)
|
||||||
{
|
{
|
||||||
//当前帧追加
|
Changed = mCurrReplay.InPut != mNextReplay.InPut;
|
||||||
//mCurrClientFrameIdx = targetFrame;
|
|
||||||
ulong oldInput = mCurrReplay.InPut;
|
|
||||||
mCurrReplay = mNextReplay;
|
mCurrReplay = mNextReplay;
|
||||||
if (oldInput != mCurrReplay.InPut)
|
data = mCurrReplay;
|
||||||
inputDiff = true;
|
UpdateNextFrame(mCurrPlayFrame, out FrameDiff);
|
||||||
mNextReplay = mNetReplayQueue.Dequeue();
|
}
|
||||||
|
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++;
|
||||||
}
|
}
|
||||||
bFrameDiff = mRemoteFrameIdx - mCurrClientFrameIdx;
|
|
||||||
data = mCurrReplay;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -28,6 +28,6 @@ namespace AxibugEmuOnline.Client
|
|||||||
protected override void GetVirtualListDatas(Action<object> datas)
|
protected override void GetVirtualListDatas(Action<object> datas)
|
||||||
{
|
{
|
||||||
RomLib.FetchRomCount((roms) => datas.Invoke(roms));
|
RomLib.FetchRomCount((roms) => datas.Invoke(roms));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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()
|
||||||
{
|
{
|
||||||
|
|||||||
@ -12,7 +12,7 @@ namespace AxibugEmuOnline.Client
|
|||||||
private RectTransform m_parent;
|
private RectTransform m_parent;
|
||||||
|
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
private RectTransform m_selectArrow;
|
private RectTransform m_selectArrow;
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
float ArrowOffset = 50;
|
float ArrowOffset = 50;
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
@ -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);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user