コード例 #1
0
        /// <summary>
        /// Writes TransformSyncData into a writer.
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="syncData"></param>
        public static void WriteTransformSyncData(this NetworkWriter writer, TransformSyncData syncData)
        {
            //SyncProperties.
            SyncProperties sp = (SyncProperties)syncData.SyncProperties;

            writer.WriteByte(syncData.SyncProperties);

            //NetworkIdentity.
            //Get compression level for netIdentity.
            if (EnumContains.SyncPropertiesContains(sp, SyncProperties.Id1))
            {
                writer.WriteByte((byte)syncData.NetworkIdentity);
            }
            else if (EnumContains.SyncPropertiesContains(sp, SyncProperties.Id2))
            {
                writer.WriteUInt16((ushort)syncData.NetworkIdentity);
            }
            else
            {
                writer.WriteUInt32(syncData.NetworkIdentity);
            }
            //ComponentIndex.
            writer.WriteByte(syncData.ComponentIndex);

            //Position.
            if (EnumContains.SyncPropertiesContains(sp, SyncProperties.Position))
            {
                if (EnumContains.SyncPropertiesContains(sp, SyncProperties.CompressSmall))
                {
                    WriteCompressedVector3(writer, syncData.Position);
                }
                else
                {
                    writer.WriteVector3(syncData.Position);
                }
            }
            //Rotation.
            if (EnumContains.SyncPropertiesContains(sp, SyncProperties.Rotation))
            {
                writer.WriteUInt32(Quaternions.CompressQuaternion(syncData.Rotation));
            }
            //Scale.
            if (EnumContains.SyncPropertiesContains(sp, SyncProperties.Scale))
            {
                if (EnumContains.SyncPropertiesContains(sp, SyncProperties.CompressSmall))
                {
                    WriteCompressedVector3(writer, syncData.Scale);
                }
                else
                {
                    writer.WriteVector3(syncData.Scale);
                }
            }
            //Platform.
            if (EnumContains.SyncPropertiesContains(sp, SyncProperties.Platform))
            {
                writer.WriteUInt32(syncData.PlatformNetId);
            }
        }
コード例 #2
0
 public override bool OnSerialize(NetworkWriter writer, bool initialState)
 {
     if (initialState)
     {
         writer.WriteVector3(TargetTransform.GetPosition(base.UseLocalSpace));
         writer.WriteUInt32(Quaternions.CompressQuaternion(TargetTransform.GetRotation(base.UseLocalSpace)));
         writer.WriteVector3(TargetTransform.GetScale());
     }
     return(base.OnSerialize(writer, initialState));
 }
コード例 #3
0
        /// <summary>
        /// Writes a compressed quaternion to a writer.
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="rotation"></param>
        public static void WriteCompressedQuaternion(NetworkWriter writer, Quaternion rotation)
        {
            byte  largest;
            short a, b, c;

            Quaternions.CompressQuaternion(rotation, out largest, out a, out b, out c);
            writer.WriteByte(largest);
            if (!Quaternions.UseLargestOnly(largest))
            {
                writer.WriteInt16(a);
                writer.WriteInt16(b);
                writer.WriteInt16(c);
            }
        }
コード例 #4
0
        public override bool OnSerialize(NetworkWriter writer, bool initialState)
        {
            if (initialState)
            {
                /* If root then no need to send transform data as that's already
                 * handled in the spawn message. */
                if (transform.root == null)
                {
                    return(base.OnSerialize(writer, initialState));
                }

                writer.WriteVector3(TargetTransform.GetPosition(base.UseLocalSpace));
                writer.WriteUInt32(Quaternions.CompressQuaternion(TargetTransform.GetRotation(base.UseLocalSpace)));
                writer.WriteVector3(TargetTransform.GetScale());
            }
            return(base.OnSerialize(writer, initialState));
        }