Beispiel #1
0
        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);
        }
Beispiel #2
0
        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;
            }
        }