DeltaCompression.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. // manual delta compression for some types.
  2. // varint(b-a)
  3. // Mirror can't use Mirror II's bit-tree delta compression.
  4. using System.Runtime.CompilerServices;
  5. namespace Mirror
  6. {
  7. public static class DeltaCompression
  8. {
  9. // delta (usually small), then zigzag varint to support +- changes
  10. // parameter order: (last, current) makes most sense (Q3 does this too).
  11. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  12. public static void Compress(NetworkWriter writer, long last, long current) =>
  13. Compression.CompressVarInt(writer, current - last);
  14. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  15. public static long Decompress(NetworkReader reader, long last) =>
  16. last + Compression.DecompressVarInt(reader);
  17. // delta (usually small), then zigzag varint to support +- changes
  18. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  19. public static void Compress(NetworkWriter writer, Vector3Long last, Vector3Long current)
  20. {
  21. Compress(writer, last.x, current.x);
  22. Compress(writer, last.y, current.y);
  23. Compress(writer, last.z, current.z);
  24. }
  25. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  26. public static Vector3Long Decompress(NetworkReader reader, Vector3Long last)
  27. {
  28. long x = Decompress(reader, last.x);
  29. long y = Decompress(reader, last.y);
  30. long z = Decompress(reader, last.z);
  31. return new Vector3Long(x, y, z);
  32. }
  33. }
  34. }