Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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();
            }
        }
Пример #4
0
        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);
            }
        }