progress
This commit is contained in:
@@ -53,11 +53,15 @@ namespace Game
|
||||
private static ulong lastReceivedServerFrame = 0;
|
||||
public static ulong ServerFrame => /*NetworkManager.server != null ? serverWorldState.frame :*/ lastReceivedServerFrame;
|
||||
public static ulong ClientFrame => clientWorldState.frame;
|
||||
public static float ServerTime = 0f;
|
||||
public static float ClientTime = 0f;
|
||||
|
||||
public static void Init()
|
||||
{
|
||||
welcomed = false;
|
||||
lastReceivedServerFrame = 0;
|
||||
ServerTime = Time.GameTime;
|
||||
ClientTime = 0f;
|
||||
|
||||
players = new Dictionary<uint, PlayerActor>();
|
||||
playerConnections = new Dictionary<uint, NetworkConnection>();
|
||||
@@ -126,7 +130,10 @@ namespace Game
|
||||
var playerFrame = playerFrames[serverWorldState.frame % 120];
|
||||
|
||||
playerFrame.frame = serverWorldState.frame;
|
||||
playerFrame.position = playerActor.Position;
|
||||
//playerFrame.position = playerActor.Position;
|
||||
PlayerMovement playerMovement = playerActor.GetScript<PlayerMovement>();
|
||||
playerMovement.input.GetState(serverWorldState.frame, out var inputState, out var actorState);
|
||||
playerFrame.position = actorState.position;
|
||||
}
|
||||
|
||||
foreach (KeyValuePair<uint, PlayerActor> kv in players)
|
||||
@@ -142,8 +149,9 @@ namespace Game
|
||||
// TODO: relevancy checks here etc.
|
||||
|
||||
PlayerMovement playerMovement = otherPlayerActor.GetScript<PlayerMovement>();
|
||||
PlayerActorState actorState = playerMovement.input.GetCurrentActorState();
|
||||
PlayerInputState inputState = playerMovement.input.GetCurrentInputState();
|
||||
//PlayerActorState actorState = playerMovement.input.GetCurrentActorState();
|
||||
//PlayerInputState inputState = playerMovement.input.GetCurrentInputState();
|
||||
playerMovement.input.GetState(serverWorldState.frame, out var inputState, out var actorState);
|
||||
{
|
||||
NetworkMessage message = NetworkManager.ServerBeginSendMessage();
|
||||
message.WriteByte((byte)GameModeMessageType.PlayerPosition);
|
||||
@@ -162,6 +170,7 @@ namespace Game
|
||||
message.WriteSingle(actorState.viewAngles.X);
|
||||
message.WriteSingle(actorState.viewAngles.Y);
|
||||
message.WriteSingle(actorState.viewAngles.Z);
|
||||
message.WriteSingle(actorState.lastJumpTime);
|
||||
|
||||
//inputState.frame
|
||||
message.WriteSingle(inputState.viewDeltaX);
|
||||
@@ -265,6 +274,7 @@ namespace Game
|
||||
if (NetworkManager.IsClient || NetworkManager.IsLocalClient)
|
||||
{
|
||||
var serverFrame = networkEvent.Message.ReadUInt64();
|
||||
ClientTime = networkEvent.Message.ReadSingle();
|
||||
int numActors = (int)networkEvent.Message.ReadUInt32();
|
||||
for (int i = 0; i < numActors; i++)
|
||||
{
|
||||
@@ -353,6 +363,7 @@ namespace Game
|
||||
actorState.viewAngles.X = networkEvent.Message.ReadSingle();
|
||||
actorState.viewAngles.Y = networkEvent.Message.ReadSingle();
|
||||
actorState.viewAngles.Z = networkEvent.Message.ReadSingle();
|
||||
actorState.lastJumpTime = networkEvent.Message.ReadSingle();
|
||||
|
||||
inputState.frame = reportedFrame;
|
||||
inputState.viewDeltaX = networkEvent.Message.ReadSingle();
|
||||
@@ -365,44 +376,11 @@ namespace Game
|
||||
//Assert.IsTrue(reportedFrame >= lastReceivedServerFrame);
|
||||
if (reportedFrame < lastReceivedServerFrame)
|
||||
{
|
||||
Console.Print($"packet wrong order, received {lastReceivedServerFrame}, new {reportedFrame}");
|
||||
//Console.Print($"packet wrong order, received {lastReceivedServerFrame}, new {reportedFrame}");
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
/*if (NetworkManager.IsLocalClient && !NetworkManager.IsServer)
|
||||
{
|
||||
|
||||
}
|
||||
else*/ if (NetworkManager.IsServer)
|
||||
{
|
||||
Assert.Fail();
|
||||
/*PlayerFrame playerFrame = GetPlayerFrame(playerId, reportedFrame);
|
||||
PlayerActor playerActor = players[playerId];
|
||||
if (playerFrame == null)
|
||||
Console.Print("frame is in the past, unable to verify frame");
|
||||
else
|
||||
{
|
||||
Float3 playerFramePosition = playerFrame.position;
|
||||
if ((playerFramePosition - reportedPosition).Length > 0.0001)
|
||||
{
|
||||
Console.Print("player drifted, len: " + (playerFramePosition - reportedPosition).Length);
|
||||
|
||||
{
|
||||
NetworkMessage message = NetworkManager.ServerBeginSendMessage();
|
||||
message.WriteByte((byte)GameModeMessageType.PlayerPosition);
|
||||
|
||||
message.WriteUInt64(serverWorldState.frame);
|
||||
message.WriteUInt32(playerId);
|
||||
message.WriteSingle(playerActor.Position.X);
|
||||
message.WriteSingle(playerActor.Position.Y);
|
||||
message.WriteSingle(playerActor.Position.Z);
|
||||
NetworkManager.ServerEndSendMessage(ref message, playerConnections[playerId]);
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
else if (NetworkManager.IsClient)
|
||||
if (NetworkManager.IsClient)
|
||||
{
|
||||
lastReceivedServerFrame = reportedFrame;
|
||||
//Console.Print($"we drifted, corrected. client frame: {serverWorldState.frame}, server frame: {reportedFrame}");
|
||||
@@ -414,7 +392,7 @@ namespace Game
|
||||
{
|
||||
PlayerInput playerInput = playerActor.GetScript<PlayerMovement>().input;
|
||||
|
||||
playerInput.SetState(reportedFrame, ref inputState, ref actorState);
|
||||
playerInput.SetState(reportedFrame, inputState, actorState);
|
||||
{
|
||||
|
||||
}
|
||||
@@ -440,6 +418,7 @@ namespace Game
|
||||
NetworkMessage message = NetworkManager.ServerBeginSendMessage();
|
||||
message.WriteByte((byte)GameModeMessageType.WelcomePlayer);
|
||||
message.WriteUInt64(serverWorldState.frame);
|
||||
message.WriteSingle(ServerTime);
|
||||
message.WriteUInt32((uint)serverWorldState.actors.Count);
|
||||
foreach (PlayerActor playerActor in serverWorldState.actors)
|
||||
{
|
||||
@@ -514,7 +493,7 @@ namespace Game
|
||||
players.Add(playerId, null);
|
||||
players[playerId] = playerActor;
|
||||
PlayerInput playerInput = playerActor.GetScript<PlayerMovement>().input;
|
||||
|
||||
playerInput.frame = (NetworkManager.IsServer) ? serverWorldState.frame : clientWorldState.frame;
|
||||
if (NetworkManager.IsServer)
|
||||
serverWorldState.actors.Add(playerActor);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user