[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); }
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); }
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); }
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); }
// 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); } }
// 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); }
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); }
public static void WriteRay(this NetworkWriter writer, Ray value) { writer.WriteVector3(value.origin); writer.WriteVector3(value.direction); }
public static void WritePlane(this NetworkWriter writer, Plane value) { writer.WriteVector3(value.normal); writer.WriteSingle(value.distance); }