public static RigidBodyState Deserialize(BitReader br, UInt32 netVersion)
        {
            var rbs = new RigidBodyState();

            rbs.Sleeping = br.ReadBit();
            if (netVersion >= 5)
            {
                rbs.Position = FixedPointVector3D.Deserialize(br, netVersion);
            }
            else
            {
                rbs.Position = Vector3D.Deserialize(br, netVersion);
            }

            if (netVersion >= 7)
            {
                rbs.Unknown1 = br.ReadBit();
            }

            rbs.Rotation = Vector3D.DeserializeFixed(br, netVersion);

            if (netVersion >= 7)
            {
                rbs.Unknown2 = br.ReadBit();
            }

            if (!rbs.Sleeping)
            {
                rbs.LinearVelocity  = Vector3D.Deserialize(br, netVersion);
                rbs.AngularVelocity = Vector3D.Deserialize(br, netVersion);
            }

            return(rbs);
        }
        public static FixedPointVector3D Deserialize(BitReader br, UInt32 netVersion)
        {
            var vector = new FixedPointVector3D();

            vector._integerVector = Vector3D.Deserialize(br, netVersion);
            // Could make this generic for any number of decimal places, but this is all I need for now
            vector.X = vector._integerVector.X / 100;
            vector.Y = vector._integerVector.Y / 100;
            vector.Z = vector._integerVector.Z / 100;

            return(vector);
        }