Esempio n. 1
0
            /// <summary>
            /// Exports the specified BinaryHTML XAsset.
            /// </summary>
            /// <param name="xasset"></param>
            /// <param name="instance"></param>
            /// <returns>Status of the export operation.</returns>
            public override JekyllStatus Export(GameXAsset xasset, JekyllInstance instance)
            {
                BinaryHTMLXAsset header = instance.Reader.ReadStruct <BinaryHTMLXAsset>(xasset.HeaderAddress);

                if (xasset.Name != instance.Reader.ReadNullTerminatedString(header.Name))
                {
                    return(JekyllStatus.MemoryChanged);
                }

                string path = Path.Combine(instance.ExportPath, xasset.Name);

                Directory.CreateDirectory(Path.GetDirectoryName(path));

                byte[] buffer = instance.Reader.ReadBytes(header.Buffer, header.Len);

                File.WriteAllBytes(path, buffer);

                Console.WriteLine($"Exported {xasset.Type} {xasset.Name}");

                return(JekyllStatus.Success);
            }
Esempio n. 2
0
            /// <summary>
            /// Load the valid XAssets for the BinaryHTML XAsset Pool.
            /// </summary>
            /// <param name="instance"></param>
            /// <returns>List of BinaryHTML XAsset objects.</returns>
            public override List <GameXAsset> Load(JekyllInstance instance)
            {
                List <GameXAsset> results = new List <GameXAsset>();

                XAssetPool pool = instance.Reader.ReadStruct <XAssetPool>(instance.Game.DBAssetPools + (Index * Marshal.SizeOf <XAssetPool>()));

                Entries     = pool.Pool;
                ElementSize = pool.ItemSize;
                PoolSize    = (uint)pool.ItemCount;

                if (IsValidPool(Name, ElementSize, Marshal.SizeOf <BinaryHTMLXAsset>()) == false)
                {
                    return(results);
                }

                for (int i = 0; i < PoolSize; i++)
                {
                    BinaryHTMLXAsset header = instance.Reader.ReadStruct <BinaryHTMLXAsset>(Entries + (i * ElementSize));

                    if (IsNullXAsset(header.Name))
                    {
                        continue;
                    }
                    else if (header.Len == 0)
                    {
                        continue;
                    }

                    results.Add(new GameXAsset()
                    {
                        Name          = instance.Reader.ReadNullTerminatedString(header.Name),
                        Type          = Name,
                        Size          = ElementSize,
                        XAssetPool    = this,
                        HeaderAddress = Entries + (i * ElementSize),
                    });
                }

                return(results);
            }