forked from sin365/AxibugEmuOnline
Compare commits
7 Commits
9c4d57bdef
...
45539f3b92
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
45539f3b92 | ||
| a4f8a382ac | |||
| ea2e63cb58 | |||
| 960aad4831 | |||
| 4606a57157 | |||
| 6ad26bba8e | |||
| 5bd858e1a5 |
@ -4,87 +4,66 @@ namespace AxiReplay
|
|||||||
{
|
{
|
||||||
public class NetReplay
|
public class NetReplay
|
||||||
{
|
{
|
||||||
public int mCurrPlayFrame = -1;
|
/// <summary>
|
||||||
Queue<ReplayStep> mQueueReplay;
|
/// 客户端当前帧
|
||||||
ReplayStep mNextReplay;
|
/// </summary>
|
||||||
ReplayStep mCurrReplay;
|
public int mCurrClientFrameIdx => mCurrReplay.FrameStartID;
|
||||||
int byFrameIdx = 0;
|
//public int mCurrClientFrameIdx
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 服务器远端当前帧
|
/// 服务器远端当前帧
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int mRemoteFrameIdx { get; private set; }
|
public int mRemoteFrameIdx { get; private set; } = -1;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 当前帧和服务器帧相差数量
|
/// 网络数据队列
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int remoteFrameDiff => mRemoteFrameIdx - mCurrPlayFrame;
|
Queue<ReplayStep> mNetReplayQueue = new Queue<ReplayStep>();
|
||||||
|
/// <summary>
|
||||||
|
/// 当前数据
|
||||||
|
/// </summary>
|
||||||
|
ReplayStep mCurrReplay;
|
||||||
|
/// <summary>
|
||||||
|
/// 下一个数据数据
|
||||||
|
/// </summary>
|
||||||
|
ReplayStep mNextReplay;
|
||||||
public NetReplay()
|
public NetReplay()
|
||||||
{
|
{
|
||||||
mQueueReplay = new Queue<ReplayStep>();
|
ResetData();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ResetData()
|
public void ResetData()
|
||||||
{
|
{
|
||||||
mQueueReplay.Clear();
|
mNetReplayQueue.Clear();
|
||||||
mRemoteFrameIdx = 0;
|
mRemoteFrameIdx = 0;
|
||||||
byFrameIdx = 0;
|
|
||||||
mNextReplay = default(ReplayStep);
|
|
||||||
mCurrReplay = default(ReplayStep);
|
mCurrReplay = default(ReplayStep);
|
||||||
|
mCurrReplay.FrameStartID = 0;
|
||||||
|
mNextReplay = default(ReplayStep);
|
||||||
|
mNextReplay.FrameStartID = -1;
|
||||||
}
|
}
|
||||||
public void InData(ReplayStep inputData, int ServerFrameIdx)
|
public void InData(ReplayStep inputData, int ServerFrameIdx)
|
||||||
{
|
{
|
||||||
mQueueReplay.Enqueue(inputData);
|
mNetReplayQueue.Enqueue(inputData);
|
||||||
mRemoteFrameIdx = inputData.FrameStartID;
|
mRemoteFrameIdx = inputData.FrameStartID;
|
||||||
}
|
}
|
||||||
public bool NextFrame(out ReplayStep data, out int FrameDiff)
|
public bool TryGetNextFrame(out ReplayStep data, out int frameDiff, out bool inputDiff)
|
||||||
{
|
{
|
||||||
return TakeFrame(0, out data, out FrameDiff);
|
TakeFrame(1, out data, out frameDiff, out inputDiff);
|
||||||
|
return frameDiff > 0;
|
||||||
}
|
}
|
||||||
/// <summary>
|
void TakeFrame(int addFrame, out ReplayStep data, out int bFrameDiff, out bool inputDiff)
|
||||||
/// 往前推进帧的,指定帧下标
|
|
||||||
/// </summary>
|
|
||||||
public bool NextFramebyFrameIdx(int FrameID, out ReplayStep data, out int FrameDiff)
|
|
||||||
{
|
{
|
||||||
bool res = TakeFrame(FrameID - byFrameIdx, out data, out FrameDiff);
|
inputDiff = false;
|
||||||
byFrameIdx = FrameID;
|
int targetFrame = mCurrClientFrameIdx + addFrame;
|
||||||
return res;
|
if (targetFrame >= mNextReplay.FrameStartID && targetFrame <= mRemoteFrameIdx && mNetReplayQueue.Count > 0)
|
||||||
}
|
|
||||||
public bool TakeFrame(int addFrame, out ReplayStep data, out int FrameDiff)
|
|
||||||
{
|
{
|
||||||
bool Changed = false;
|
//当前帧追加
|
||||||
mCurrPlayFrame += addFrame;
|
//mCurrClientFrameIdx = targetFrame;
|
||||||
if (mCurrPlayFrame >= mNextReplay.FrameStartID)
|
ulong oldInput = mCurrReplay.InPut;
|
||||||
{
|
|
||||||
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++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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: RomGroup
|
m_Name: RoomGroup
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
m_Icon: {fileID: 0}
|
m_Icon: {fileID: 0}
|
||||||
m_NavMeshLayer: 0
|
m_NavMeshLayer: 0
|
||||||
|
|||||||
@ -407,7 +407,8 @@ 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);
|
||||||
//netReplay.InData(new ReplayStep() { FrameStartID = (int)msg.FrameID, InPut = msg.InputData }, (int)msg.ServerFrameID);
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendScreen(byte[] RenderBuffer)
|
public void SendScreen(byte[] RenderBuffer)
|
||||||
|
|||||||
@ -6,7 +6,6 @@ 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.NextFrame(out var replayData, out int _))
|
if (App.roomMgr.netReplay.TryGetNextFrame(out var replayData, out int frameDiff, out bool inputDiff))
|
||||||
{
|
{
|
||||||
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.mCurrPlayFrame, rawData);
|
App.roomMgr.SendRoomSingelPlayerInput((uint)App.roomMgr.netReplay.mCurrClientFrameIdx, rawData);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@ -36,6 +36,14 @@ 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,7 +9,6 @@ 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;
|
||||||
|
|
||||||
@ -78,6 +77,8 @@ 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
|
||||||
{
|
{
|
||||||
@ -90,6 +91,9 @@ namespace AxibugEmuOnline.Client
|
|||||||
CommandDispatcher.Instance.RegistController(this);
|
CommandDispatcher.Instance.RegistController(this);
|
||||||
else
|
else
|
||||||
CommandDispatcher.Instance.UnRegistController(this);
|
CommandDispatcher.Instance.UnRegistController(this);
|
||||||
|
|
||||||
|
if(!value)
|
||||||
|
ResetPulsInvoker();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -119,6 +119,12 @@ namespace AxibugEmuOnline.Client
|
|||||||
ListenControlAction = m_selected;
|
ListenControlAction = m_selected;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void OnCmdSelectItemLeft()
|
||||||
|
{
|
||||||
|
base.OnCmdSelectItemLeft();
|
||||||
|
|
||||||
|
OnCmdBack();
|
||||||
|
}
|
||||||
|
|
||||||
protected override void OnSelectMenuChanged()
|
protected override void OnSelectMenuChanged()
|
||||||
{
|
{
|
||||||
|
|||||||
@ -87,6 +87,7 @@ 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