public Quaternion Unpack(NetworkReader reader) { ulong combine = reader.Read(totalBitCount); uint index = (uint)(combine >> bitCountPerElement * 3); float a = floatPacker.Unpack((uint)(combine >> bitCountPerElement * 2) & readMask); float b = floatPacker.Unpack((uint)(combine >> bitCountPerElement * 1) & readMask); float c = floatPacker.Unpack((uint)combine & readMask); float l2 = 1 - ((a * a) + (b * b) + (c * c)); float largest = (float)Math.Sqrt(l2); // this Quaternion should already be normallized because of the way that largest is calculated switch (index) { case 0: return(new Quaternion(largest, a, b, c)); case 1: return(new Quaternion(a, largest, b, c)); case 2: return(new Quaternion(a, b, largest, c)); case 3: return(new Quaternion(a, b, c, largest)); default: ThrowIfOutOfRange(); return(default); } }
public Vector2 Unpack(NetworkReader reader) { Vector2 value = default; value.x = xPacker.Unpack(reader); value.y = yPacker.Unpack(reader); return(value); }
public Vector3 Unpack(NetworkReader reader) { Vector3 value = default; value.x = _xPacker.Unpack(reader); value.y = _yPacker.Unpack(reader); value.z = _zPacker.Unpack(reader); return(value); }