/// <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); } }
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)); }
/// <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); } }
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)); }