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); } }
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 ); } }
+ sizeof(int) * 3; //name length, group length, dataOffset internal void Serialize(IUnrealStream stream) { stream.WriteString(name); stream.WriteString(group); stream.Write(dataOffset); }
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 ); }