Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        public Vector2 Unpack(NetworkReader reader)
        {
            Vector2 value = default;

            value.x = xPacker.Unpack(reader);
            value.y = yPacker.Unpack(reader);
            return(value);
        }
Ejemplo n.º 3
0
        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);
        }