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)); } }
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, }); }
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)); } }