slowpoker/Assets/Mirror/Core/Tools/DeltaCompression.cs
2024-10-17 17:23:05 +03:00

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);
}
}
}