39 lines
1.5 KiB
C#
39 lines
1.5 KiB
C#
// 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);
|
|
}
|
|
}
|
|
}
|