public static void Serialize(this SerializingContainer2 sc, ref kDOPTreeCompact kDopTree) { if (sc.IsLoading) { kDopTree = new kDOPTreeCompact(); } sc.Serialize(ref kDopTree.RootBound); int elementSize = 6; sc.Serialize(ref elementSize); sc.Serialize(ref kDopTree.Nodes, Serialize); elementSize = 8; sc.Serialize(ref elementSize); sc.Serialize(ref kDopTree.Triangles, Serialize); }
public uint unk11; //UDK protected override void Serialize(SerializingContainer2 sc) { sc.Serialize(ref Bounds); sc.Serialize(ref BodySetup); if (sc.IsSaving) { if (sc.Game >= MEGame.ME3 && kDOPTreeME3UDK == null) { kDOPTreeME3UDK = KDOPTreeBuilder.ToCompact(kDOPTreeME1ME2.Triangles, LODModels[0].PositionVertexBuffer.VertexData); } else if (sc.Game < MEGame.ME3 && kDOPTreeME1ME2 == null) { //todo: need to convert kDOPTreeCompact to kDOPTree throw new NotImplementedException("Cannot convert ME3 StaticMeshes to ME1 or ME2 format :("); } } if (sc.Game >= MEGame.ME3) { sc.Serialize(ref kDOPTreeME3UDK); } else { sc.Serialize(ref kDOPTreeME1ME2); } if (sc.IsSaving) { //This will improve loading times by preventing the engine from rebuilding the mesh if (sc.Game == MEGame.ME1) { InternalVersion = 15; } if (sc.Game == MEGame.ME2) { InternalVersion = 16; } if (sc.Game == MEGame.ME3) { InternalVersion = 18; } if (sc.Game == MEGame.UDK) { InternalVersion = 18; } } sc.Serialize(ref InternalVersion); if (sc.Game == MEGame.UDK) { int dummy = 0; sc.Serialize(ref dummy); sc.Serialize(ref dummy); sc.Serialize(ref dummy); sc.Serialize(ref dummy); } sc.Serialize(ref LODModels, SCExt.Serialize); if (sc.Game == MEGame.ME1) { sc.Serialize(ref unk2); sc.Serialize(ref unk3); sc.Serialize(ref unk4); sc.Serialize(ref unk5); sc.Serialize(ref unk6); } else { if (sc.IsSaving && sc.Game == MEGame.UDK) { unk1 = 1; //no clue why, but UDK will crash if this isn't 1 } sc.Serialize(ref unk1); sc.Serialize(ref ThumbnailAngle); sc.Serialize(ref ThumbnailDistance); if (sc.Game != MEGame.UDK) { sc.Serialize(ref unk7); } if (sc.Game >= MEGame.ME3) { sc.Serialize(ref HighResSourceMeshName); sc.Serialize(ref HighResSourceMeshCRC); sc.Serialize(ref LightingGuid); } } if (sc.IsLoading && sc.Game < MEGame.ME3) { LightingGuid = Guid.NewGuid(); } if (sc.Game == MEGame.UDK) { sc.Serialize(ref unk8); sc.Serialize(ref unkFloats, SCExt.Serialize); sc.Serialize(ref unk9); sc.Serialize(ref unk10); sc.Serialize(ref unk11); } else if (sc.IsLoading) { unk8 = 1; unkFloats = Array.Empty <float>(); unk9 = 1; } }