public static void RecoverFont(Stream lstFileStream, Stream bitmapFileStream, Stream fontStream) { BinaryReader binaryReader = new BinaryReader(fontStream); int num = binaryReader.ReadInt32(); string data = ""; data += num + "\n"; for (int i = 0; i < num; i++) { data += binaryReader.ReadChar() + "\t"; data += binaryReader.ReadSingle() + "\t"; data += binaryReader.ReadSingle() + "\t"; data += binaryReader.ReadSingle() + "\t"; data += binaryReader.ReadSingle() + "\t"; data += binaryReader.ReadSingle() + "\t"; data += binaryReader.ReadSingle() + "\t"; data += binaryReader.ReadSingle() + "\n"; } data += binaryReader.ReadSingle() + "\n"; data += binaryReader.ReadSingle() + "\t" + binaryReader.ReadSingle() + "\n"; data += binaryReader.ReadSingle() + "\n"; data += binaryReader.ReadChar(); lstFileStream.Write(Encoding.UTF8.GetBytes(data), 0, Encoding.UTF8.GetBytes(data).Length); Texture2DHandler.RecoverTexture2D(bitmapFileStream, fontStream); }
public static void WriteFont(Stream mainStream, Stream lstStream, Stream bitmapStream) { BinaryWriter binaryWriter = new BinaryWriter(mainStream); StreamReader streamReader = new StreamReader(lstStream, Encoding.UTF8); int num = int.Parse(streamReader.ReadLine()); binaryWriter.Write(num); for (int i = 0; i < num; i++) { string[] data = streamReader.ReadLine().Split('\t'); binaryWriter.Write(char.Parse(data[0])); binaryWriter.Write(float.Parse(data[1])); binaryWriter.Write(float.Parse(data[2])); binaryWriter.Write(float.Parse(data[3])); binaryWriter.Write(float.Parse(data[4])); binaryWriter.Write(float.Parse(data[5])); binaryWriter.Write(float.Parse(data[6])); binaryWriter.Write(float.Parse(data[7])); } binaryWriter.Write(float.Parse(streamReader.ReadLine())); string[] floatItem = streamReader.ReadLine().Split('\t'); binaryWriter.Write(float.Parse(floatItem[0])); binaryWriter.Write(float.Parse(floatItem[1])); binaryWriter.Write(float.Parse(streamReader.ReadLine())); binaryWriter.Write(char.Parse(streamReader.ReadLine())); Texture2DHandler.WriteTexture2D(mainStream, bitmapStream); }
public void Load(List <PakInfo> listFileStream, string pakDirectory) { if (!Directory.Exists(pakDirectory)) { Directory.CreateDirectory(pakDirectory); } foreach (PakInfo pakContentFile in listFileStream) { Stream fileStream; switch (pakContentFile.typeName) { case "System.String": fileStream = CreateFile($"{pakDirectory}/{pakContentFile.fileName}.txt"); TextHandler.RecoverText(fileStream, pakContentFile.fileStream); break; case "System.Xml.Linq.XElement": fileStream = CreateFile($"{pakDirectory}/{pakContentFile.fileName}.xml"); TextHandler.RecoverText(fileStream, pakContentFile.fileStream); break; case "Engine.Media.StreamingSource": fileStream = CreateFile($"{pakDirectory}/{pakContentFile.fileName}.ogg"); pakContentFile.fileStream.CopyTo(fileStream); break; case "Engine.Graphics.Texture2D": fileStream = CreateFile($"{pakDirectory}/{pakContentFile.fileName}.png"); Texture2DHandler.RecoverTexture2D(fileStream, pakContentFile.fileStream); break; case "Engine.Audio.SoundBuffer": fileStream = CreateFile($"{pakDirectory}/{pakContentFile.fileName}.wav"); SoundHandler.RecoverSound(fileStream, pakContentFile.fileStream); break; case "Engine.Graphics.Model": fileStream = CreateFile($"{pakDirectory}/{pakContentFile.fileName}.dae"); ModelHandler.RecoverModel(fileStream, pakContentFile.fileStream); //pakContentFile.fileStream.CopyTo(fileStream); break; case "Engine.Graphics.Shader": fileStream = CreateFile($"{pakDirectory}/{pakContentFile.fileName}.shader"); pakContentFile.fileStream.CopyTo(fileStream); break; case "Engine.Media.BitmapFont": try { fileStream = CreateFile($"{pakDirectory}/{pakContentFile.fileName}.lst"); Stream bitmapStream = CreateFile($"{pakDirectory}/{pakContentFile.fileName}.png"); FontHandler.RecoverFont(fileStream, bitmapStream, pakContentFile.fileStream); bitmapStream.Dispose(); } catch { pakContentFile.fileStream.Position = 0; fileStream = CreateFile($"{pakDirectory}/{pakContentFile.fileName}.font"); pakContentFile.fileStream.CopyTo(fileStream); } break; default: throw new Exception("发现无法识别的文件类型:" + pakContentFile.typeName + "\t文件名称:" + pakContentFile.fileName); } fileStream.Dispose(); pakContentFile.fileStream.Dispose(); } }
public Stream Load(string fileName, string typeName) { try { MemoryStream memoryStream = new MemoryStream(); FileStream fileStream; switch (typeName) { case "System.String": fileStream = File.OpenRead(fileName + ".txt"); TextHandler.WriteText(memoryStream, fileStream); break; case "System.Xml.Linq.XElement": fileStream = File.OpenRead(fileName + ".xml"); TextHandler.WriteText(memoryStream, fileStream); break; case "Engine.Media.StreamingSource": fileStream = File.OpenRead(fileName + ".ogg"); fileStream.CopyTo(memoryStream); break; case "Engine.Graphics.Model": fileStream = File.OpenRead(fileName + ".dae"); ModelHandler.WriteModel(memoryStream, fileStream); //fileStream.CopyTo(memoryStream); break; case "Engine.Graphics.Shader": fileStream = File.OpenRead(fileName + ".shader"); fileStream.CopyTo(memoryStream); break; case "Engine.Audio.SoundBuffer": fileStream = File.OpenRead(fileName + ".wav"); SoundHandler.WriteSound(memoryStream, fileStream); break; case "Engine.Graphics.Texture2D": fileStream = File.OpenRead(fileName + ".png"); Texture2DHandler.WriteTexture2D(memoryStream, fileStream); break; case "Engine.Media.BitmapFont": try { fileStream = File.OpenRead(fileName + ".lst"); } catch { fileStream = File.OpenRead(fileName + ".font"); fileStream.CopyTo(memoryStream); break; } FileStream bitmapStream = File.OpenRead(fileName + ".png"); FontHandler.WriteFont(memoryStream, fileStream, bitmapStream); bitmapStream.Dispose(); break; default: throw new Exception("发现不能识别的文件 :" + fileName + "\n文件类型 :" + typeName); } fileStream.Dispose(); memoryStream.Position = 0L; return(memoryStream); } catch (Exception e) { throw new Exception("文件写入错误 :" + fileName + "\t类型 :" + typeName + "\n具体错误信息 :" + e.Message); } }