private static unsafe void WriteComposite(this IUIPropertyWriter targetWriter, Type type, string s, IntPtr ptr, TypeDecomposer.FieldData fieldData, MemoryBinaryWriter extraBytesStream, long extraByteStreamOffset, UIPropertyWriterContext context) { var elements = s.Split(' ').Where(x => targetWriter.CanParse(x)).Take(4).ToArray(); switch (elements.Length) { case 0: return; case 1: targetWriter.DoCompositeWrite(type, ptr, fieldData, elements[0], elements[0], elements[0], elements[0], extraBytesStream, extraByteStreamOffset, context); return; case 2: targetWriter.DoCompositeWrite(type, ptr, fieldData, elements[0], elements[1], elements[0], elements[1], extraBytesStream, extraByteStreamOffset, context); return; case 3: targetWriter.DoCompositeWrite(type, ptr, fieldData, elements[0], elements[1], elements[1], elements[2], extraBytesStream, extraByteStreamOffset, context); return; default: targetWriter.DoCompositeWrite(type, ptr, fieldData, elements[0], elements[1], elements[2], elements[3], extraBytesStream, extraByteStreamOffset, context); return; } }
private static void DoCompositeWrite(this IUIPropertyWriter targetWriter, Type type, IntPtr ptr, TypeDecomposer.FieldData fieldData, string sx, string sy, string sz, string sw, MemoryBinaryWriter extraBytesStream, long extraByteStreamOffset, UIPropertyWriterContext context) { var size = UnsafeUtility.SizeOf(type); targetWriter.Write(sx, ptr, new TypeDecomposer.FieldData { offset = fieldData.offset, length = size, type = type, isAssetReference = false }, extraBytesStream, extraByteStreamOffset, context); targetWriter.Write(sy, ptr, new TypeDecomposer.FieldData { offset = fieldData.offset + size, length = size, type = type, isAssetReference = false }, extraBytesStream, extraByteStreamOffset, context); targetWriter.Write(sz, ptr, new TypeDecomposer.FieldData { offset = fieldData.offset + (size * 2), length = size, type = type, isAssetReference = false }, extraBytesStream, extraByteStreamOffset, context); targetWriter.Write(sw, ptr, new TypeDecomposer.FieldData { offset = fieldData.offset + (size * 3), length = size, type = type, isAssetReference = false }, extraBytesStream, extraByteStreamOffset, context); }