diff --git a/Assets/NetworkPositionSync/Runtime/InterpolationTime.cs b/Assets/NetworkPositionSync/Runtime/InterpolationTime.cs index ec3c3cb..612f7d2 100644 --- a/Assets/NetworkPositionSync/Runtime/InterpolationTime.cs +++ b/Assets/NetworkPositionSync/Runtime/InterpolationTime.cs @@ -168,6 +168,11 @@ public void OnUpdate(float deltaTime) _clientTime += deltaTime * clientScaleTime; } + public bool IsMessageOutOfOrder(float newServerTime) + { + return newServerTime < _latestServerTime; + } + /// /// Updates to keep in line with /// diff --git a/Assets/NetworkPositionSync/Runtime/SyncPositionSystem.cs b/Assets/NetworkPositionSync/Runtime/SyncPositionSystem.cs index 0ea245c..bfacfad 100644 --- a/Assets/NetworkPositionSync/Runtime/SyncPositionSystem.cs +++ b/Assets/NetworkPositionSync/Runtime/SyncPositionSystem.cs @@ -557,6 +557,13 @@ internal void ClientHandleNetworkPositionMessage(NetworkPositionMessage msg) { var time = packer.UnpackTime(reader); + if (TimeSync.IsMessageOutOfOrder(time)) + { + if (logger.LogEnabled()) logger.Log($"Ignoring packet before it was received out of order"); + // we dont want old packetes, we only care about most recent data so client can lerp towards it + return; + } + while (packer.TryUnpackNext(reader, out var id, out var pos, out var rot)) { if (Behaviours.Dictionary.TryGetValue(id, out var behaviour))