Пример #1
0
        public void process(byte[] cdsData, Action <String> progress)
        {
            logger.Debug("process lang");

            using (MemoryStream memStream = new MemoryStream(cdsData))
            {
                using (BinaryReader dis = new BinaryReader(memStream))
                {
                    int           entryCount = dis.ReadInt32();
                    byte[]        freqData   = dis.ReadBytes(1024);
                    HuffmanReader reader     = new HuffmanReader(freqData);

                    List <int> keys = new List <int>(entryCount);
                    for (int i = 0; i < entryCount; i++)
                    {
                        int key    = dis.ReadInt32();
                        int offset = Util.readUnsignedLeb128_X(dis.BaseStream);
                        keys.Add(key);
                    }
                    for (int i = 0; i < entryCount; i++)
                    {
                        if (progress != null)
                        {
                            progress.Invoke("english " + i + "/" + entryCount);
                        }
                        int    compressedSize   = Assets.RiftAssets.Util.readUnsignedLeb128_X(dis.BaseStream);
                        int    uncompressedSize = Assets.RiftAssets.Util.readUnsignedLeb128_X(dis.BaseStream);
                        byte[] data             = dis.ReadBytes(compressedSize);
                        byte[] dataOut          = new byte[uncompressedSize];

                        dataOut = reader.read(data, data.Length, dataOut.Length);

                        LangEntry entry = new LangEntry();
                        entry.key            = keys[i];
                        entry.cdata          = dataOut;
                        stringMap[entry.key] = entry;
                    }
                }
            }
            logger.Debug("done process lang");
            progress.Invoke("done");
        }