Exemplo n.º 1
0
        private void ReadFontIndices(ImgbArchiveAccessor accessor, out WpdArchiveListing listing, out WpdEntry[] textureEntries, out WpdEntry[] fontEntries, out string[] names)
        {
            listing = WpdArchiveListingReader.Read(accessor);

            List <WpdEntry> textures = new List <WpdEntry>(4);
            List <WpdEntry> fonts    = new List <WpdEntry>(4);

            foreach (WpdEntry entry in listing)
            {
                const string prefix = "wfnt";

                if (!entry.NameWithoutExtension.StartsWith(prefix))
                {
                    continue;
                }

                switch (entry.Extension)
                {
                case "txbh":
                    textures.Add(entry);
                    break;

                case "wfl":
                    fonts.Add(entry);
                    break;
                }
            }

            names          = SortAndExcludeNotPaired(textures, fonts);
            fontEntries    = fonts.ToArray();
            textureEntries = textures.ToArray();
        }
Exemplo n.º 2
0
        private UiNode[] ExpandTrbChilds()
        {
            ImgbArchiveAccessor imgbAccessor = new ImgbArchiveAccessor(_listing, _indices, _binary);

            SeDbArchiveListing sedbListing = SeDbArchiveListingReader.Read(imgbAccessor);

            UiNode[] result = new UiNode[sedbListing.Count];
            int      offset = sedbListing.Count * 16 + 0x40;

            using (Stream headers = imgbAccessor.ExtractHeaders())
                using (BinaryReader br = new BinaryReader(headers))
                {
                    for (int i = 0; i < result.Length; i++)
                    {
                        SeDbResEntry entry = sedbListing[i];
                        String       name  = entry.Index.ToString();

                        SectionType type;
                        if (TryReadSectionType(br, offset, entry, out type))
                        {
                            name = name + "." + type.ToString().ToLower();
                        }

                        result[i] = new UiSeDbTableLeaf(name, entry, sedbListing)
                        {
                            Parent = this
                        };
                    }
                }
            return(result);
        }
Exemplo n.º 3
0
        private void ReadXgrContent(ImgbArchiveAccessor accessor, out WpdArchiveListing listing, out WpdEntry[] fontEntries, out WflContent[] fontContent, out TextureSection[] textureHeaders, out string[] names)
        {
            using (Stream indices = accessor.ExtractHeaders())
            {
                WpdEntry[] textureEntries;
                ReadFontIndices(accessor, out listing, out textureEntries, out fontEntries, out names);

                fontContent    = ReadFontContent(indices, fontEntries);
                textureHeaders = ReadTextureHeaders(indices, textureEntries);
            }
        }
Exemplo n.º 4
0
        public TextEncodingInfo Provide()
        {
            ImgbArchiveAccessor accessor = CreateAccessor();

            WpdArchiveListing listing;

            WpdEntry[]       fontEntries;
            WflContent[]     fontContent;
            TextureSection[] textureHeaders;
            string[]         names;
            ReadXgrContent(accessor, out listing, out fontEntries, out fontContent, out textureHeaders, out names);

            DxTexture[] textures = ReadTextures(accessor, textureHeaders);
            try
            {
                char[] chars = new char[256 + WflContent.AdditionalTableCount];
                ConcurrentDictionary <char, short> codes = new ConcurrentDictionary <char, short>();
                if (_oldEncoding == null)
                {
                    _oldEncoding = InteractionService.TextEncoding.Provide();
                }

                UiEncodingWindowSource[] sources = PrepareWindowSources(fontContent, textures, names, chars, codes);
                UiEncodingWindow         wnd     = new UiEncodingWindow();
                foreach (UiEncodingWindowSource source in sources)
                {
                    wnd.Add(source);
                }

                if (wnd.ShowDialog() == true)
                {
                    FFXIIICodePage     codepage = new FFXIIICodePage(chars, new Dictionary <char, short>(codes));
                    FFXIIITextEncoding encoding = new FFXIIITextEncoding(codepage);
                    TextEncodingInfo   result   = new TextEncodingInfo(encoding);

                    result.Save();

                    Inject(listing, fontEntries, fontContent);

                    return(result);
                }
            }
            finally
            {
                textures.SafeDispose();
            }

            throw new OperationCanceledException();
        }
Exemplo n.º 5
0
        private UiNode[] ExpandWpdChilds()
        {
            ImgbArchiveAccessor imgbAccessor = new ImgbArchiveAccessor(_listing, _indices, _binary);
            WpdArchiveListing   wpdListing   = WpdArchiveListingReader.Read(imgbAccessor);

            UiNode[] result = new UiNode[wpdListing.Count];
            for (int i = 0; i < result.Length; i++)
            {
                WpdEntry xgrEntry = wpdListing[i];
                result[i] = new UiWpdTableLeaf(xgrEntry.Name, xgrEntry, wpdListing)
                {
                    Parent = this
                };
            }
            return(result);
        }
Exemplo n.º 6
0
        private static DxTexture[] ReadTextures(ImgbArchiveAccessor accessor, TextureSection[] gtexDatas)
        {
            DxTexture[] textures = new DxTexture[gtexDatas.Length];

            using (Stream imgbStream = accessor.ExtractContent())
                using (DisposableStack insurance = new DisposableStack())
                {
                    for (int i = 0; i < gtexDatas.Length; i++)
                    {
                        GtexData data = gtexDatas[i].Gtex;
                        textures[i] = insurance.Add(ReadTexture(imgbStream, data));
                    }
                    insurance.Clear();
                }

            return(textures);
        }