protected override void Serialize(SerializingContainer2 sc) { if (sc.Pcc.Platform == MEPackage.GamePlatform.PS3) { // Unknown items sc.SerializeConstInt(0); sc.SerializeConstInt(0); } sc.SerializeBulkData(ref RawData, SCExt.Serialize); sc.SerializeBulkData(ref CompressedPCData, SCExt.Serialize); sc.SerializeBulkData(ref CompressedXbox360Data, SCExt.Serialize); sc.SerializeBulkData(ref CompressedPS3Data, SCExt.Serialize); }
private static void Serialize(this SerializingContainer2 sc, LightMap_1D lmap) { sc.Serialize(ref lmap.LightGuids, SCExt.Serialize); sc.Serialize(ref lmap.Owner); sc.SerializeBulkData(ref lmap.DirectionalSamples, Serialize); sc.Serialize(ref lmap.ScaleVector1); sc.Serialize(ref lmap.ScaleVector2); sc.Serialize(ref lmap.ScaleVector3); if (sc.Game < MEGame.ME3) { sc.Serialize(ref lmap.ScaleVector4); } sc.SerializeBulkData(ref lmap.SimpleSamples, Serialize); }
private static void Serialize(this SerializingContainer2 sc, LightMap_5 lmap) { sc.Serialize(ref lmap.LightGuids, SCExt.Serialize); sc.Serialize(ref lmap.unkInt); sc.SerializeBulkData(ref lmap.SimpleSamples, Serialize); sc.Serialize(ref lmap.unkVector); }
private static void Serialize(this SerializingContainer2 sc, LightMap_3 lmap) { sc.Serialize(ref lmap.LightGuids, SCExt.Serialize); sc.Serialize(ref lmap.unkInt); sc.SerializeBulkData(ref lmap.DirectionalSamples, Serialize); sc.Serialize(ref lmap.unkVector1); sc.Serialize(ref lmap.unkVector2); }
protected override void Serialize(SerializingContainer2 sc) { if (sc.Game < MEGame.ME3) { var empty = new byte[0]; sc.SerializeBulkData(ref empty); } sc.Serialize(ref IsExternal); if (sc.IsSaving && !IsExternal) { DataOffset = sc.FileOffset + 12; DataSize = EmbeddedData.Length; } sc.Serialize(ref DataSize); sc.Serialize(ref DataSize); sc.Serialize(ref DataOffset); if (!IsExternal) { sc.Serialize(ref EmbeddedData, DataSize); } }
public static void Serialize(this SerializingContainer2 sc, ref StaticMeshRenderData data) { if (sc.IsLoading) { data = new StaticMeshRenderData(); } sc.SerializeBulkData(ref data.RawTriangles, Serialize); sc.Serialize(ref data.Elements, Serialize); sc.Serialize(ref data.PositionVertexBuffer); if (sc.IsSaving) { if (sc.Game >= MEGame.ME3 && data.ColorVertexBuffer == null) { //this was read in from ME1 or ME2, we need to seperate out the color data data.ColorVertexBuffer = new ColorVertexBuffer { VertexData = data.VertexBuffer.VertexData.Select(vertex => vertex.Color).ToArray(), NumVertices = (uint)data.VertexBuffer.VertexData.Length, Stride = 4 }; } else if (sc.Game < MEGame.ME3 && data.ColorVertexBuffer != null) { //this was read in from ME3 or UDK, we need to integrate the color data // Why is this written backwards? for (int i = data.VertexBuffer.VertexData.Length - 1; i >= 0; i--) { data.VertexBuffer.VertexData[i].Color = data.ColorVertexBuffer.VertexData[i]; } } } sc.Serialize(ref data.VertexBuffer); if (sc.Game >= MEGame.ME3) { sc.Serialize(ref data.ColorVertexBuffer); } if (sc.Game < MEGame.UDK) { sc.Serialize(ref data.ShadowExtrusionVertexBuffer); } else if (sc.IsLoading) { data.ShadowExtrusionVertexBuffer = new ExtrusionVertexBuffer { Stride = 4, VertexData = Array.Empty <float>() }; } sc.Serialize(ref data.NumVertices); int elementSize = 2; sc.Serialize(ref elementSize); sc.Serialize(ref data.IndexBuffer, SCExt.Serialize); elementSize = 2; sc.Serialize(ref elementSize); sc.Serialize(ref data.WireframeIndexBuffer, SCExt.Serialize); if (sc.Game != MEGame.UDK) { elementSize = 16; sc.Serialize(ref elementSize); sc.Serialize(ref data.Edges, Serialize); sc.Serialize(ref data.ShadowTriangleDoubleSided, SCExt.Serialize); } else if (sc.IsLoading) { data.Edges = Array.Empty <MeshEdge>(); data.ShadowTriangleDoubleSided = Array.Empty <byte>(); } if (sc.Game == MEGame.UDK) { sc.BulkSerialize(ref data.unkBuffer, SCExt.Serialize, 2); } if (sc.Game == MEGame.ME1) { sc.Serialize(ref data.unk1); int bulkDataFlags = 0; sc.Serialize(ref bulkDataFlags); int byteCount = data.xmlFile?.Length ?? 0; sc.Serialize(ref byteCount); sc.Serialize(ref byteCount); sc.SerializeFileOffset(); sc.Serialize(ref data.xmlFile, byteCount); } else if (sc.IsLoading) { data.xmlFile = Array.Empty <byte>(); } }