示例#1
0
        public void Serialize(IUnrealStream stream)
        {
            stream.WriteString(Name);

            if (stream.Version < QWORDVersion)
            {
                // Writing UINT
                stream.UW.Write((uint)Flags);
            }
            else
            {
                // Writing ULONG
                stream.UW.Write(Flags);
            }
        }
示例#2
0
        public void Serialize( IUnrealStream stream )
        {
            stream.WriteString( Name );

            if( stream.Version < QWORDVersion )
            {
                // Writing UINT
                stream.UW.Write( (uint)Flags );
            }
            else
            {
                // Writing ULONG
                stream.UW.Write( Flags );
            }
        }
示例#3
0
        + sizeof(int) * 3;             //name length, group length, dataOffset

        internal void Serialize(IUnrealStream stream)
        {
            stream.WriteString(name);
            stream.WriteString(group);
            stream.Write(dataOffset);
        }
示例#4
0
        public void Serialize( IUnrealStream stream )
        {
            // Serialize tables
            var namesBuffer = new UObjectStream( stream );
            foreach( var name in Names )
            {
                name.Serialize( namesBuffer );
            }

            var importsBuffer = new UObjectStream( stream );
            foreach( var import in Imports )
            {
                import.Serialize( importsBuffer );
            }

            var exportsBuffer = new UObjectStream( stream );
            foreach( var export in Exports )
            {
                //export.Serialize( exportsBuffer );
            }

            stream.Seek( 0, SeekOrigin.Begin );

            stream.Write( Signature );

            // Serialize header
            var version = (int)(Version & 0x0000FFFFU) | (LicenseeVersion << 16);
            stream.Write( version );

            var headerSizePosition = stream.Position;
            if( Version >= VHeaderSize )
            {
                stream.Write( (int)HeaderSize );
                if( Version >= VGroup )
                {
                    stream.WriteString( Group );
                }
            }

            stream.Write( PackageFlags );

            _TablesData.NamesCount = (uint)Names.Count;
            _TablesData.ExportsCount = (uint)Exports.Count;
            _TablesData.ImportsCount = (uint)Imports.Count;

            var tablesDataPosition = stream.Position;
            _TablesData.Serialize( stream );

            // TODO: Serialize Heritages

            stream.Write( Guid.NewGuid().ToByteArray(), 0, 16 );
            Generations.Serialize( stream );

            if( Version >= VEngineVersion )
            {
                stream.Write( EngineVersion );
                if( Version >= VCOOKEDPACKAGES )
                {
                    stream.Write( CookerVersion );

                    if( Version >= VCompression )
                    {
                        if( IsCooked() )
                        {
                            stream.Write( CompressionFlags );
                            CompressedChunks.Serialize( stream );
                        }
                    }
                }
            }

            // TODO: Unknown data
            stream.Write( (uint)0 );

            // Serialize objects

            // Write tables

            // names
            Console.WriteLine( "Writing names at position " + stream.Position );
            _TablesData.NamesOffset = (uint)stream.Position;
            var namesBytes = namesBuffer.GetBuffer();
            stream.Write( namesBytes, 0, (int)namesBuffer.Length );

            // imports
            Console.WriteLine( "Writing imports at position " + stream.Position );
            _TablesData.ImportsOffset = (uint)stream.Position;
            var importsBytes = importsBuffer.GetBuffer();
            stream.Write( importsBytes, 0, (int)importsBuffer.Length );

            // exports
            Console.WriteLine( "Writing exports at position " + stream.Position );

            // Serialize tables data again now that offsets are known.
            var currentPosition = stream.Position;
            stream.Seek( tablesDataPosition, SeekOrigin.Begin );
            _TablesData.Serialize( stream );
            stream.Seek( currentPosition, SeekOrigin.Begin );
        }