Ejemplo n.º 1
0
 public void Serialize(BinaryWriter writer, PackageFile package)
 {
     Name.Serialize(writer, package);
     Type.Serialize(writer, package);
     writer.Write(Size);
     writer.Write(Index);
 }
Ejemplo n.º 2
0
 public void Serialize(BinaryWriter writer, PackageFile package)
 {
     ClassPackage.Serialize(writer, package);
     ClassName.Serialize(writer, package);
     PackageRef.Serialize(writer, package);
     ObjectName.Serialize(writer, package);
 }
Ejemplo n.º 3
0
        public void Serialize(BinaryWriter writer, PackageFile package)
        {
            ClassIndex.Serialize(writer, package);
            SuperIndex.Serialize(writer, package);
            if (package.Header.IsVersionOrGreater(UE4Versions.VER_UE4_TemplateIndex_IN_COOKED_EXPORTS))
            {
                TemplateIndex.Serialize(writer, package);
            }
            OuterIndex.Serialize(writer, package);

            ObjectName.Serialize(writer, package);
            writer.Write(ObjectFlags);

            if (package.Header.IsVersionOrGreater(UE4Versions.VER_UE4_64BIT_EXPORTMAP_SERIALSIZES))
            {
                writer.Write(SerialSize);
            }
            else
            {
                writer.Write((int)SerialSize);
            }

            if (package.Header.IsVersionOrGreater(UE4Versions.VER_UE4_64BIT_EXPORTMAP_SERIALSIZES))
            {
                writer.Write(SerialOffset);
            }
            else
            {
                writer.Write((int)SerialOffset);
            }

            writer.Write(bForcedExport);
            writer.Write(bNotForClient);
            writer.Write(bNotForServer);
            writer.Write(PackageGuid);
            writer.Write(PackageFlags);

            if (package.Header.IsVersionOrGreater(UE4Versions.VER_UE4_LOAD_FOR_EDITOR_GAME))
            {
                writer.Write(bNotAlwaysLoadedForEditorGame);
            }

            if (package.Header.IsVersionOrGreater(UE4Versions.VER_UE4_COOKED_ASSETS_IN_EDITOR_SUPPORT))
            {
                writer.Write(bIsAsset);
            }

            if (package.Header.IsVersionOrGreater(UE4Versions.VER_UE4_PRELOAD_DEPENDENCIES_IN_COOKED_EXPORTS))
            {
                writer.Write(FirstExportDependency);
                writer.Write(SerializationBeforeSerializationDependencies);
                writer.Write(CreateBeforeSerializationDependencies);
                writer.Write(SerializationBeforeCreateDependencies);
                writer.Write(CreateBeforeCreateDependencies);
            }
        }
Ejemplo n.º 4
0
        public void Serialize(BinaryWriter writer, PackageFile package)
        {
            for (int i = 0; i < PropertyTags.Count; i++)
            {
                var           tag      = PropertyTags[i];
                ISerializable property = null;
                if (Properties.Count >= i)
                {
                    property = Properties[i];
                }

                tag.Serialize(writer, package);
                if (property != null)
                {
                    property.Serialize(writer, package);
                }
            }
            var endName = new FName();

            endName.Value = "None";
            endName.Serialize(writer, package);

            writer.Write(Reserved);

            foreach (var prop in Properties)
            {
                if (prop.GetType() != typeof(ObjectProperty))
                {
                    continue;
                }

                writer.Write(PropertiesData.Count);

                foreach (var kvp in PropertiesData)
                {
                    kvp.Key.Serialize(writer, package);

                    bool writeStructSize = true;
                    var  settings        = kvp.Value.GetType().GetCustomAttribute <SerializerAttribute>();
                    if (settings != null && settings.NoStructSize)
                    {
                        writeStructSize = false;
                    }

                    long structSizePosition = 0;

                    if (writeStructSize)
                    {
                        structSizePosition = writer.BaseStream.Position;
                        writer.Write((int)0);// dummy val, we'll fix it later
                    }

                    var structStartPosition = writer.BaseStream.Position;
                    kvp.Value.Serialize(writer, package);
                    var structEndPosition = writer.BaseStream.Position;

                    if (writeStructSize)
                    {
                        var structSize = structEndPosition - structStartPosition;
                        writer.BaseStream.Position = structSizePosition;
                        writer.Write((uint)structSize);
                        writer.BaseStream.Position = structEndPosition;
                    }
                }
            }
        }