diff --git a/Assets/Scripts/Networking/Messages/MoveCreaturePkt.cs b/Assets/Scripts/Networking/Messages/MoveCreaturePkt.cs
index cc17820..92298bd 100644
--- a/Assets/Scripts/Networking/Messages/MoveCreaturePkt.cs
+++ b/Assets/Scripts/Networking/Messages/MoveCreaturePkt.cs
@@ -19,6 +19,11 @@ namespace Cyber.Networking.Messages {
///
public int SyncBaseID;
+ ///
+ /// Time when server received this request. Used for compensating ping.
+ ///
+ public double Timestamp;
+
///
/// Creates a MoveCreaturePkt which contains the direction of desired movement (or (0, 0, 0) for stopping)
///
@@ -43,6 +48,7 @@ namespace Cyber.Networking.Messages {
public override void Deserialize(NetworkReader reader) {
Direction = reader.ReadVector3();
SyncBaseID = reader.ReadInt32();
+ Timestamp = reader.ReadDouble();
}
///
@@ -52,6 +58,7 @@ namespace Cyber.Networking.Messages {
public override void Serialize(NetworkWriter writer) {
writer.Write(Direction);
writer.Write(SyncBaseID);
+ writer.Write(Timestamp);
}
}
diff --git a/Assets/Scripts/Networking/NetworkHelper.cs b/Assets/Scripts/Networking/NetworkHelper.cs
index 4f7ab0f..cc12fa3 100644
--- a/Assets/Scripts/Networking/NetworkHelper.cs
+++ b/Assets/Scripts/Networking/NetworkHelper.cs
@@ -51,5 +51,15 @@ namespace Cyber.Networking {
return IntArray;
}
+ ///
+ /// Returns the current system time in seconds.
+ ///
+ /// The system time in seconds.
+ public static double GetCurrentSystemTime() {
+ return DateTime.Now.ToUniversalTime().Subtract(
+ new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc))
+ .TotalMilliseconds * 1.0 / 1000;
+ }
+
}
}
diff --git a/Assets/Scripts/Networking/Serverside/Server.cs b/Assets/Scripts/Networking/Serverside/Server.cs
index e63444e..6d3e9ef 100644
--- a/Assets/Scripts/Networking/Serverside/Server.cs
+++ b/Assets/Scripts/Networking/Serverside/Server.cs
@@ -141,6 +141,7 @@ namespace Cyber.Networking.Serverside {
if (Player.Value.ConnectionID == msg.conn.connectionId) {
continue;
}
+ MoveCreature.Timestamp = NetworkHelper.GetCurrentSystemTime();
NetworkServer.SendToClient(Player.Value.ConnectionID, PktType.MoveCreature, MoveCreature);
}
break;