public override void Write(LinearPathMoveInfo value, Span <byte> buffer, ref int offset) { if (value == null) { return; } GenericTypePrimitiveSerializerStrategy <int> .Instance.Write(value.LastIndex, buffer, ref offset); GenericTypePrimitiveSerializerStrategy <float> .Instance.Write(value.FinalPosition.X, buffer, ref offset); GenericTypePrimitiveSerializerStrategy <float> .Instance.Write(value.FinalPosition.Y, buffer, ref offset); GenericTypePrimitiveSerializerStrategy <float> .Instance.Write(value.FinalPosition.Z, buffer, ref offset); if (value.LastIndex > 1 && value.SplineMiddlePoints != null) { throw KnownIncompleteSerializationException.Create <LinearPathMoveInfo>($"TODO: Implement mid points writing."); } }
public override void Write(UpdateFieldValueCollection value, Span <byte> buffer, ref int offset) { throw KnownIncompleteSerializationException.Create <UpdateFieldValueCollection>($"TODO: Reimplement UpdateCollection write."); /*//TODO: Major performance gains if we can avoid allocations here. MAJOR!! * //The size must be equal to the length divided by 8 bits (1 byte) but we do not include the * //remainder from a modular division. The reason for this is it's always sent as 4 byte chunks from * //Trinitycore and the size is always in terms of an int array * byte[] bitmask = new byte[value.UpdateMask.Length / 8]; * * ((ICollection)value.UpdateMask).CopyTo(bitmask, 0); * * byte size = (byte)(bitmask.Length / sizeof(int)); * * //Write the size as if it were an int array first * dest.Write(size); * * dest.Write(bitmask); * * //We must also write the update values * dest.Write(value.UpdateDiffValues);*/ }