[EditorBrowsable(EditorBrowsableState.Never)] // public only for tests
        public static void SerializeIntoWriter(NetworkWriter writer, Vector3 position, Quaternion rotation, Compression compressRotation, Vector3 scale)
        {
            // serialize position
            writer.WriteVector3(position);

            // serialize rotation
            // writing quaternion = 16 byte
            // writing euler angles = 12 byte
            // -> quaternion->euler->quaternion always works.
            // -> gimbal lock only occurs when adding.
            Vector3 euler = rotation.eulerAngles;

            if (compressRotation == Compression.None)
            {
                // write 3 floats = 12 byte
                writer.WriteSingle(euler.x);
                writer.WriteSingle(euler.y);
                writer.WriteSingle(euler.z);
            }
            else if (compressRotation == Compression.Much)
            {
                // write 3 byte. scaling [0,360] to [0,255]
                writer.WriteByte(FloatBytePacker.ScaleFloatToByte(euler.x, 0, 360, byte.MinValue, byte.MaxValue));
                writer.WriteByte(FloatBytePacker.ScaleFloatToByte(euler.y, 0, 360, byte.MinValue, byte.MaxValue));
                writer.WriteByte(FloatBytePacker.ScaleFloatToByte(euler.z, 0, 360, byte.MinValue, byte.MaxValue));
            }
            else if (compressRotation == Compression.Lots)
            {
                // write 2 byte, 5 bits for each float
                writer.WriteUInt16(FloatBytePacker.PackThreeFloatsIntoUShort(euler.x, euler.y, euler.z, 0, 360));
            }

            // serialize scale
            writer.WriteVector3(scale);
        }
 // serialization is needed by OnSerialize and by manual sending from authority
 // public only for tests
 public static void SerializeIntoWriter(NetworkWriter writer, Vector3 position, Quaternion rotation, Vector3 scale)
 {
     // serialize position, rotation, scale
     // => compress rotation from 4*4=16 to 4 bytes
     // => less bandwidth = better CCU tests / scale
     writer.WriteVector3(position);
     writer.WriteUInt32(Compression.CompressQuaternion(rotation));
     writer.WriteVector3(scale);
 }
Пример #3
0
 public void Serialize(NetworkWriter writer)
 {
     writer.WritePackedUInt32(netId);
     writer.WriteBoolean(owner);
     writer.WriteUInt64(sceneId);
     writer.WriteVector3(position);
     writer.WriteQuaternion(rotation);
     writer.WriteVector3(scale);
     writer.WriteBytesAndSizeSegment(payload);
 }
Пример #4
0
 public static void SerializeIntoWriter(NetworkWriter writer, Vector3 position, Quaternion rotation, Vector3 scale)
 {
     // serialize position, rotation, scale
     // note: we do NOT compress rotation.
     //       we are CPU constrained, not bandwidth constrained.
     //       the code needs to WORK for the next 5-10 years of development.
     writer.WriteVector3(position);
     writer.WriteQuaternion(rotation);
     writer.WriteVector3(scale);
 }
Пример #5
0
 public void Serialize(NetworkWriter writer)
 {
     writer.WritePackedUInt32(netId);
     writer.WriteBoolean(isLocalPlayer);
     writer.WritePackedUInt64(sceneId);
     if (sceneId == 0)
     {
         writer.WriteGuid(assetId);
     }
     writer.WriteVector3(position);
     writer.WriteQuaternion(rotation);
     writer.WriteVector3(scale);
     writer.WriteBytesAndSizeSegment(payload);
 }
Пример #6
0
 // TODO add nullable support to weaver instead
 public static void WriteVector3Nullable(this NetworkWriter writer, Vector3?value)
 {
     writer.WriteBool(value.HasValue);
     if (value.HasValue)
     {
         writer.WriteVector3(value.Value);
     }
 }
