Exemplo n.º 1
0
 public static void Serialize(this SerializingContainer2 sc, ref KCachedConvexDataElement convDataElem)
 {
     if (sc.IsLoading)
     {
         convDataElem = new KCachedConvexDataElement();
     }
     sc.BulkSerialize(ref convDataElem.ConvexElementData, SCExt.Serialize, 1);
 }
Exemplo n.º 2
0
 public static void Serialize(this SerializingContainer2 sc, ref StaticReceiverData dat)
 {
     if (sc.IsLoading)
     {
         dat = new StaticReceiverData();
     }
     sc.Serialize(ref dat.PrimitiveComponent);
     sc.BulkSerialize(ref dat.Vertices, Serialize, sc.Game == MEGame.ME3 ? 28 : 52);
     sc.BulkSerialize(ref dat.Indices, SCExt.Serialize, 2);
     sc.Serialize(ref dat.NumTriangles);
     sc.Serialize(ref dat.LightMap);
     if (sc.Game == MEGame.ME3)
     {
         sc.Serialize(ref dat.ShadowMap1D, Serialize);
         sc.Serialize(ref dat.Data);
         sc.Serialize(ref dat.InstanceIndex);
     }
 }
Exemplo n.º 3
0
        public LightmassPrimitiveSettings[] LightmassSettings; //ME3

        protected override void Serialize(SerializingContainer2 sc)
        {
            sc.Serialize(ref Bounds);
            sc.BulkSerialize(ref Vectors, SCExt.Serialize, 12);
            sc.BulkSerialize(ref Points, SCExt.Serialize, 12);
            sc.BulkSerialize(ref Nodes, SCExt.Serialize, 64);
            sc.Serialize(ref Self);
            sc.Serialize(ref Surfs, SCExt.Serialize);
            sc.BulkSerialize(ref Verts, SCExt.Serialize, sc.Game == MEGame.ME3 ? 16 : 24);
            sc.Serialize(ref NumSharedSides);
            sc.Serialize(ref Zones, SCExt.Serialize);
            sc.Serialize(ref Polys);
            sc.BulkSerialize(ref LeafHulls, SCExt.Serialize, 4);
            sc.BulkSerialize(ref Leaves, SCExt.Serialize, 4);
            sc.Serialize(ref RootOutside);
            sc.Serialize(ref Linked);
            sc.BulkSerialize(ref PortalNodes, SCExt.Serialize, 4);
            if (sc.Game != MEGame.UDK)
            {
                sc.BulkSerialize(ref ShadowVolume, SCExt.Serialize, 16);
            }
            else if (sc.IsLoading)
            {
                ShadowVolume = Array.Empty <MeshEdge>();
            }
            sc.Serialize(ref NumVertices);
            sc.BulkSerialize(ref VertexBuffer, SCExt.Serialize, 36);
            if (sc.Game >= MEGame.ME3)
            {
                sc.Serialize(ref LightingGuid);
                sc.Serialize(ref LightmassSettings, SCExt.Serialize);
            }
            else if (sc.IsLoading)
            {
                LightmassSettings = new[]
                {
                    new LightmassPrimitiveSettings
                    {
                        FullyOccludedSamplesFraction = 1,
                        EmissiveLightFalloffExponent = 2,
                        EmissiveBoost = 1,
                        DiffuseBoost  = 1,
                        SpecularBoost = 1
                    }
                };
            }
        }
Exemplo n.º 4
0
        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>();
            }
        }