1234567891011121314151617181920212223242526272829303132333435363738 |
- // manual delta compression for some types.
- // varint(b-a)
- // Mirror can't use Mirror II's bit-tree delta compression.
- using System.Runtime.CompilerServices;
- namespace Mirror
- {
- public static class DeltaCompression
- {
- // delta (usually small), then zigzag varint to support +- changes
- // parameter order: (last, current) makes most sense (Q3 does this too).
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- public static void Compress(NetworkWriter writer, long last, long current) =>
- Compression.CompressVarInt(writer, current - last);
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- public static long Decompress(NetworkReader reader, long last) =>
- last + Compression.DecompressVarInt(reader);
- // delta (usually small), then zigzag varint to support +- changes
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- public static void Compress(NetworkWriter writer, Vector3Long last, Vector3Long current)
- {
- Compress(writer, last.x, current.x);
- Compress(writer, last.y, current.y);
- Compress(writer, last.z, current.z);
- }
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- public static Vector3Long Decompress(NetworkReader reader, Vector3Long last)
- {
- long x = Decompress(reader, last.x);
- long y = Decompress(reader, last.y);
- long z = Decompress(reader, last.z);
- return new Vector3Long(x, y, z);
- }
- }
- }
|