public void ApplySnapshot(double time, Vector3 position, Quaternion rotation, double lastAckInput) { if (time < _lastSnapTime) { return; } bool isSameAck = Math.Abs(_lastAckTime - lastAckInput) < 0.01; if (isSameAck) { lastAckInput += time - _lastSnapTime; } else { _lastAckTime = lastAckInput; _lastSnapTime = time; } while (_movementBuffer.First != null && !(_movementBuffer.First.Value.Time > lastAckInput)) { _movementBuffer.RemoveFirst(); } foreach (var movement in _movementBuffer) { position += movement.Item; } _playerSnapshot.AddSnapshot((float)time, position); }
public void ApplySnapshot(double time, Vector3 position, Quaternion rotation) { _playerSnapshot.AddSnapshot(time, position, rotation); }