示例#1
0
        public void Write(FileWriter writer, FFNT Header)
        {
            long pos = writer.Position;

            if (BinaryTextureFile != null)
            {
                var mem = new System.IO.MemoryStream();
                BinaryTextureFile.Save(mem);
                SheetDataList[0] = mem.ToArray();
            }

            writer.WriteSignature("TGLP");
            writer.Write(uint.MaxValue);
            writer.Write(CellWidth);
            writer.Write(CellHeight);
            writer.Write((byte)SheetDataList.Count);
            writer.Write(MaxCharWidth);
            writer.Write(SheetDataList[0].Length);
            writer.Write(BaseLinePos);
            writer.Write(Format);
            writer.Write(ColumnCount);
            writer.Write(RowCount);
            writer.Write(SheetWidth);
            writer.Write(SheetHeight);
            long _ofsSheetBlocks = writer.Position;

            writer.Write(uint.MaxValue);

            if (Header.Platform == FFNT.PlatformType.NX)
            {
                writer.Align(4096);
            }
            else
            {
                writer.Align(8192);
            }

            long DataPosition = writer.Position;

            using (writer.TemporarySeek(_ofsSheetBlocks, SeekOrigin.Begin))
            {
                writer.Write((uint)DataPosition);
            }

            for (int i = 0; i < SheetDataList.Count; i++)
            {
                writer.Write(SheetDataList[i]);
            }


            long SectionEndPosition = writer.Position;

            //End of section. Set the size
            using (writer.TemporarySeek(pos + 4, SeekOrigin.Begin))
            {
                writer.Write((uint)(SectionEndPosition - pos));
            }
        }
示例#2
0
            public void AddTexture(string fileName)
            {
                BNTX bntx = BNTX.CreateBNTXFromTexture(fileName);
                var  mem  = new MemoryStream();

                bntx.Save(mem);

                string filePath = fileName;

                ArchiveFile.AddFile(new ArchiveFileInfo()
                {
                    FileData   = mem.ToArray(),
                    FileFormat = bntx,
                    FileName   = filePath,
                });
            }
示例#3
0
        public void Write(FileWriter writer, FFNT header)
        {
            long pos = writer.Position;

            SheetSize  = (uint)SheetDataList[0].Length;
            SheetCount = (byte)SheetDataList.Count;
            if (BinaryTextureFile != null)
            {
                var mem = new System.IO.MemoryStream();
                BinaryTextureFile.Save(mem);
                var binaryFile = mem.ToArray();

                SheetDataList.Clear();

                SheetSize = (uint)(binaryFile.Length / SheetCount);

                uint offset = 0;
                for (int i = 0; i < SheetCount; i++)
                {
                    SheetDataList.Add(Utils.SubArray(binaryFile, offset, SheetSize));
                    offset += SheetSize;
                }
            }

            writer.WriteSignature("TGLP");
            writer.Write(uint.MaxValue);
            writer.Write(CellWidth);
            writer.Write(CellHeight);
            if (header.Platform <= FFNT.PlatformType.Ctr && header.Version < 0x04000000)
            {
                writer.Write((byte)BaseLinePos);
                writer.Write(MaxCharWidth);
                writer.Write(SheetSize);
                writer.Write((ushort)SheetCount);
            }
            else
            {
                writer.Write((byte)SheetCount);
                writer.Write(MaxCharWidth);
                writer.Write(SheetSize);
                writer.Write(BaseLinePos);
            }

            writer.Write(Format);
            writer.Write(RowCount);
            writer.Write(ColumnCount);
            writer.Write(SheetWidth);
            writer.Write(SheetHeight);
            long _ofsSheetBlocks = writer.Position;

            writer.Write(uint.MaxValue);

            if (header.Platform == FFNT.PlatformType.NX)
            {
                writer.Align(4096);
            }
            else if (header.Platform == FFNT.PlatformType.Cafe)
            {
                writer.Align(8192);
            }
            else if (header.Platform == FFNT.PlatformType.Ctr)
            {
                writer.Align(64);
            }
            else
            {
                writer.Align(32);
            }

            long DataPosition = writer.Position;

            using (writer.TemporarySeek(_ofsSheetBlocks, SeekOrigin.Begin))
            {
                writer.Write((uint)DataPosition);
            }

            for (int i = 0; i < SheetDataList.Count; i++)
            {
                writer.Write(SheetDataList[i]);
            }


            long SectionEndPosition = writer.Position;

            //End of section. Set the size
            using (writer.TemporarySeek(pos + 4, SeekOrigin.Begin))
            {
                writer.Write((uint)(SectionEndPosition - pos));
            }
        }