Represents data of a loaded unreal package.
상속: IDisposable, IBuffered
예제 #1
0
 /// <summary>
 /// Loads the given file specified by PackagePath and
 /// returns the serialized UnrealPackage.
 /// </summary>
 public static UnrealPackage LoadPackage( string packagePath, IBufferDecoder decoder = null, FileAccess fileAccess = FileAccess.Read )
 {
     var stream = new UPackageStream( packagePath, FileMode.Open, fileAccess );
     var package = new UnrealPackage( stream ) {Decoder = decoder};
     package.Deserialize( stream );
     return package;
 }
예제 #2
0
        public void PostInit( UnrealPackage package )
        {
            Package = package;

            if( !CanRead )
                return;

            if( package.Decoder != null )
            {
                package.Decoder.PreDecode( this );
            }

            var bytes = new byte[4];
            Read( bytes, 0, 4 );
            var readSignature = BitConverter.ToUInt32( bytes, 0 );
            if( readSignature == UnrealPackage.Signature_BigEndian )
            {
                Console.WriteLine( "Encoding:BigEndian" );
                BigEndianCode = true;
            }

            if( !UnrealConfig.SuppressSignature
                && readSignature != UnrealPackage.Signature
                && readSignature != UnrealPackage.Signature_BigEndian )
            {
                throw new FileLoadException( package.PackageName + " isn't an UnrealPackage!" );
            }
            Position = 4;
        }
예제 #3
0
 /// <summary>
 /// Called as soon the build for @Package is detected.
 /// </summary>
 /// <param name="build"></param>
 public void BuildDetected( UnrealPackage.GameBuild build )
 {
     if( Package.Decoder != null )
     {
         Package.Decoder.DecodeBuild( this, build );
     }
 }
예제 #4
0
 public static UnrealPackage DeserializePackage( string packagePath, FileAccess fileAccess = FileAccess.Read )
 {
     var stream = new UPackageStream( packagePath, FileMode.Open, fileAccess );
     var pkg = new UnrealPackage( stream );
     pkg.Deserialize( stream );
     return pkg;
 }
예제 #5
0
            public GameBuild( UnrealPackage package )
            {
                if( UnrealConfig.Platform == UnrealConfig.CookedPlatform.Console )
                {
                    IsConsoleCompressed = true;
                }

                var gameBuilds = Enum.GetValues( typeof(BuildName) ) as BuildName[];
                foreach( var gameBuild in gameBuilds )
                {
                    var gameBuildMember = typeof(BuildName).GetMember( gameBuild.ToString() );
                    if( gameBuildMember.Length == 0 )
                        continue;

                    var attribs = gameBuildMember[0].GetCustomAttributes( false );
                    var game = attribs.OfType<BuildAttribute>().SingleOrDefault(attr => attr.Verify( this, package ));
                    if( game == null ) 
                        continue;

                    Name = (BuildName)Enum.Parse( typeof(BuildName), Enum.GetName( typeof(BuildName), gameBuild ) );
                    if( package.Decoder != null )
                    {
                        break;
                    }

                    var buildDecoderAttr = attribs.SingleOrDefault( attr => attr is BuildDecoderAttribute ) as BuildDecoderAttribute;
                    if( buildDecoderAttr == null )
                        break;

                    package.Decoder = buildDecoderAttr.CreateDecoder();
                    break;
                }

                if( Name == BuildName.Unset )
                {
                    Name = package.LicenseeVersion == 0 ? BuildName.Default : BuildName.Unknown;
                }
            }
예제 #6
0
                public bool Verify( GameBuild gb, UnrealPackage package )
                {
                    if( _VerifyEqual
                        ? package.Version != _MinVersion || package.LicenseeVersion != _MinLicensee
                        : package.Version < _MinVersion || package.Version > _MaxVersion ||
                          package.LicenseeVersion < _MinLicensee || package.LicenseeVersion > _MaxLicensee )
                        return false;

                    gb.Version = package.Version;
                    gb.LicenseeVersion = package.LicenseeVersion;

                    if( _IsConsoleCompressed < 2 )
                    {
                        gb.IsConsoleCompressed = _IsConsoleCompressed == 1;
                    }

                    if( _IsXenonCompressed < 2 )
                    {
                        gb.IsXenonCompressed = _IsXenonCompressed == 1;
                    }
                    return true;
                }