Пример #7
0
 // serialization is needed by OnSerialize and by manual sending from authority
 // public only for tests
 public static void SerializeIntoWriter(NetworkWriter writer, Vector3 position, Quaternion rotation, Vector3 scale, bool compressRotation)
 {
     // serialize position, rotation, scale
     // => compress rotation from 4*4=16 to 4 bytes
     // => less bandwidth = better CCU tests / scale
     writer.WriteVector3(position);
     if (compressRotation)
     {
         // smalles three compression for 3D
         writer.WriteUInt32(Compression.CompressQuaternion(rotation));
     }
     else
     {
         // uncompressed for 2D
         writer.WriteQuaternion(rotation);
     }
     writer.WriteVector3(scale);
 }
Пример #8
0
 public override bool OnSerialize(NetworkWriter writer, bool initialState)
 {
     // sync target component's position on spawn.
     // fixes https://github.com/vis2k/Mirror/pull/3051/
     // (Spawn message wouldn't sync NTChild positions either)
     if (initialState)
     {
         if (syncPosition)
         {
             writer.WriteVector3(targetComponent.localPosition);
         }
         if (syncRotation)
         {
             writer.WriteQuaternion(targetComponent.localRotation);
         }
         if (syncScale)
         {
             writer.WriteVector3(targetComponent.localScale);
         }
         return(true);
     }
     return(false);
 }
        bool WriteParameters(NetworkWriter writer, bool forceAll = false)
        {
            ulong dirtyBits = forceAll ? (~0ul) : NextDirtyBits();

            writer.WritePackedUInt64(dirtyBits);
            for (int i = 0; i < namesParameters.Length; i++)
            {
                if ((dirtyBits & (1ul << i)) == 0)
                {
                    continue;
                }

                if (i < lastFloatParameters.Length)
                {
                    float newFloatValue = m_Motion.motionGraph.GetFloat(Animator.StringToHash(namesParameters[i]));
                    writer.WriteSingle(newFloatValue);
                }
                else if (i >= lastFloatParameters.Length &&
                         i < (lastFloatParameters.Length + lastIntParameters.Length))
                {
                    int newIntValue = m_Motion.motionGraph.GetInt(Animator.StringToHash(namesParameters[i]));
                    writer.WritePackedInt32(newIntValue);
                }
                else if (i >= (lastFloatParameters.Length + lastIntParameters.Length) &&
                         i < (lastFloatParameters.Length + lastIntParameters.Length + lastSwitchParameters.Length))
                {
                    bool newBoolValue = m_Motion.motionGraph.GetSwitch(Animator.StringToHash(namesParameters[i]));
                    writer.WriteBoolean(newBoolValue);
                }
                else if (i >= (lastFloatParameters.Length + lastIntParameters.Length + lastSwitchParameters.Length) &&
                         i < (lastFloatParameters.Length + lastIntParameters.Length + lastSwitchParameters.Length + lastVectorParameters.Length))
                {
                    Vector3 newVectorValue = m_Motion.motionGraph.GetVector(Animator.StringToHash(namesParameters[i]));
                    writer.WriteVector3(newVectorValue);
                }
                else if (i >= (lastFloatParameters.Length + lastIntParameters.Length + lastSwitchParameters.Length + lastVectorParameters.Length) &&
                         i < (lastFloatParameters.Length + lastIntParameters.Length + lastSwitchParameters.Length + lastVectorParameters.Length + lastTransformParameters.Length))
                {
                    Transform newTransformValue = m_Motion.motionGraph.GetTransform(Animator.StringToHash(namesParameters[i]));
                    writer.WriteTransform(newTransformValue);
                }
            }
            return(dirtyBits != 0);
        }
Пример #10
0
 public static void WriteRay(this NetworkWriter writer, Ray value)
 {
     writer.WriteVector3(value.origin);
     writer.WriteVector3(value.direction);
 }
Пример #11
0
 public static void WritePlane(this NetworkWriter writer, Plane value)
 {
     writer.WriteVector3(value.normal);
     writer.WriteSingle(value.distance);
 }